好的開始是成功的一半,本文首先會(huì)試圖告訴你什么是程序員?為什么要做這樣的程序?正確的入門方法是什么?
程序員只有在理解了以上內(nèi)容的基礎(chǔ)上,才能進(jìn)一步更快地提高自身技能,這時(shí)候再開始程序的設(shè)計(jì)。其實(shí),對(duì)一個(gè)軟件的開發(fā)者來說,真正重要的不在于這行代碼怎么寫,那些代碼應(yīng)該怎么寫,關(guān)鍵是思路的問題,而思路事實(shí)上是經(jīng)驗(yàn)的積累。經(jīng)驗(yàn)是使你從最初的封閉的思維方式,到最后形成開放式的思維的一個(gè)過程。將我十幾年程序生涯中獲得的一些經(jīng)驗(yàn)告訴讀者,使大家少走彎路也是我想寫這本書的主要目的。
1.1 程序≠軟件
現(xiàn)在很多人以為程序就是軟件,軟件就是程序。事實(shí)上,軟件和程序在20世紀(jì)80年代時(shí),還可以說是等同的,或者說,在非pc領(lǐng)域里它們可能還會(huì)是等同的,比如說某個(gè)嵌入式軟件領(lǐng)域,軟件和程序可能是等同的。但是,在pc這個(gè)領(lǐng)域內(nèi),現(xiàn)在的程序已不等于軟件了。這是什么意思呢?
1. 軟件發(fā)展簡述
在20世紀(jì)80年代的時(shí)候,pc剛誕生,這時(shí)國內(nèi)還沒有幾個(gè)人會(huì)寫程序。那么,如果你寫個(gè)程序,別人就可以拿來用。這時(shí)候的程序就能產(chǎn)生價(jià)值,這個(gè)程序就直接等同于軟件。
但軟件行業(yè)發(fā)展到現(xiàn)在,這里以中國的情況為例(美國在20世紀(jì)80年代,程序已經(jīng)不等同于軟件了),程序也不等同于軟件了。因?yàn)楝F(xiàn)在會(huì)寫程序很容易,但是你的這個(gè)程序很難產(chǎn)生什么樣的商業(yè)意義,也不能產(chǎn)生什么價(jià)值,這就很難直接變成軟件。要使一個(gè)程序直接變成軟件,中間就面臨著很高的門檻問題。這個(gè)門檻問題來自于整個(gè)行業(yè)的形成。
現(xiàn)在,你寫了一個(gè)程序以后,要面臨商業(yè)化的過程。你要宣傳,你要讓用戶知道,你要建立經(jīng)銷渠道,可能你還要花很多的時(shí)間去說服別人用你的東西。這是程序到軟件的一個(gè)過程。這門檻已比較高了。
我們?cè)诤蛧鴥?nèi)的大經(jīng)銷商的銷售渠道的人聊天時(shí),他們的老板說,這幾年做軟件的門檻挺高的,如果你沒有五、六百萬做軟件,那是“玩”不起來的。我說:“你們就使門檻很高了。”他說:“那肯定是的。如果你寫個(gè)“爛”程序,明天你倒閉了,你的東西還占了我的庫房,我還不知道找誰退去呢。我的庫房是要錢的呀!現(xiàn)在的軟件又是那么多!”
所以,如果你沒有一定的資產(chǎn)的話,經(jīng)銷商都不理你。實(shí)際情況也是這樣的,如果你的公司比較小,且沒什么名氣,你的產(chǎn)品放到經(jīng)銷商庫房,那么他最多給你暫收,產(chǎn)品銷不動(dòng)的話,一般兩周絕對(duì)會(huì)退貨。因?yàn)楝F(xiàn)在經(jīng)銷商可選擇的余地已很多了,所謂的軟件也已經(jīng)很多了。而程序則更多,程序都想變成軟件,誰都說自己的是“金子”。但只有經(jīng)受住用戶的檢驗(yàn),才能成為真正的“金子”。
這就是美國為什么在20世紀(jì)90年代幾乎沒有什么新的軟件公司產(chǎn)生的原因。只是原來80年代的大的軟件公司互相兼并,我吞你,你吃我。但是,寫程序的人很多,美國的程序變軟件的門檻可能比我們還高,所以很多人寫了程序就丟在網(wǎng)上,就形成了共享軟件。
2. 共享軟件
共享軟件是避開商業(yè)渠道的一種方法。它避開了商業(yè)的門檻,因?yàn)檫@個(gè)行業(yè)的門檻發(fā)展很高以后就輕易進(jìn)不去了。我寫個(gè)程序丟在網(wǎng)上,你下載就可以用,這時(shí)候程序又等于軟件。共享軟件是這樣產(chǎn)生的,是因?yàn)闆]有辦法中的辦法。如果說程序直接等于軟件的話,誰也不會(huì)輕易把程序丟到網(wǎng)上去。
開始做共享軟件的人并不認(rèn)為做它能賺錢,只是后來用的人多了,有人付錢給他了。共享軟件使得程序和軟件的距離縮短了,但是它與商業(yè)軟件的距離會(huì)進(jìn)一步拉大。商業(yè)軟件的功能和所要達(dá)到的目標(biāo)就不是一個(gè)人能“玩”得起來的了。這時(shí)的軟件也已不是幾個(gè)人、一個(gè)小組就能做出來的了。這就是在美國新的軟件公司沒法產(chǎn)生的原因。比如netscape網(wǎng)景是在1995~1996年產(chǎn)生的新軟件公司,但是,兩三年后它就不見了。
1.1.1 商業(yè)軟件門檻的形成
1. 商業(yè)軟件門檻的形成
商業(yè)軟件門檻的形成是整個(gè)行業(yè)發(fā)展的必然結(jié)果。任何一個(gè)行業(yè)初始階段時(shí)的門檻都非常低,但是,只要發(fā)展到一定的階段后,它的門檻就必然抬高。比如,現(xiàn)在國內(nèi)生產(chǎn)小汽車很困難,但在20世紀(jì)50年代~60年代的時(shí)候,你裝4個(gè)輪子,再加上柴油機(jī)等就形成汽車。那時(shí)的萊特兄弟裝個(gè)螺旋槳,加兩個(gè)機(jī)翼,就能做飛機(jī)。整個(gè)行業(yè)還沒有形成的時(shí)候,絕對(duì)可以這樣做,但是,到整個(gè)行業(yè)形成時(shí),你就做不了了。所有的行業(yè)都是這樣的。
為什么網(wǎng)站一出來時(shí)那么多人去擠著做?這也是因?yàn)橐婚_始的時(shí)候,看起來門檻非常低,人人都可以做。只要有一個(gè)服務(wù)器,架根網(wǎng)線,就能做網(wǎng)站。這個(gè)行業(yè)處于初始階段時(shí),情況就是這樣的。但這個(gè)行業(yè)形成后,你就輕易地“玩”不了了。
國內(nèi)的軟件發(fā)展也是如此。國內(nèi)的軟件自從軟件經(jīng)銷商形成以后,這個(gè)行業(yè)才真正地形成。有沒有一個(gè)渠道是判斷一個(gè)行業(yè)是否形成的很重要的環(huán)節(jié)。任何一個(gè)行業(yè)都會(huì)有一個(gè)經(jīng)銷渠道,如果渠道形成了,那么這個(gè)行業(yè)也就形成了。第一名的經(jīng)銷商是1994年~1995年成立的,也就是說,中國軟件行業(yè)大概也就是在1995年形成的,至今才經(jīng)歷8年時(shí)間的發(fā)展。
有一種浮躁的思想認(rèn)為,中國軟件產(chǎn)業(yè)應(yīng)該很快就能趕上美國。美國軟件行業(yè)是上世紀(jì)80年代形成的,到現(xiàn)在已經(jīng)發(fā)展了20多年了。中國軟件行業(yè)才8年,8年才是一個(gè)懵懂的小孩,20多歲是一個(gè)強(qiáng)壯的青年,那么他們的力量是不對(duì)等的。但也要看到,當(dāng)8歲變成15歲的時(shí)候,它真正的能量才會(huì)反映出來。
2. 軟件門檻對(duì)程序員的影響
現(xiàn)在中國軟件行業(yè)正在形成。所以,現(xiàn)在做一個(gè)程序員一定要有耐心,因?yàn)楝F(xiàn)在已經(jīng)不等于以前了。你一定要把所有的問題搞清楚,然后再去做程序。
對(duì)于程序員來說,最好的工作環(huán)境是在現(xiàn)有的或者初始要成立的公司里面,這是最容易成功的。個(gè)人單槍匹馬闖天下已經(jīng)很困難了。即使現(xiàn)在偶爾做兩個(gè)共享軟件放在網(wǎng)上能成名,但是也已經(jīng)比較困難了。因?yàn)楝F(xiàn)在做軟件的人已經(jīng)很多了。這也說明軟件已經(jīng)不等于程序了,程序也不等于軟件。
程序要變成軟件,這中間是一個(gè)商業(yè)化的過程。沒有門檻以前,它沒有這個(gè)商業(yè)過程,現(xiàn)在有這個(gè)行業(yè)了,它中間就有商業(yè)化的過程。這個(gè)商業(yè)的過程就不是一個(gè)人能“玩”的。
如果你開始做某一類軟件的時(shí)候,別人已經(jīng)做成了,這時(shí)你再?zèng)Q定花力氣去做,那么你就要花雙倍的力氣去趕上別人。
現(xiàn)在的商業(yè)軟件往往是由很多模塊組成的,模塊是整個(gè)系統(tǒng)的一部分。個(gè)人要完整地寫一個(gè)商業(yè)系統(tǒng)幾乎是不可能的。軟件進(jìn)入windows平臺(tái)后,它已經(jīng)很復(fù)雜了,不像在dos的時(shí)候,你寫兩行程序就能賣,做個(gè)zip也能賣。事實(shí)上,美國的商業(yè)編譯器也不是一個(gè)人能“玩”的。現(xiàn)在你可能覺得它是很簡單的,甚至linux還帶了一個(gè)gcc,且源程序還在。你可以把它改一改,做個(gè)vc試一試,看它會(huì)有人用嗎?它能變成軟件嗎?即使你再做個(gè)界面,它也還是一個(gè)gcc,絕對(duì)不會(huì)成為visual c++那樣能商業(yè)化的軟件。
可見,國外軟件行業(yè)的門檻要比中國的高很多了。我覺得我們中國即使再去做這樣的東西,也沒有多大的意義了。這個(gè)門檻你是追不過來的。不僅要花雙倍的力氣,而且在這么短的時(shí)間內(nèi),你還要完成別人已經(jīng)完成過的工作,包括別人所做的測(cè)試工作。只有這樣,才能做到你的軟件與別人有競(jìng)爭(zhēng)力,能與它做比較。
1.1.2 認(rèn)清自己的發(fā)展
如果連以上認(rèn)識(shí)都不清楚,很可能就以為去書店買一本mfc高手速成之類的書,編兩個(gè)程序就能成為軟件高手。就好像這些書是“黃金”,我學(xué)兩下,學(xué)會(huì)了vc、mfc,就能做一個(gè)軟件拿出去賣了。這種想法也不是不行,最后一定能行,但要有耐心,還要有機(jī)遇。機(jī)遇是從耐心中產(chǎn)生的,越有耐心,就越有機(jī)遇。你得非常努力,要花很多的精力,可能還要走很多的彎路。
如果你是從mfc入手的,或是從vb入手的,則如要做出一個(gè)真正的能應(yīng)用個(gè)人領(lǐng)域的通用軟件,就會(huì)走非常多的彎路。直接的捷徑絕對(duì)不是走這兩條路。這兩條路看起來很快,而且在很多公司里面確實(shí)需要這樣的東西,比如說我這家公司就是為另一個(gè)家公司做系統(tǒng)集成的,那我就需要這樣的東西,我不管你具體怎么實(shí)現(xiàn),我只需要達(dá)到這個(gè)目標(biāo)就行了。
任何軟件的實(shí)現(xiàn)都會(huì)有n種方法,即使你是用最差的那種方法實(shí)現(xiàn)的,也沒有問題,最后它還是能運(yùn)行。即使有問題,再改一改就是。但是,做通用軟件就不行了,通用是一對(duì)多,你做出來的軟件以后要面向全國,如果將來自由貿(mào)易通到香港也好,通到國外也好,整個(gè)產(chǎn)品能銷到全世界的話,這時(shí)候,通用軟件所有做的工作就不是這么簡單了。所以說,正確的入門方法就很關(guān)鍵。
如果你僅僅只是想混口飯吃,找個(gè)工作,可能教你成為mfc的高手之類的書對(duì)你就足夠了。但是,如果你想做一個(gè)很好的軟件,不僅能滿足你謀一碗飯吃,還能使你揚(yáng)名,最后你的軟件還能成為很多人用,甚至你還想把它作為一個(gè)事業(yè)去經(jīng)營,那么這第一步就非常關(guān)鍵。這時(shí)就絕對(duì)不能找一本mfc或找一本vb的書學(xué)兩下就行,而是要從最底層開始做起,從最基本做起。
1.2 高手是怎樣練成的
1.2.1 高手成長的六個(gè)階段
程序員怎樣才能達(dá)到編程的最高境界?最高境界絕對(duì)不是你去編兩行代碼,或者是幾分鐘能寫幾行代碼,或者是用什么所謂的可視化工具產(chǎn)生最少的代碼這些工作,這都不是真正的高手境界。即使是這樣的高手,那也都是無知者的自封。
我認(rèn)為,一個(gè)程序員的成長可分為如下六個(gè)階段。
? 第一階段
此階段主要是能熟練地使用某種語言。這就相當(dāng)于練武中的套路和架式這些表面的東西。
? 第二階段
此階段能精通基于某種平臺(tái)的接口(例如我們現(xiàn)在常用的win 32的api函數(shù))以及所對(duì)應(yīng)語言的自身的庫函數(shù)。到達(dá)這個(gè)階段后,也就相當(dāng)于可以進(jìn)行真實(shí)散打?qū)毩耍梢哉嬲卦趯?shí)踐中做些應(yīng)用。
? 第三階段
此階段能深入地了解某個(gè)平臺(tái)系統(tǒng)的底層,已經(jīng)具有了初級(jí)的內(nèi)功的能力,也就是“手中有劍,心中無劍”。
? 第四階級(jí)
此階段能直接在平臺(tái)上進(jìn)行比較深層次的開發(fā)。基本上,能達(dá)到這個(gè)層次就可以說是進(jìn)入了高層次。這時(shí)進(jìn)入了高級(jí)內(nèi)功的修煉。比如能進(jìn)行vxd或操作系統(tǒng)的內(nèi)核的修改。
這時(shí)已經(jīng)不再有語言的束縛,語言只是一種工具,即使要用自己不會(huì)的語言進(jìn)行開發(fā),也只是簡單地熟悉一下,就手到擒來,完全不像是第一階段的時(shí)候?qū)W習(xí)語言的那種情況。一般來說,從第三階段過渡到第四階段是比較困難的。為什么會(huì)難呢?這就是因?yàn)楹芏嗳说乃枷胱儾贿^來。
? 第五階級(jí)
此階段就已經(jīng)不再局限于簡單的技術(shù)上的問題了,而是能從全局上把握和設(shè)計(jì)一個(gè)比較大的系統(tǒng)體系結(jié)構(gòu),從內(nèi)核到外層界面。可以說是“手中無劍,心中有劍”。到了這個(gè)階段以后,能對(duì)市面上的任何軟件進(jìn)行剖析,并能按自己的要求進(jìn)行設(shè)計(jì),就算是ms word這樣的大型軟件,只要有充足的時(shí)間,也一定會(huì)設(shè)計(jì)出來。
? 第六階級(jí)
此階段也是最高的境界,達(dá)到“無招勝有招”。這時(shí)候,任何問題就純粹變成了一個(gè)思路的問題,不是用什么代碼就能表示的。也就是“手中無劍,心中也無劍”。
此時(shí),對(duì)于練功的人來說,他已不用再去學(xué)什么少林拳,只是在旁看一下少林拳的對(duì)戰(zhàn),就能把此拳拿來就用。這就是真正的大師級(jí)的人物。這時(shí),win 32或linux在你眼里是沒有什么差別的。
每一個(gè)階段再向上發(fā)展時(shí)都要按一定的方法。第一、第二個(gè)階段通過自學(xué)就可以完成,只要多用心去研究,耐心地去學(xué)習(xí)。
要想從第二個(gè)階段過渡到第三個(gè)階段,就要有一個(gè)好的學(xué)習(xí)環(huán)境。例如有一個(gè)高手帶領(lǐng)或公司里有一個(gè)好的練手環(huán)境。經(jīng)過二、三年的積累就能達(dá)到第三個(gè)階段。但是,有些人到達(dá)第三個(gè)階段后,常常就很難有境界上的突破了。他們這時(shí)會(huì)產(chǎn)生一種觀念,認(rèn)為軟件無非如此,認(rèn)為自己已無所不能。其實(shí),這時(shí)如果遇到大的或難些的軟件,他們往往還是無從下手。
現(xiàn)在我們國家大部分程序員都是在第二、三級(jí)之間。他們大多都是通過自學(xué)成才的,不過這樣的程序員一般在軟件公司也能獨(dú)當(dāng)一面,完成一些軟件的模塊。
但是,也還有一大堆處在第一階段的程序員,他們一般就能玩玩vb,做程序時(shí),去找一堆控件集成一個(gè)軟件。
現(xiàn)在一種流行的說法是,中國軟件人才現(xiàn)在是一個(gè)橄欖型的人才結(jié)構(gòu),有大量的中等水平的程序員,而初級(jí)和高級(jí)程序員比較少。而我認(rèn)為,現(xiàn)在中國絕大多數(shù)都是初級(jí)的程序員,中級(jí)程序員很少,高級(jí)的就更少了。所以,現(xiàn)在的人才結(jié)構(gòu)是“方塔”形,這是一種斷層的不良結(jié)構(gòu)。而真正成熟的軟件人才結(jié)構(gòu)應(yīng)該是平滑的三角形結(jié)構(gòu)。這樣,初級(jí)、中級(jí)、高級(jí)程序員才能充分地各施所長。三種人才結(jié)構(gòu)對(duì)比如圖1.1所示。
圖1.1 三種人才結(jié)構(gòu)對(duì)比
1.2.2 初級(jí)程序員和高級(jí)程序員的區(qū)別
一般對(duì)于一個(gè)問題,初級(jí)程序員和高級(jí)程序員考慮這個(gè)問題的方法絕對(duì)是不同的。比如,在初級(jí)程序員階段時(shí),他會(huì)覺得vb也能做出應(yīng)用來,且看起來也不錯(cuò)。
但到了中級(jí)程序員時(shí),他可能就不會(huì)選擇vb了,可能會(huì)用mfc,這時(shí),也能做出效果不錯(cuò)的程序。
到高級(jí)程序員時(shí),他絕對(duì)不是首先選擇以上工具,vb也好,vc也好,這些都不是他考慮的問題。這時(shí)考慮的絕對(duì)是什么才是具有最快效率、最穩(wěn)定性能的解決問題的方法。
軟件和別的產(chǎn)品不同。比如,在軟件中要達(dá)到某個(gè)目標(biāo),有n種方法,但是在n種方法中,只有一種方法或兩種方法是最好的,其他的都很次。所以,要做一個(gè)好的系統(tǒng),是很需要耐心的。如果沒有耐心,就不會(huì)有細(xì)活,有細(xì)活的東西才是好東西。我覺得做軟件是這樣,做任何事情也是這樣的,一定要投入。
程序員到達(dá)最高境界的時(shí)候,想的就是“我就是程序,程序就是我”。這時(shí)候我要做一個(gè)軟件,不會(huì)有自己主觀的思路,而是以機(jī)器的思路來考慮問題,也就是說,就是以程序的思考方式來思考程序,而不是以我去設(shè)計(jì)程序的方式去思考程序。這一點(diǎn)如果不到比較高的層次是不能明白的。
你設(shè)計(jì)程序不就是你思考問題,然后按自己的思路去做程序嗎?
其實(shí)不是的。在我設(shè)計(jì)這個(gè)程序的時(shí)候,相當(dāng)于我“鉆”入這個(gè)程序里面去了。這時(shí)候沒有我自己的任何思維,我的所有思維都是這個(gè)程序,它這步該怎么走,下步該怎么走,它可能會(huì)出現(xiàn)什么情況。我動(dòng)這個(gè)部分的時(shí)候,別的部分是否要干擾,也許會(huì)動(dòng)一發(fā)而牽全身,它們之間是怎么相互影響的?
也只有到達(dá)這個(gè)境界,你的程序才能真正地寫好,絕對(duì)不是做個(gè)什么可視化。可視化本身就是“我去設(shè)計(jì)這個(gè)程序”,而真正的程序高手是“我就是程序”,這兩種方法絕對(duì)是不同的。比如,我要用vb去設(shè)計(jì)一個(gè)程序,和我本身就是一個(gè)程序的思維方式,是不一樣的。別人也許覺得操作系統(tǒng)很深?yuàn)W,很復(fù)雜,其實(shí),如果你到達(dá)高手狀態(tài),你就是操作系統(tǒng),你就能做任何程序。
對(duì)待軟件要有一個(gè)全面的分析方法,光說理論是沒有用的。如果你沒有經(jīng)過第一、第二、第三、第四這四個(gè)階段,則永遠(yuǎn)到達(dá)不了高境界。因?yàn)榭罩袠情w的理論沒有用,而這些必須是一步一步地去做出來。
一個(gè)高級(jí)程序員應(yīng)該具備開放性思維,從里到外的所有的知識(shí)都能了解。然后,看到世界最新技術(shù)就能馬上掌握,馬上了解。實(shí)際上,技術(shù)到達(dá)最高的境界后,是沒有分別的。任何東西都是相通的,只要你到達(dá)這個(gè)境界以后,什么問題一看就能明白,一看就能抓住最核心的問題,最根本的根本,而不會(huì)被其他的枝葉或表象所迷惑,做到這一步后才算比較成功。
從程序員本身來說,如果它到達(dá)這一步以后,他就已經(jīng)形成了開闊的思維。他有這種開放性思維的話,他就能做戰(zhàn)略決策,這對(duì)他將來做任何事情都有好處。事實(shí)上,會(huì)做程序后,就會(huì)有一種分析問題的方法,學(xué)會(huì)怎么樣把問題的表象剖開,看到它的本質(zhì)。這時(shí)你碰到任何具體的問題,只要給點(diǎn)時(shí)間,都能輕而易舉地解決。實(shí)際上,對(duì)開發(fā)計(jì)算機(jī)軟件來說,沒有什么做不了的軟件,所有的軟件都能做,只是看你有沒有時(shí)間,有沒有耐心,有沒有資金做支撐。
這幾年,尤其是這兩三年,估計(jì)到2005年前,中國軟件這個(gè)行業(yè)里面大的軟件公司就能形成。現(xiàn)在就已經(jīng)在形成,例如用友,它上市后,地位就更加穩(wěn)固了。其他大的軟件企業(yè)會(huì)在這幾年內(nèi)迅速長大。這時(shí)候,包括流通渠道、經(jīng)銷商的渠道也會(huì)迅速長大。也就是說,到2005年以后,中國軟件這個(gè)行業(yè)的門檻比現(xiàn)在還要高很多,與美國不會(huì)有太大的差別。此時(shí),中國軟件才真正體現(xiàn)出它的威力來。如果你是這些威力中的一員,就已經(jīng)很厲害了。
別人可能知道比爾?蓋茨是個(gè)談判的高手,是賣東西的高手,其實(shí),比爾?蓋茨從根本上來說是個(gè)程序高手,這是他根本中的根本。他對(duì)所有的技術(shù)都非常敏感,一眼就看到本質(zhì),而且他本身也能做程序,時(shí)常在看程序。現(xiàn)在他不做董事長,而做首席設(shè)計(jì)師,這時(shí)他就更加接近程序的本質(zhì)。因?yàn)樗旧砭陀泻荛_闊的思維,又深入到技術(shù)的本身,所以他就知道技術(shù)的方向。這對(duì)于一個(gè)公司,對(duì)他這樣的人來說,是非常重要的。
如果他判斷錯(cuò)誤一步,那公司以后再回頭就很難了。計(jì)算機(jī)的競(jìng)爭(zhēng)是非常激烈的,不能走錯(cuò)半步。很多公司以前看上去很火,后來就
銷聲匿跡了,就是因?yàn)樗咤e(cuò)一步,然后就不行了。為什么它會(huì)走錯(cuò)?因?yàn)樗涣私饧夹g(shù)的本質(zhì)在哪里,技術(shù)的發(fā)展方向在哪里。
比爾?蓋茨因?yàn)楦改甘菍W(xué)法律的,所以他本身就很能“侃”,很有說服力,而他又是做技術(shù)的,就非常清楚技術(shù)的方向在哪里,所以他才能把方向把握得很準(zhǔn)確,公司越來越大。而別的公司只火一陣子,他卻火了還會(huì)再火。就算微軟再龐大,你如果不把握好軟件技術(shù)的最前沿,一樣也會(huì)玩完。就像intel時(shí)刻把握著cpu的最新技術(shù),才能保證自己是行業(yè)老大。技術(shù)決定它的將來。
所以,程序員要能達(dá)到這樣的目標(biāo),就要有非常強(qiáng)的耐心和非常好的機(jī)遇才有可能。事實(shí)上,現(xiàn)在的機(jī)會(huì)挺好的,2005年以前機(jī)會(huì)都非常大,以后機(jī)會(huì)會(huì)比較小。但是,如果有耐心的話,你還是會(huì)有機(jī)會(huì)的,機(jī)會(huì)都是出在耐心里。我記得有句話說“雄心的一半是耐心”,我認(rèn)為雄心的三分之二都是耐心。如果你越有野心,你就越要有耐心,你的野心才有可能實(shí)現(xiàn)。如果你有野心而沒有耐心,那都是胡思亂想,別人一眼就能看穿。最后在競(jìng)爭(zhēng)中,對(duì)手一眼就看到你的意圖,那你還有什么可競(jìng)爭(zhēng)的?
1.2.3 程序員是吃青春飯的嗎
很多人都認(rèn)為程序員是三十歲以前的職業(yè),到了三十歲以后,就不應(yīng)再做程序員了。現(xiàn)在的很多程序員也有這種想法,我覺得這種想法很不對(duì)。
在20世紀(jì)80年代末到90年代初,那時(shí)軟件還沒有形成行業(yè),程序員不能以此作為謀生的手段時(shí),你必須轉(zhuǎn)行,因?yàn)槟隳贻p的時(shí)候不用考慮吃飯的問題,天天“玩”都可以,但是以后就不可能了。
據(jù)我了解,微軟里面的那些高手,幾乎都是四五十歲的,而且都是做底層的。他們是上世紀(jì)70年代就開始“玩”程序的,所以對(duì)于整個(gè)計(jì)算機(jī),他們是太清楚了。現(xiàn)在有些人主觀臆斷地希望微軟第二天倒閉就好了,但那可能性太小了。因?yàn)槟切┏绦騿T是從cpu是4004的時(shí)候開始,玩到現(xiàn)在奔騰iv,沒有哪一代東西他們沒有經(jīng)歷過。
你知道他們現(xiàn)在正在玩什么嗎?現(xiàn)在正在玩64位的cpu。你說你普通的程序員,有這個(gè)耐心嗎?沒有這個(gè)耐心,你絕對(duì)做不了,你也絕對(duì)做不了高手。他為什么能做?因?yàn)樗粌H是玩過來的,而且他還非常有耐心,每一步技術(shù)他都跟得上,所以對(duì)他來說,沒有任何的難度和壓力。
因?yàn)橛?jì)算機(jī)技術(shù)沒有任何時(shí)候是突變的。它的今年和去年相差不會(huì)很大,但是回過頭來看三年以前的情況,和現(xiàn)在的距離就很大。所以說,如果你每年都跟著技術(shù)進(jìn)步的話,你的壓力就很小,因?yàn)槟銜r(shí)刻都能掌握最新的技術(shù)。但是,如果你落下來,別說十年,就是三年,你就趕不上了。
如果你一旦趕不上,就會(huì)覺得非常吃力;如果你趕不上,你就會(huì)迷失方向;如果你迷失了方向,你就覺得計(jì)算機(jī)沒有味道,越做越?jīng)]勁。當(dāng)你還只是有個(gè)思路的時(shí)候,別人的產(chǎn)品都做出來了,因?yàn)槟愕乃礁鷦e人相差太遠(yuǎn),人家早就想到的問題,你現(xiàn)在才開始認(rèn)識(shí)。水平越高,他就看得越遠(yuǎn),那么他的思維就越開闊;水平越低,想的問題就越窄。
64位cpu是這個(gè)十年和下個(gè)十年最重要的技術(shù)之一,誰抓住這個(gè)機(jī)會(huì),誰就能抓住未來賺錢的商機(jī)。cpu是英特爾設(shè)計(jì)的,對(duì)這一點(diǎn)他肯定清楚。舉例來說,如果從64位的角度來看現(xiàn)在的32位,就像從現(xiàn)在的角度去看dos。你說dos很復(fù)雜嗎?當(dāng)你在dos年代的時(shí)候,你會(huì)覺得dos很復(fù)雜。你說現(xiàn)在的windows不夠復(fù)雜嗎?windows太復(fù)雜了,但是你到了64位的時(shí)候再去看windows,就如同現(xiàn)在看dos一樣。
整個(gè)64位系統(tǒng)的平臺(tái)和思維方式、思路都比現(xiàn)在更開闊,打個(gè)比方說,現(xiàn)在的windows里面能開n個(gè)dos窗口,每個(gè)dos窗都能運(yùn)行一個(gè)程序。到達(dá)64位的時(shí)候,操作系統(tǒng)事實(shí)上能做到開n個(gè)x86,開n個(gè)windows 98,然后再開n個(gè)windows 95都沒有問題,系統(tǒng)能做到這一步,甚至你的系統(tǒng)內(nèi)開n個(gè)windows nt都沒有關(guān)系。這就是64位和32位的差別。所以,微軟的那些“老頭”,四、五十歲的那幾個(gè)做核心的人,現(xiàn)在正在玩這些東西。你說微軟的技術(shù)它能不先進(jìn)嗎?是linux那幾個(gè)玩家能搞定的嗎?
微軟的技術(shù)非常雄厚,世界計(jì)算機(jī)的最新技術(shù)絕對(duì)集中在這幾個(gè)人手里。而且這幾個(gè)人的思維模式非常開闊,誰都沒有意識(shí)到的東西他早就開始做了。現(xiàn)在64位的cpu都出來一二年了,你說有什么人去做這些應(yīng)用嗎?沒有,有的就是那幾個(gè)unix廠商做好后給自己用的。
所以,追求技術(shù)的最高境界的時(shí)候,實(shí)際上是沒有年齡限制的。對(duì)我來說,現(xiàn)在都三十三了,我從來沒有想過退出這行,我覺得我就能玩下去,一直玩到退休都沒有問題。我要時(shí)刻保持技術(shù)的最前端,這樣的話對(duì)我來說是不困難的,沒有任何累的感覺。
很多人說做程序不是人干的事情,是非人的待遇。這樣,他們一旦成立一個(gè)公司,做出一點(diǎn)成績,在輝煌的時(shí)候馬上就考慮退出。因?yàn)樗麄兲嗔耍刻焱砩习疽梗刻焱砩蠠藘砂鼰熯€不夠,屋子里面簡直就缺氧了,好像還沒有解決問題。
白天睡覺,晚上干活,那當(dāng)然累死了,這是自己折騰自己。所以,做程序員一定要有一種正常的心態(tài),就是說,你做程序的時(shí)候,不要把自己的生活搞得顛三倒四的。如果非得搞得晚上燒好多煙才行,這樣你肯定折騰不到三十歲,三十歲以后身體就差了。
事實(shí)上,
好的開始是成功的一半,本文首先會(huì)試圖告訴你什么是程序員?為什么要做這樣的程序?正確的入門方法是什么?
程序員只有在理解了以上內(nèi)容的基礎(chǔ)上,才能進(jìn)一步更快地提高自身技能,這時(shí)候再開始程序的設(shè)計(jì)。其實(shí),對(duì)一個(gè)軟件的開發(fā)者來說,真正重要的不在于這行代碼怎么寫,那些代碼應(yīng)該怎么寫,關(guān)鍵是思路的問題,而思路事實(shí)上是經(jīng)驗(yàn)的積累。經(jīng)驗(yàn)是使你從最初的封閉的思維方式,到最后形成開放式的思維的一個(gè)過程。將我十幾年程序生涯中獲得的一些經(jīng)驗(yàn)告訴讀者,使大家少走彎路也是我想寫這本書的主要目的。
1.1 程序≠軟件
現(xiàn)在很多人以為程序就是軟件,軟件就是程序。事實(shí)上,軟件和程序在20世紀(jì)80年代時(shí),還可以說是等同的,或者說,在非pc領(lǐng)域里它們可能還會(huì)是等同的,比如說某個(gè)嵌入式軟件領(lǐng)域,軟件和程序可能是等同的。但是,在pc這個(gè)領(lǐng)域內(nèi),現(xiàn)在的程序已不等于軟件了。這是什么意思呢?
1. 軟件發(fā)展簡述
在20世紀(jì)80年代的時(shí)候,pc剛誕生,這時(shí)國內(nèi)還沒有幾個(gè)人會(huì)寫程序。那么,如果你寫個(gè)程序,別人就可以拿來用。這時(shí)候的程序就能產(chǎn)生價(jià)值,這個(gè)程序就直接等同于軟件。
但軟件行業(yè)發(fā)展到現(xiàn)在,這里以中國的情況為例(美國在20世紀(jì)80年代,程序已經(jīng)不等同于軟件了),程序也不等同于軟件了。因?yàn)楝F(xiàn)在會(huì)寫程序很容易,但是你的這個(gè)程序很難產(chǎn)生什么樣的商業(yè)意義,也不能產(chǎn)生什么價(jià)值,這就很難直接變成軟件。要使一個(gè)程序直接變成軟件,中間就面臨著很高的門檻問題。這個(gè)門檻問題來自于整個(gè)行業(yè)的形成。
現(xiàn)在,你寫了一個(gè)程序以后,要面臨商業(yè)化的過程。你要宣傳,你要讓用戶知道,你要建立經(jīng)銷渠道,可能你還要花很多的時(shí)間去說服別人用你的東西。這是程序到軟件的一個(gè)過程。這門檻已比較高了。
我們?cè)诤蛧鴥?nèi)的大經(jīng)銷商的銷售渠道的人聊天時(shí),他們的老板說,這幾年做軟件的門檻挺高的,如果你沒有五、六百萬做軟件,那是“玩”不起來的。我說:“你們就使門檻很高了。”他說:“那肯定是的。如果你寫個(gè)“爛”程序,明天你倒閉了,你的東西還占了我的庫房,我還不知道找誰退去呢。我的庫房是要錢的呀!現(xiàn)在的軟件又是那么多!”
所以,如果你沒有一定的資產(chǎn)的話,經(jīng)銷商都不理你。實(shí)際情況也是這樣的,如果你的公司比較小,且沒什么名氣,你的產(chǎn)品放到經(jīng)銷商庫房,那么他最多給你暫收,產(chǎn)品銷不動(dòng)的話,一般兩周絕對(duì)會(huì)退貨。因?yàn)楝F(xiàn)在經(jīng)銷商可選擇的余地已很多了,所謂的軟件也已經(jīng)很多了。而程序則更多,程序都想變成軟件,誰都說自己的是“金子”。但只有經(jīng)受住用戶的檢驗(yàn),才能成為真正的“金子”。
這就是美國為什么在20世紀(jì)90年代幾乎沒有什么新的軟件公司產(chǎn)生的原因。只是原來80年代的大的軟件公司互相兼并,我吞你,你吃我。但是,寫程序的人很多,美國的程序變軟件的門檻可能比我們還高,所以很多人寫了程序就丟在網(wǎng)上,就形成了共享軟件。
2. 共享軟件
共享軟件是避開商業(yè)渠道的一種方法。它避開了商業(yè)的門檻,因?yàn)檫@個(gè)行業(yè)的門檻發(fā)展很高以后就輕易進(jìn)不去了。我寫個(gè)程序丟在網(wǎng)上,你下載就可以用,這時(shí)候程序又等于軟件。共享軟件是這樣產(chǎn)生的,是因?yàn)闆]有辦法中的辦法。如果說程序直接等于軟件的話,誰也不會(huì)輕易把程序丟到網(wǎng)上去。
開始做共享軟件的人并不認(rèn)為做它能賺錢,只是后來用的人多了,有人付錢給他了。共享軟件使得程序和軟件的距離縮短了,但是它與商業(yè)軟件的距離會(huì)進(jìn)一步拉大。商業(yè)軟件的功能和所要達(dá)到的目標(biāo)就不是一個(gè)人能“玩”得起來的了。這時(shí)的軟件也已不是幾個(gè)人、一個(gè)小組就能做出來的了。這就是在美國新的軟件公司沒法產(chǎn)生的原因。比如netscape網(wǎng)景是在1995~1996年產(chǎn)生的新軟件公司,但是,兩三年后它就不見了。
1.1.1 商業(yè)軟件門檻的形成
1. 商業(yè)軟件門檻的形成
商業(yè)軟件門檻的形成是整個(gè)行業(yè)發(fā)展的必然結(jié)果。任何一個(gè)行業(yè)初始階段時(shí)的門檻都非常低,但是,只要發(fā)展到一定的階段后,它的門檻就必然抬高。比如,現(xiàn)在國內(nèi)生產(chǎn)小汽車很困難,但在20世紀(jì)50年代~60年代的時(shí)候,你裝4個(gè)輪子,再加上柴油機(jī)等就形成汽車。那時(shí)的萊特兄弟裝個(gè)螺旋槳,加兩個(gè)機(jī)翼,就能做飛機(jī)。整個(gè)行業(yè)還沒有形成的時(shí)候,絕對(duì)可以這樣做,但是,到整個(gè)行業(yè)形成時(shí),你就做不了了。所有的行業(yè)都是這樣的。
為什么網(wǎng)站一出來時(shí)那么多人去擠著做?這也是因?yàn)橐婚_始的時(shí)候,看起來門檻非常低,人人都可以做。只要有一個(gè)服務(wù)器,架根網(wǎng)線,就能做網(wǎng)站。這個(gè)行業(yè)處于初始階段時(shí),情況就是這樣的。但這個(gè)行業(yè)形成后,你就輕易地“玩”不了了。
國內(nèi)的軟件發(fā)展也是如此。國內(nèi)的軟件自從軟件經(jīng)銷商形成以后,這個(gè)行業(yè)才真正地形成。有沒有一個(gè)渠道是判斷一個(gè)行業(yè)是否形成的很重要的環(huán)節(jié)。任何一個(gè)行業(yè)都會(huì)有一個(gè)經(jīng)銷渠道,如果渠道形成了,那么這個(gè)行業(yè)也就形成了。第一名的經(jīng)銷商是1994年~1995年成立的,也就是說,中國軟件行業(yè)大概也就是在1995年形成的,至今才經(jīng)歷8年時(shí)間的發(fā)展。
有一種浮躁的思想認(rèn)為,中國軟件產(chǎn)業(yè)應(yīng)該很快就能趕上美國。美國軟件行業(yè)是上世紀(jì)80年代形成的,到現(xiàn)在已經(jīng)發(fā)展了20多年了。中國軟件行業(yè)才8年,8年才是一個(gè)懵懂的小孩,20多歲是一個(gè)強(qiáng)壯的青年,那么他們的力量是不對(duì)等的。但也要看到,當(dāng)8歲變成15歲的時(shí)候,它真正的能量才會(huì)反映出來。
2. 軟件門檻對(duì)程序員的影響
現(xiàn)在中國軟件行業(yè)正在形成。所以,現(xiàn)在做一個(gè)程序員一定要有耐心,因?yàn)楝F(xiàn)在已經(jīng)不等于以前了。你一定要把所有的問題搞清楚,然后再去做程序。
對(duì)于程序員來說,最好的工作環(huán)境是在現(xiàn)有的或者初始要成立的公司里面,這是最容易成功的。個(gè)人單槍匹馬闖天下已經(jīng)很困難了。即使現(xiàn)在偶爾做兩個(gè)共享軟件放在網(wǎng)上能成名,但是也已經(jīng)比較困難了。因?yàn)楝F(xiàn)在做軟件的人已經(jīng)很多了。這也說明軟件已經(jīng)不等于程序了,程序也不等于軟件。
程序要變成軟件,這中間是一個(gè)商業(yè)化的過程。沒有門檻以前,它沒有這個(gè)商業(yè)過程,現(xiàn)在有這個(gè)行業(yè)了,它中間就有商業(yè)化的過程。這個(gè)商業(yè)的過程就不是一個(gè)人能“玩”的。
如果你開始做某一類軟件的時(shí)候,別人已經(jīng)做成了,這時(shí)你再?zèng)Q定花力氣去做,那么你就要花雙倍的力氣去趕上別人。
現(xiàn)在的商業(yè)軟件往往是由很多模塊組成的,模塊是整個(gè)系統(tǒng)的一部分。個(gè)人要完整地寫一個(gè)商業(yè)系統(tǒng)幾乎是不可能的。軟件進(jìn)入windows平臺(tái)后,它已經(jīng)很復(fù)雜了,不像在dos的時(shí)候,你寫兩行程序就能賣,做個(gè)zip也能賣。事實(shí)上,美國的商業(yè)編譯器也不是一個(gè)人能“玩”的。現(xiàn)在你可能覺得它是很簡單的,甚至linux還帶了一個(gè)gcc,且源程序還在。你可以把它改一改,做個(gè)vc試一試,看它會(huì)有人用嗎?它能變成軟件嗎?即使你再做個(gè)界面,它也還是一個(gè)gcc,絕對(duì)不會(huì)成為visual c++那樣能商業(yè)化的軟件。
可見,國外軟件行業(yè)的門檻要比中國的高很多了。我覺得我們中國即使再去做這樣的東西,也沒有多大的意義了。這個(gè)門檻你是追不過來的。不僅要花雙倍的力氣,而且在這么短的時(shí)間內(nèi),你還要完成別人已經(jīng)完成過的工作,包括別人所做的測(cè)試工作。只有這樣,才能做到你的軟件與別人有競(jìng)爭(zhēng)力,能與它做比較。
1.1.2 認(rèn)清自己的發(fā)展
如果連以上認(rèn)識(shí)都不清楚,很可能就以為去書店買一本mfc高手速成之類的書,編兩個(gè)程序就能成為軟件高手。就好像這些書是“黃金”,我學(xué)兩下,學(xué)會(huì)了vc、mfc,就能做一個(gè)軟件拿出去賣了。這種想法也不是不行,最后一定能行,但要有耐心,還要有機(jī)遇。機(jī)遇是從耐心中產(chǎn)生的,越有耐心,就越有機(jī)遇。你得非常努力,要花很多的精力,可能還要走很多的彎路。
如果你是從mfc入手的,或是從vb入手的,則如要做出一個(gè)真正的能應(yīng)用個(gè)人領(lǐng)域的通用軟件,就會(huì)走非常多的彎路。直接的捷徑絕對(duì)不是走這兩條路。這兩條路看起來很快,而且在很多公司里面確實(shí)需要這樣的東西,比如說我這家公司就是為另一個(gè)家公司做系統(tǒng)集成的,那我就需要這樣的東西,我不管你具體怎么實(shí)現(xiàn),我只需要達(dá)到這個(gè)目標(biāo)就行了。
任何軟件的實(shí)現(xiàn)都會(huì)有n種方法,即使你是用最差的那種方法實(shí)現(xiàn)的,也沒有問題,最后它還是能運(yùn)行。即使有問題,再改一改就是。但是,做通用軟件就不行了,通用是一對(duì)多,你做出來的軟件以后要面向全國,如果將來自由貿(mào)易通到香港也好,通到國外也好,整個(gè)產(chǎn)品能銷到全世界的話,這時(shí)候,通用軟件所有做的工作就不是這么簡單了。所以說,正確的入門方法就很關(guān)鍵。
如果你僅僅只是想混口飯吃,找個(gè)工作,可能教你成為mfc的高手之類的書對(duì)你就足夠了。但是,如果你想做一個(gè)很好的軟件,不僅能滿足你謀一碗飯吃,還能使你揚(yáng)名,最后你的軟件還能成為很多人用,甚至你還想把它作為一個(gè)事業(yè)去經(jīng)營,那么這第一步就非常關(guān)鍵。這時(shí)就絕對(duì)不能找一本mfc或找一本vb的書學(xué)兩下就行,而是要從最底層開始做起,從最基本做起。
1.2 高手是怎樣練成的
1.2.1 高手成長的六個(gè)階段
程序員怎樣才能達(dá)到編程的最高境界?最高境界絕對(duì)不是你去編兩行代碼,或者是幾分鐘能寫幾行代碼,或者是用什么所謂的可視化工具產(chǎn)生最少的代碼這些工作,這都不是真正的高手境界。即使是這樣的高手,那也都是無知者的自封。
我認(rèn)為,一個(gè)程序員的成長可分為如下六個(gè)階段。
? 第一階段
此階段主要是能熟練地使用某種語言。這就相當(dāng)于練武中的套路和架式這些表面的東西。
? 第二階段
此階段能精通基于某種平臺(tái)的接口(例如我們現(xiàn)在常用的win 32的api函數(shù))以及所對(duì)應(yīng)語言的自身的庫函數(shù)。到達(dá)這個(gè)階段后,也就相當(dāng)于可以進(jìn)行真實(shí)散打?qū)毩耍梢哉嬲卦趯?shí)踐中做些應(yīng)用。
? 第三階段
此階段能深入地了解某個(gè)平臺(tái)系統(tǒng)的底層,已經(jīng)具有了初級(jí)的內(nèi)功的能力,也就是“手中有劍,心中無劍”。
? 第四階級(jí)
此階段能直接在平臺(tái)上進(jìn)行比較深層次的開發(fā)。基本上,能達(dá)到這個(gè)層次就可以說是進(jìn)入了高層次。這時(shí)進(jìn)入了高級(jí)內(nèi)功的修煉。比如能進(jìn)行vxd或操作系統(tǒng)的內(nèi)核的修改。
這時(shí)已經(jīng)不再有語言的束縛,語言只是一種工具,即使要用自己不會(huì)的語言進(jìn)行開發(fā),也只是簡單地熟悉一下,就手到擒來,完全不像是第一階段的時(shí)候?qū)W習(xí)語言的那種情況。一般來說,從第三階段過渡到第四階段是比較困難的。為什么會(huì)難呢?這就是因?yàn)楹芏嗳说乃枷胱儾贿^來。
? 第五階級(jí)
此階段就已經(jīng)不再局限于簡單的技術(shù)上的問題了,而是能從全局上把握和設(shè)計(jì)一個(gè)比較大的系統(tǒng)體系結(jié)構(gòu),從內(nèi)核到外層界面。可以說是“手中無劍,心中有劍”。到了這個(gè)階段以后,能對(duì)市面上的任何軟件進(jìn)行剖析,并能按自己的要求進(jìn)行設(shè)計(jì),就算是ms word這樣的大型軟件,只要有充足的時(shí)間,也一定會(huì)設(shè)計(jì)出來。
? 第六階級(jí)
此階段也是最高的境界,達(dá)到“無招勝有招”。這時(shí)候,任何問題就純粹變成了一個(gè)思路的問題,不是用什么代碼就能表示的。也就是“手中無劍,心中也無劍”。
此時(shí),對(duì)于練功的人來說,他已不用再去學(xué)什么少林拳,只是在旁看一下少林拳的對(duì)戰(zhàn),就能把此拳拿來就用。這就是真正的大師級(jí)的人物。這時(shí),win 32或linux在你眼里是沒有什么差別的。
每一個(gè)階段再向上發(fā)展時(shí)都要按一定的方法。第一、第二個(gè)階段通過自學(xué)就可以完成,只要多用心去研究,耐心地去學(xué)習(xí)。
要想從第二個(gè)階段過渡到第三個(gè)階段,就要有一個(gè)好的學(xué)習(xí)環(huán)境。例如有一個(gè)高手帶領(lǐng)或公司里有一個(gè)好的練手環(huán)境。經(jīng)過二、三年的積累就能達(dá)到第三個(gè)階段。但是,有些人到達(dá)第三個(gè)階段后,常常就很難有境界上的突破了。他們這時(shí)會(huì)產(chǎn)生一種觀念,認(rèn)為軟件無非如此,認(rèn)為自己已無所不能。其實(shí),這時(shí)如果遇到大的或難些的軟件,他們往往還是無從下手。
現(xiàn)在我們國家大部分程序員都是在第二、三級(jí)之間。他們大多都是通過自學(xué)成才的,不過這樣的程序員一般在軟件公司也能獨(dú)當(dāng)一面,完成一些軟件的模塊。
但是,也還有一大堆處在第一階段的程序員,他們一般就能玩玩vb,做程序時(shí),去找一堆控件集成一個(gè)軟件。
現(xiàn)在一種流行的說法是,中國軟件人才現(xiàn)在是一個(gè)橄欖型的人才結(jié)構(gòu),有大量的中等水平的程序員,而初級(jí)和高級(jí)程序員比較少。而我認(rèn)為,現(xiàn)在中國絕大多數(shù)都是初級(jí)的程序員,中級(jí)程序員很少,高級(jí)的就更少了。所以,現(xiàn)在的人才結(jié)構(gòu)是“方塔”形,這是一種斷層的不良結(jié)構(gòu)。而真正成熟的軟件人才結(jié)構(gòu)應(yīng)該是平滑的三角形結(jié)構(gòu)。這樣,初級(jí)、中級(jí)、高級(jí)程序員才能充分地各施所長。三種人才結(jié)構(gòu)對(duì)比如圖1.1所示。
圖1.1 三種人才結(jié)構(gòu)對(duì)比
1.2.2 初級(jí)程序員和高級(jí)程序員的區(qū)別
一般對(duì)于一個(gè)問題,初級(jí)程序員和高級(jí)程序員考慮這個(gè)問題的方法絕對(duì)是不同的。比如,在初級(jí)程序員階段時(shí),他會(huì)覺得vb也能做出應(yīng)用來,且看起來也不錯(cuò)。
但到了中級(jí)程序員時(shí),他可能就不會(huì)選擇vb了,可能會(huì)用mfc,這時(shí),也能做出效果不錯(cuò)的程序。
到高級(jí)程序員時(shí),他絕對(duì)不是首先選擇以上工具,vb也好,vc也好,這些都不是他考慮的問題。這時(shí)考慮的絕對(duì)是什么才是具有最快效率、最穩(wěn)定性能的解決問題的方法。
軟件和別的產(chǎn)品不同。比如,在軟件中要達(dá)到某個(gè)目標(biāo),有n種方法,但是在n種方法中,只有一種方法或兩種方法是最好的,其他的都很次。所以,要做一個(gè)好的系統(tǒng),是很需要耐心的。如果沒有耐心,就不會(huì)有細(xì)活,有細(xì)活的東西才是好東西。我覺得做軟件是這樣,做任何事情也是這樣的,一定要投入。
程序員到達(dá)最高境界的時(shí)候,想的就是“我就是程序,程序就是我”。這時(shí)候我要做一個(gè)軟件,不會(huì)有自己主觀的思路,而是以機(jī)器的思路來考慮問題,也就是說,就是以程序的思考方式來思考程序,而不是以我去設(shè)計(jì)程序的方式去思考程序。這一點(diǎn)如果不到比較高的層次是不能明白的。
你設(shè)計(jì)程序不就是你思考問題,然后按自己的思路去做程序嗎?
其實(shí)不是的。在我設(shè)計(jì)這個(gè)程序的時(shí)候,相當(dāng)于我“鉆”入這個(gè)程序里面去了。這時(shí)候沒有我自己的任何思維,我的所有思維都是這個(gè)程序,它這步該怎么走,下步該怎么走,它可能會(huì)出現(xiàn)什么情況。我動(dòng)這個(gè)部分的時(shí)候,別的部分是否要干擾,也許會(huì)動(dòng)一發(fā)而牽全身,它們之間是怎么相互影響的?
也只有到達(dá)這個(gè)境界,你的程序才能真正地寫好,絕對(duì)不是做個(gè)什么可視化。可視化本身就是“我去設(shè)計(jì)這個(gè)程序”,而真正的程序高手是“我就是程序”,這兩種方法絕對(duì)是不同的。比如,我要用vb去設(shè)計(jì)一個(gè)程序,和我本身就是一個(gè)程序的思維方式,是不一樣的。別人也許覺得操作系統(tǒng)很深?yuàn)W,很復(fù)雜,其實(shí),如果你到達(dá)高手狀態(tài),你就是操作系統(tǒng),你就能做任何程序。
對(duì)待軟件要有一個(gè)全面的分析方法,光說理論是沒有用的。如果你沒有經(jīng)過第一、第二、第三、第四這四個(gè)階段,則永遠(yuǎn)到達(dá)不了高境界。因?yàn)榭罩袠情w的理論沒有用,而這些必須是一步一步地去做出來。
一個(gè)高級(jí)程序員應(yīng)該具備開放性思維,從里到外的所有的知識(shí)都能了解。然后,看到世界最新技術(shù)就能馬上掌握,馬上了解。實(shí)際上,技術(shù)到達(dá)最高的境界后,是沒有分別的。任何東西都是相通的,只要你到達(dá)這個(gè)境界以后,什么問題一看就能明白,一看就能抓住最核心的問題,最根本的根本,而不會(huì)被其他的枝葉或表象所迷惑,做到這一步后才算比較成功。
從程序員本身來說,如果它到達(dá)這一步以后,他就已經(jīng)形成了開闊的思維。他有這種開放性思維的話,他就能做戰(zhàn)略決策,這對(duì)他將來做任何事情都有好處。事實(shí)上,會(huì)做程序后,就會(huì)有一種分析問題的方法,學(xué)會(huì)怎么樣把問題的表象剖開,看到它的本質(zhì)。這時(shí)你碰到任何具體的問題,只要給點(diǎn)時(shí)間,都能輕而易舉地解決。實(shí)際上,對(duì)開發(fā)計(jì)算機(jī)軟件來說,沒有什么做不了的軟件,所有的軟件都能做,只是看你有沒有時(shí)間,有沒有耐心,有沒有資金做支撐。
這幾年,尤其是這兩三年,估計(jì)到2005年前,中國軟件這個(gè)行業(yè)里面大的軟件公司就能形成。現(xiàn)在就已經(jīng)在形成,例如用友,它上市后,地位就更加穩(wěn)固了。其他大的軟件企業(yè)會(huì)在這幾年內(nèi)迅速長大。這時(shí)候,包括流通渠道、經(jīng)銷商的渠道也會(huì)迅速長大。也就是說,到2005年以后,中國軟件這個(gè)行業(yè)的門檻比現(xiàn)在還要高很多,與美國不會(huì)有太大的差別。此時(shí),中國軟件才真正體現(xiàn)出它的威力來。如果你是這些威力中的一員,就已經(jīng)很厲害了。
別人可能知道比爾?蓋茨是個(gè)談判的高手,是賣東西的高手,其實(shí),比爾?蓋茨從根本上來說是個(gè)程序高手,這是他根本中的根本。他對(duì)所有的技術(shù)都非常敏感,一眼就看到本質(zhì),而且他本身也能做程序,時(shí)常在看程序。現(xiàn)在他不做董事長,而做首席設(shè)計(jì)師,這時(shí)他就更加接近程序的本質(zhì)。因?yàn)樗旧砭陀泻荛_闊的思維,又深入到技術(shù)的本身,所以他就知道技術(shù)的方向。這對(duì)于一個(gè)公司,對(duì)他這樣的人來說,是非常重要的。
如果他判斷錯(cuò)誤一步,那公司以后再回頭就很難了。計(jì)算機(jī)的競(jìng)爭(zhēng)是非常激烈的,不能走錯(cuò)半步。很多公司以前看上去很火,后來就
銷聲匿跡了,就是因?yàn)樗咤e(cuò)一步,然后就不行了。為什么它會(huì)走錯(cuò)?因?yàn)樗涣私饧夹g(shù)的本質(zhì)在哪里,技術(shù)的發(fā)展方向在哪里。
比爾?蓋茨因?yàn)楦改甘菍W(xué)法律的,所以他本身就很能“侃”,很有說服力,而他又是做技術(shù)的,就非常清楚技術(shù)的方向在哪里,所以他才能把方向把握得很準(zhǔn)確,公司越來越大。而別的公司只火一陣子,他卻火了還會(huì)再火。就算微軟再龐大,你如果不把握好軟件技術(shù)的最前沿,一樣也會(huì)玩完。就像intel時(shí)刻把握著cpu的最新技術(shù),才能保證自己是行業(yè)老大。技術(shù)決定它的將來。
所以,程序員要能達(dá)到這樣的目標(biāo),就要有非常強(qiáng)的耐心和非常好的機(jī)遇才有可能。事實(shí)上,現(xiàn)在的機(jī)會(huì)挺好的,2005年以前機(jī)會(huì)都非常大,以后機(jī)會(huì)會(huì)比較小。但是,如果有耐心的話,你還是會(huì)有機(jī)會(huì)的,機(jī)會(huì)都是出在耐心里。我記得有句話說“雄心的一半是耐心”,我認(rèn)為雄心的三分之二都是耐心。如果你越有野心,你就越要有耐心,你的野心才有可能實(shí)現(xiàn)。如果你有野心而沒有耐心,那都是胡思亂想,別人一眼就能看穿。最后在競(jìng)爭(zhēng)中,對(duì)手一眼就看到你的意圖,那你還有什么可競(jìng)爭(zhēng)的?
1.2.3 程序員是吃青春飯的嗎
很多人都認(rèn)為程序員是三十歲以前的職業(yè),到了三十歲以后,就不應(yīng)再做程序員了。現(xiàn)在的很多程序員也有這種想法,我覺得這種想法很不對(duì)。
在20世紀(jì)80年代末到90年代初,那時(shí)軟件還沒有形成行業(yè),程序員不能以此作為謀生的手段時(shí),你必須轉(zhuǎn)行,因?yàn)槟隳贻p的時(shí)候不用考慮吃飯的問題,天天“玩”都可以,但是以后就不可能了。
據(jù)我了解,微軟里面的那些高手,幾乎都是四五十歲的,而且都是做底層的。他們是上世紀(jì)70年代就開始“玩”程序的,所以對(duì)于整個(gè)計(jì)算機(jī),他們是太清楚了。現(xiàn)在有些人主觀臆斷地希望微軟第二天倒閉就好了,但那可能性太小了。因?yàn)槟切┏绦騿T是從cpu是4004的時(shí)候開始,玩到現(xiàn)在奔騰iv,沒有哪一代東西他們沒有經(jīng)歷過。
你知道他們現(xiàn)在正在玩什么嗎?現(xiàn)在正在玩64位的cpu。你說你普通的程序員,有這個(gè)耐心嗎?沒有這個(gè)耐心,你絕對(duì)做不了,你也絕對(duì)做不了高手。他為什么能做?因?yàn)樗粌H是玩過來的,而且他還非常有耐心,每一步技術(shù)他都跟得上,所以對(duì)他來說,沒有任何的難度和壓力。
因?yàn)橛?jì)算機(jī)技術(shù)沒有任何時(shí)候是突變的。它的今年和去年相差不會(huì)很大,但是回過頭來看三年以前的情況,和現(xiàn)在的距離就很大。所以說,如果你每年都跟著技術(shù)進(jìn)步的話,你的壓力就很小,因?yàn)槟銜r(shí)刻都能掌握最新的技術(shù)。但是,如果你落下來,別說十年,就是三年,你就趕不上了。
如果你一旦趕不上,就會(huì)覺得非常吃力;如果你趕不上,你就會(huì)迷失方向;如果你迷失了方向,你就覺得計(jì)算機(jī)沒有味道,越做越?jīng)]勁。當(dāng)你還只是有個(gè)思路的時(shí)候,別人的產(chǎn)品都做出來了,因?yàn)槟愕乃礁鷦e人相差太遠(yuǎn),人家早就想到的問題,你現(xiàn)在才開始認(rèn)識(shí)。水平越高,他就看得越遠(yuǎn),那么他的思維就越開闊;水平越低,想的問題就越窄。
64位cpu是這個(gè)十年和下個(gè)十年最重要的技術(shù)之一,誰抓住這個(gè)機(jī)會(huì),誰就能抓住未來賺錢的商機(jī)。cpu是英特爾設(shè)計(jì)的,對(duì)這一點(diǎn)他肯定清楚。舉例來說,如果從64位的角度來看現(xiàn)在的32位,就像從現(xiàn)在的角度去看dos。你說dos很復(fù)雜嗎?當(dāng)你在dos年代的時(shí)候,你會(huì)覺得dos很復(fù)雜。你說現(xiàn)在的windows不夠復(fù)雜嗎?windows太復(fù)雜了,但是你到了64位的時(shí)候再去看windows,就如同現(xiàn)在看dos一樣。
整個(gè)64位系統(tǒng)的平臺(tái)和思維方式、思路都比現(xiàn)在更開闊,打個(gè)比方說,現(xiàn)在的windows里面能開n個(gè)dos窗口,每個(gè)dos窗都能運(yùn)行一個(gè)程序。到達(dá)64位的時(shí)候,操作系統(tǒng)事實(shí)上能做到開n個(gè)x86,開n個(gè)windows 98,然后再開n個(gè)windows 95都沒有問題,系統(tǒng)能做到這一步,甚至你的系統(tǒng)內(nèi)開n個(gè)windows nt都沒有關(guān)系。這就是64位和32位的差別。所以,微軟的那些“老頭”,四、五十歲的那幾個(gè)做核心的人,現(xiàn)在正在玩這些東西。你說微軟的技術(shù)它能不先進(jìn)嗎?是linux那幾個(gè)玩家能搞定的嗎?
微軟的技術(shù)非常雄厚,世界計(jì)算機(jī)的最新技術(shù)絕對(duì)集中在這幾個(gè)人手里。而且這幾個(gè)人的思維模式非常開闊,誰都沒有意識(shí)到的東西他早就開始做了。現(xiàn)在64位的cpu都出來一二年了,你說有什么人去做這些應(yīng)用嗎?沒有,有的就是那幾個(gè)unix廠商做好后給自己用的。
所以,追求技術(shù)的最高境界的時(shí)候,實(shí)際上是沒有年齡限制的。對(duì)我來說,現(xiàn)在都三十三了,我從來沒有想過退出這行,我覺得我就能玩下去,一直玩到退休都沒有問題。我要時(shí)刻保持技術(shù)的最前端,這樣的話對(duì)我來說是不困難的,沒有任何累的感覺。
很多人說做程序不是人干的事情,是非人的待遇。這樣,他們一旦成立一個(gè)公司,做出一點(diǎn)成績,在輝煌的時(shí)候馬上就考慮退出。因?yàn)樗麄兲嗔耍刻焱砩习疽梗刻焱砩蠠藘砂鼰熯€不夠,屋子里面簡直就缺氧了,好像還沒有解決問題。
白天睡覺,晚上干活,那當(dāng)然累死了,這是自己折騰自己。所以,做程序員一定要有一種正常的心態(tài),就是說,你做程序的時(shí)候,不要把自己的生活搞得顛三倒四的。如果非得搞得晚上燒好多煙才行,這樣你肯定折騰不到三十歲,三十歲以后身體就差了。
事實(shí)上,我基本上就沒有因?yàn)樽龀绦蚨疽沟摹?/P>
好的開始是成功的一半,本文首先會(huì)試圖告訴你什么是程序員?為什么要做這樣的程序?正確的入門方法是什么?
程序員只有在理解了以上內(nèi)容的基礎(chǔ)上,才能進(jìn)一步更快地提高自身技能,這時(shí)候再開始程序的設(shè)計(jì)。其實(shí),對(duì)一個(gè)軟件的開發(fā)者來說,真正重要的不在于這行代碼怎么寫,那些代碼應(yīng)該怎么寫,關(guān)鍵是思路的問題,而思路事實(shí)上是經(jīng)驗(yàn)的積累。經(jīng)驗(yàn)是使你從最初的封閉的思維方式,到最后形成開放式的思維的一個(gè)過程。將我十幾年程序生涯中獲得的一些經(jīng)驗(yàn)告訴讀者,使大家少走彎路也是我想寫這本書的主要目的。
1.1 程序≠軟件
現(xiàn)在很多人以為程序就是軟件,軟件就是程序。事實(shí)上,軟件和程序在20世紀(jì)80年代時(shí),還可以說是等同的,或者說,在非pc領(lǐng)域里它們可能還會(huì)是等同的,比如說某個(gè)嵌入式軟件領(lǐng)域,軟件和程序可能是等同的。但是,在pc這個(gè)領(lǐng)域內(nèi),現(xiàn)在的程序已不等于軟件了。這是什么意思呢?
1. 軟件發(fā)展簡述
在20世紀(jì)80年代的時(shí)候,pc剛誕生,這時(shí)國內(nèi)還沒有幾個(gè)人會(huì)寫程序。那么,如果你寫個(gè)程序,別人就可以拿來用。這時(shí)候的程序就能產(chǎn)生價(jià)值,這個(gè)程序就直接等同于軟件。
但軟件行業(yè)發(fā)展到現(xiàn)在,這里以中國的情況為例(美國在20世紀(jì)80年代,程序已經(jīng)不等同于軟件了),程序也不等同于軟件了。因?yàn)楝F(xiàn)在會(huì)寫程序很容易,但是你的這個(gè)程序很難產(chǎn)生什么樣的商業(yè)意義,也不能產(chǎn)生什么價(jià)值,這就很難直接變成軟件。要使一個(gè)程序直接變成軟件,中間就面臨著很高的門檻問題。這個(gè)門檻問題來自于整個(gè)行業(yè)的形成。
現(xiàn)在,你寫了一個(gè)程序以后,要面臨商業(yè)化的過程。你要宣傳,你要讓用戶知道,你要建立經(jīng)銷渠道,可能你還要花很多的時(shí)間去說服別人用你的東西。這是程序到軟件的一個(gè)過程。這門檻已比較高了。
我們?cè)诤蛧鴥?nèi)的大經(jīng)銷商的銷售渠道的人聊天時(shí),他們的老板說,這幾年做軟件的門檻挺高的,如果你沒有五、六百萬做軟件,那是“玩”不起來的。我說:“你們就使門檻很高了。”他說:“那肯定是的。如果你寫個(gè)“爛”程序,明天你倒閉了,你的東西還占了我的庫房,我還不知道找誰退去呢。我的庫房是要錢的呀!現(xiàn)在的軟件又是那么多!”
所以,如果你沒有一定的資產(chǎn)的話,經(jīng)銷商都不理你。實(shí)際情況也是這樣的,如果你的公司比較小,且沒什么名氣,你的產(chǎn)品放到經(jīng)銷商庫房,那么他最多給你暫收,產(chǎn)品銷不動(dòng)的話,一般兩周絕對(duì)會(huì)退貨。因?yàn)楝F(xiàn)在經(jīng)銷商可選擇的余地已很多了,所謂的軟件也已經(jīng)很多了。而程序則更多,程序都想變成軟件,誰都說自己的是“金子”。但只有經(jīng)受住用戶的檢驗(yàn),才能成為真正的“金子”。
這就是美國為什么在20世紀(jì)90年代幾乎沒有什么新的軟件公司產(chǎn)生的原因。只是原來80年代的大的軟件公司互相兼并,我吞你,你吃我。但是,寫程序的人很多,美國的程序變軟件的門檻可能比我們還高,所以很多人寫了程序就丟在網(wǎng)上,就形成了共享軟件。
2. 共享軟件
共享軟件是避開商業(yè)渠道的一種方法。它避開了商業(yè)的門檻,因?yàn)檫@個(gè)行業(yè)的門檻發(fā)展很高以后就輕易進(jìn)不去了。我寫個(gè)程序丟在網(wǎng)上,你下載就可以用,這時(shí)候程序又等于軟件。共享軟件是這樣產(chǎn)生的,是因?yàn)闆]有辦法中的辦法。如果說程序直接等于軟件的話,誰也不會(huì)輕易把程序丟到網(wǎng)上去。
開始做共享軟件的人并不認(rèn)為做它能賺錢,只是后來用的人多了,有人付錢給他了。共享軟件使得程序和軟件的距離縮短了,但是它與商業(yè)軟件的距離會(huì)進(jìn)一步拉大。商業(yè)軟件的功能和所要達(dá)到的目標(biāo)就不是一個(gè)人能“玩”得起來的了。這時(shí)的軟件也已不是幾個(gè)人、一個(gè)小組就能做出來的了。這就是在美國新的軟件公司沒法產(chǎn)生的原因。比如netscape網(wǎng)景是在1995~1996年產(chǎn)生的新軟件公司,但是,兩三年后它就不見了。
1.1.1 商業(yè)軟件門檻的形成
1. 商業(yè)軟件門檻的形成
商業(yè)軟件門檻的形成是整個(gè)行業(yè)發(fā)展的必然結(jié)果。任何一個(gè)行業(yè)初始階段時(shí)的門檻都非常低,但是,只要發(fā)展到一定的階段后,它的門檻就必然抬高。比如,現(xiàn)在國內(nèi)生產(chǎn)小汽車很困難,但在20世紀(jì)50年代~60年代的時(shí)候,你裝4個(gè)輪子,再加上柴油機(jī)等就形成汽車。那時(shí)的萊特兄弟裝個(gè)螺旋槳,加兩個(gè)機(jī)翼,就能做飛機(jī)。整個(gè)行業(yè)還沒有形成的時(shí)候,絕對(duì)可以這樣做,但是,到整個(gè)行業(yè)形成時(shí),你就做不了了。所有的行業(yè)都是這樣的。
為什么網(wǎng)站一出來時(shí)那么多人去擠著做?這也是因?yàn)橐婚_始的時(shí)候,看起來門檻非常低,人人都可以做。只要有一個(gè)服務(wù)器,架根網(wǎng)線,就能做網(wǎng)站。這個(gè)行業(yè)處于初始階段時(shí),情況就是這樣的。但這個(gè)行業(yè)形成后,你就輕易地“玩”不了了。
國內(nèi)的軟件發(fā)展也是如此。國內(nèi)的軟件自從軟件經(jīng)銷商形成以后,這個(gè)行業(yè)才真正地形成。有沒有一個(gè)渠道是判斷一個(gè)行業(yè)是否形成的很重要的環(huán)節(jié)。任何一個(gè)行業(yè)都會(huì)有一個(gè)經(jīng)銷渠道,如果渠道形成了,那么這個(gè)行業(yè)也就形成了。第一名的經(jīng)銷商是1994年~1995年成立的,也就是說,中國軟件行業(yè)大概也就是在1995年形成的,至今才經(jīng)歷8年時(shí)間的發(fā)展。
有一種浮躁的思想認(rèn)為,中國軟件產(chǎn)業(yè)應(yīng)該很快就能趕上美國。美國軟件行業(yè)是上世紀(jì)80年代形成的,到現(xiàn)在已經(jīng)發(fā)展了20多年了。中國軟件行業(yè)才8年,8年才是一個(gè)懵懂的小孩,20多歲是一個(gè)強(qiáng)壯的青年,那么他們的力量是不對(duì)等的。但也要看到,當(dāng)8歲變成15歲的時(shí)候,它真正的能量才會(huì)反映出來。
2. 軟件門檻對(duì)程序員的影響
現(xiàn)在中國軟件行業(yè)正在形成。所以,現(xiàn)在做一個(gè)程序員一定要有耐心,因?yàn)楝F(xiàn)在已經(jīng)不等于以前了。你一定要把所有的問題搞清楚,然后再去做程序。
對(duì)于程序員來說,最好的工作環(huán)境是在現(xiàn)有的或者初始要成立的公司里面,這是最容易成功的。個(gè)人單槍匹馬闖天下已經(jīng)很困難了。即使現(xiàn)在偶爾做兩個(gè)共享軟件放在網(wǎng)上能成名,但是也已經(jīng)比較困難了。因?yàn)楝F(xiàn)在做軟件的人已經(jīng)很多了。這也說明軟件已經(jīng)不等于程序了,程序也不等于軟件。
程序要變成軟件,這中間是一個(gè)商業(yè)化的過程。沒有門檻以前,它沒有這個(gè)商業(yè)過程,現(xiàn)在有這個(gè)行業(yè)了,它中間就有商業(yè)化的過程。這個(gè)商業(yè)的過程就不是一個(gè)人能“玩”的。
如果你開始做某一類軟件的時(shí)候,別人已經(jīng)做成了,這時(shí)你再?zèng)Q定花力氣去做,那么你就要花雙倍的力氣去趕上別人。
現(xiàn)在的商業(yè)軟件往往是由很多模塊組成的,模塊是整個(gè)系統(tǒng)的一部分。個(gè)人要完整地寫一個(gè)商業(yè)系統(tǒng)幾乎是不可能的。軟件進(jìn)入windows平臺(tái)后,它已經(jīng)很復(fù)雜了,不像在dos的時(shí)候,你寫兩行程序就能賣,做個(gè)zip也能賣。事實(shí)上,美國的商業(yè)編譯器也不是一個(gè)人能“玩”的。現(xiàn)在你可能覺得它是很簡單的,甚至linux還帶了一個(gè)gcc,且源程序還在。你可以把它改一改,做個(gè)vc試一試,看它會(huì)有人用嗎?它能變成軟件嗎?即使你再做個(gè)界面,它也還是一個(gè)gcc,絕對(duì)不會(huì)成為visual c++那樣能商業(yè)化的軟件。
可見,國外軟件行業(yè)的門檻要比中國的高很多了。我覺得我們中國即使再去做這樣的東西,也沒有多大的意義了。這個(gè)門檻你是追不過來的。不僅要花雙倍的力氣,而且在這么短的時(shí)間內(nèi),你還要完成別人已經(jīng)完成過的工作,包括別人所做的測(cè)試工作。只有這樣,才能做到你的軟件與別人有競(jìng)爭(zhēng)力,能與它做比較。
1.1.2 認(rèn)清自己的發(fā)展
如果連以上認(rèn)識(shí)都不清楚,很可能就以為去書店買一本mfc高手速成之類的書,編兩個(gè)程序就能成為軟件高手。就好像這些書是“黃金”,我學(xué)兩下,學(xué)會(huì)了vc、mfc,就能做一個(gè)軟件拿出去賣了。這種想法也不是不行,最后一定能行,但要有耐心,還要有機(jī)遇。機(jī)遇是從耐心中產(chǎn)生的,越有耐心,就越有機(jī)遇。你得非常努力,要花很多的精力,可能還要走很多的彎路。
如果你是從mfc入手的,或是從vb入手的,則如要做出一個(gè)真正的能應(yīng)用個(gè)人領(lǐng)域的通用軟件,就會(huì)走非常多的彎路。直接的捷徑絕對(duì)不是走這兩條路。這兩條路看起來很快,而且在很多公司里面確實(shí)需要這樣的東西,比如說我這家公司就是為另一個(gè)家公司做系統(tǒng)集成的,那我就需要這樣的東西,我不管你具體怎么實(shí)現(xiàn),我只需要達(dá)到這個(gè)目標(biāo)就行了。
任何軟件的實(shí)現(xiàn)都會(huì)有n種方法,即使你是用最差的那種方法實(shí)現(xiàn)的,也沒有問題,最后它還是能運(yùn)行。即使有問題,再改一改就是。但是,做通用軟件就不行了,通用是一對(duì)多,你做出來的軟件以后要面向全國,如果將來自由貿(mào)易通到香港也好,通到國外也好,整個(gè)產(chǎn)品能銷到全世界的話,這時(shí)候,通用軟件所有做的工作就不是這么簡單了。所以說,正確的入門方法就很關(guān)鍵。
如果你僅僅只是想混口飯吃,找個(gè)工作,可能教你成為mfc的高手之類的書對(duì)你就足夠了。但是,如果你想做一個(gè)很好的軟件,不僅能滿足你謀一碗飯吃,還能使你揚(yáng)名,最后你的軟件還能成為很多人用,甚至你還想把它作為一個(gè)事業(yè)去經(jīng)營,那么這第一步就非常關(guān)鍵。這時(shí)就絕對(duì)不能找一本mfc或找一本vb的書學(xué)兩下就行,而是要從最底層開始做起,從最基本做起。
1.2 高手是怎樣練成的
1.2.1 高手成長的六個(gè)階段
程序員怎樣才能達(dá)到編程的最高境界?最高境界絕對(duì)不是你去編兩行代碼,或者是幾分鐘能寫幾行代碼,或者是用什么所謂的可視化工具產(chǎn)生最少的代碼這些工作,這都不是真正的高手境界。即使是這樣的高手,那也都是無知者的自封。
我認(rèn)為,一個(gè)程序員的成長可分為如下六個(gè)階段。
? 第一階段
此階段主要是能熟練地使用某種語言。這就相當(dāng)于練武中的套路和架式這些表面的東西。
? 第二階段
此階段能精通基于某種平臺(tái)的接口(例如我們現(xiàn)在常用的win 32的api函數(shù))以及所對(duì)應(yīng)語言的自身的庫函數(shù)。到達(dá)這個(gè)階段后,也就相當(dāng)于可以進(jìn)行真實(shí)散打?qū)毩耍梢哉嬲卦趯?shí)踐中做些應(yīng)用。
? 第三階段
此階段能深入地了解某個(gè)平臺(tái)系統(tǒng)的底層,已經(jīng)具有了初級(jí)的內(nèi)功的能力,也就是“手中有劍,心中無劍”。
? 第四階級(jí)
此階段能直接在平臺(tái)上進(jìn)行比較深層次的開發(fā)。基本上,能達(dá)到這個(gè)層次就可以說是進(jìn)入了高層次。這時(shí)進(jìn)入了高級(jí)內(nèi)功的修煉。比如能進(jìn)行vxd或操作系統(tǒng)的內(nèi)核的修改。
這時(shí)已經(jīng)不再有語言的束縛,語言只是一種工具,即使要用自己不會(huì)的語言進(jìn)行開發(fā),也只是簡單地熟悉一下,就手到擒來,完全不像是第一階段的時(shí)候?qū)W習(xí)語言的那種情況。一般來說,從第三階段過渡到第四階段是比較困難的。為什么會(huì)難呢?這就是因?yàn)楹芏嗳说乃枷胱儾贿^來。
? 第五階級(jí)
此階段就已經(jīng)不再局限于簡單的技術(shù)上的問題了,而是能從全局上把握和設(shè)計(jì)一個(gè)比較大的系統(tǒng)體系結(jié)構(gòu),從內(nèi)核到外層界面。可以說是“手中無劍,心中有劍”。到了這個(gè)階段以后,能對(duì)市面上的任何軟件進(jìn)行剖析,并能按自己的要求進(jìn)行設(shè)計(jì),就算是ms word這樣的大型軟件,只要有充足的時(shí)間,也一定會(huì)設(shè)計(jì)出來。
? 第六階級(jí)
此階段也是最高的境界,達(dá)到“無招勝有招”。這時(shí)候,任何問題就純粹變成了一個(gè)思路的問題,不是用什么代碼就能表示的。也就是“手中無劍,心中也無劍”。
此時(shí),對(duì)于練功的人來說,他已不用再去學(xué)什么少林拳,只是在旁看一下少林拳的對(duì)戰(zhàn),就能把此拳拿來就用。這就是真正的大師級(jí)的人物。這時(shí),win 32或linux在你眼里是沒有什么差別的。
每一個(gè)階段再向上發(fā)展時(shí)都要按一定的方法。第一、第二個(gè)階段通過自學(xué)就可以完成,只要多用心去研究,耐心地去學(xué)習(xí)。
要想從第二個(gè)階段過渡到第三個(gè)階段,就要有一個(gè)好的學(xué)習(xí)環(huán)境。例如有一個(gè)高手帶領(lǐng)或公司里有一個(gè)好的練手環(huán)境。經(jīng)過二、三年的積累就能達(dá)到第三個(gè)階段。但是,有些人到達(dá)第三個(gè)階段后,常常就很難有境界上的突破了。他們這時(shí)會(huì)產(chǎn)生一種觀念,認(rèn)為軟件無非如此,認(rèn)為自己已無所不能。其實(shí),這時(shí)如果遇到大的或難些的軟件,他們往往還是無從下手。
現(xiàn)在我們國家大部分程序員都是在第二、三級(jí)之間。他們大多都是通過自學(xué)成才的,不過這樣的程序員一般在軟件公司也能獨(dú)當(dāng)一面,完成一些軟件的模塊。
但是,也還有一大堆處在第一階段的程序員,他們一般就能玩玩vb,做程序時(shí),去找一堆控件集成一個(gè)軟件。
現(xiàn)在一種流行的說法是,中國軟件人才現(xiàn)在是一個(gè)橄欖型的人才結(jié)構(gòu),有大量的中等水平的程序員,而初級(jí)和高級(jí)程序員比較少。而我認(rèn)為,現(xiàn)在中國絕大多數(shù)都是初級(jí)的程序員,中級(jí)程序員很少,高級(jí)的就更少了。所以,現(xiàn)在的人才結(jié)構(gòu)是“方塔”形,這是一種斷層的不良結(jié)構(gòu)。而真正成熟的軟件人才結(jié)構(gòu)應(yīng)該是平滑的三角形結(jié)構(gòu)。這樣,初級(jí)、中級(jí)、高級(jí)程序員才能充分地各施所長。三種人才結(jié)構(gòu)對(duì)比如圖1.1所示。
圖1.1 三種人才結(jié)構(gòu)對(duì)比
1.2.2 初級(jí)程序員和高級(jí)程序員的區(qū)別
一般對(duì)于一個(gè)問題,初級(jí)程序員和高級(jí)程序員考慮這個(gè)問題的方法絕對(duì)是不同的。比如,在初級(jí)程序員階段時(shí),他會(huì)覺得vb也能做出應(yīng)用來,且看起來也不錯(cuò)。
但到了中級(jí)程序員時(shí),他可能就不會(huì)選擇vb了,可能會(huì)用mfc,這時(shí),也能做出效果不錯(cuò)的程序。
到高級(jí)程序員時(shí),他絕對(duì)不是首先選擇以上工具,vb也好,vc也好,這些都不是他考慮的問題。這時(shí)考慮的絕對(duì)是什么才是具有最快效率、最穩(wěn)定性能的解決問題的方法。
軟件和別的產(chǎn)品不同。比如,在軟件中要達(dá)到某個(gè)目標(biāo),有n種方法,但是在n種方法中,只有一種方法或兩種方法是最好的,其他的都很次。所以,要做一個(gè)好的系統(tǒng),是很需要耐心的。如果沒有耐心,就不會(huì)有細(xì)活,有細(xì)活的東西才是好東西。我覺得做軟件是這樣,做任何事情也是這樣的,一定要投入。
程序員到達(dá)最高境界的時(shí)候,想的就是“我就是程序,程序就是我”。這時(shí)候我要做一個(gè)軟件,不會(huì)有自己主觀的思路,而是以機(jī)器的思路來考慮問題,也就是說,就是以程序的思考方式來思考程序,而不是以我去設(shè)計(jì)程序的方式去思考程序。這一點(diǎn)如果不到比較高的層次是不能明白的。
你設(shè)計(jì)程序不就是你思考問題,然后按自己的思路去做程序嗎?
其實(shí)不是的。在我設(shè)計(jì)這個(gè)程序的時(shí)候,相當(dāng)于我“鉆”入這個(gè)程序里面去了。這時(shí)候沒有我自己的任何思維,我的所有思維都是這個(gè)程序,它這步該怎么走,下步該怎么走,它可能會(huì)出現(xiàn)什么情況。我動(dòng)這個(gè)部分的時(shí)候,別的部分是否要干擾,也許會(huì)動(dòng)一發(fā)而牽全身,它們之間是怎么相互影響的?
也只有到達(dá)這個(gè)境界,你的程序才能真正地寫好,絕對(duì)不是做個(gè)什么可視化。可視化本身就是“我去設(shè)計(jì)這個(gè)程序”,而真正的程序高手是“我就是程序”,這兩種方法絕對(duì)是不同的。比如,我要用vb去設(shè)計(jì)一個(gè)程序,和我本身就是一個(gè)程序的思維方式,是不一樣的。別人也許覺得操作系統(tǒng)很深?yuàn)W,很復(fù)雜,其實(shí),如果你到達(dá)高手狀態(tài),你就是操作系統(tǒng),你就能做任何程序。
對(duì)待軟件要有一個(gè)全面的分析方法,光說理論是沒有用的。如果你沒有經(jīng)過第一、第二、第三、第四這四個(gè)階段,則永遠(yuǎn)到達(dá)不了高境界。因?yàn)榭罩袠情w的理論沒有用,而這些必須是一步一步地去做出來。
一個(gè)高級(jí)程序員應(yīng)該具備開放性思維,從里到外的所有的知識(shí)都能了解。然后,看到世界最新技術(shù)就能馬上掌握,馬上了解。實(shí)際上,技術(shù)到達(dá)最高的境界后,是沒有分別的。任何東西都是相通的,只要你到達(dá)這個(gè)境界以后,什么問題一看就能明白,一看就能抓住最核心的問題,最根本的根本,而不會(huì)被其他的枝葉或表象所迷惑,做到這一步后才算比較成功。
從程序員本身來說,如果它到達(dá)這一步以后,他就已經(jīng)形成了開闊的思維。他有這種開放性思維的話,他就能做戰(zhàn)略決策,這對(duì)他將來做任何事情都有好處。事實(shí)上,會(huì)做程序后,就會(huì)有一種分析問題的方法,學(xué)會(huì)怎么樣把問題的表象剖開,看到它的本質(zhì)。這時(shí)你碰到任何具體的問題,只要給點(diǎn)時(shí)間,都能輕而易舉地解決。實(shí)際上,對(duì)開發(fā)計(jì)算機(jī)軟件來說,沒有什么做不了的軟件,所有的軟件都能做,只是看你有沒有時(shí)間,有沒有耐心,有沒有資金做支撐。
這幾年,尤其是這兩三年,估計(jì)到2005年前,中國軟件這個(gè)行業(yè)里面大的軟件公司就能形成。現(xiàn)在就已經(jīng)在形成,例如用友,它上市后,地位就更加穩(wěn)固了。其他大的軟件企業(yè)會(huì)在這幾年內(nèi)迅速長大。這時(shí)候,包括流通渠道、經(jīng)銷商的渠道也會(huì)迅速長大。也就是說,到2005年以后,中國軟件這個(gè)行業(yè)的門檻比現(xiàn)在還要高很多,與美國不會(huì)有太大的差別。此時(shí),中國軟件才真正體現(xiàn)出它的威力來。如果你是這些威力中的一員,就已經(jīng)很厲害了。
別人可能知道比爾?蓋茨是個(gè)談判的高手,是賣東西的高手,其實(shí),比爾?蓋茨從根本上來說是個(gè)程序高手,這是他根本中的根本。他對(duì)所有的技術(shù)都非常敏感,一眼就看到本質(zhì),而且他本身也能做程序,時(shí)常在看程序。現(xiàn)在他不做董事長,而做首席設(shè)計(jì)師,這時(shí)他就更加接近程序的本質(zhì)。因?yàn)樗旧砭陀泻荛_闊的思維,又深入到技術(shù)的本身,所以他就知道技術(shù)的方向。這對(duì)于一個(gè)公司,對(duì)他這樣的人來說,是非常重要的。
如果他判斷錯(cuò)誤一步,那公司以后再回頭就很難了。計(jì)算機(jī)的競(jìng)爭(zhēng)是非常激烈的,不能走錯(cuò)半步。很多公司以前看上去很火,后來就
銷聲匿跡了,就是因?yàn)樗咤e(cuò)一步,然后就不行了。為什么它會(huì)走錯(cuò)?因?yàn)樗涣私饧夹g(shù)的本質(zhì)在哪里,技術(shù)的發(fā)展方向在哪里。
比爾?蓋茨因?yàn)楦改甘菍W(xué)法律的,所以他本身就很能“侃”,很有說服力,而他又是做技術(shù)的,就非常清楚技術(shù)的方向在哪里,所以他才能把方向把握得很準(zhǔn)確,公司越來越大。而別的公司只火一陣子,他卻火了還會(huì)再火。就算微軟再龐大,你如果不把握好軟件技術(shù)的最前沿,一樣也會(huì)玩完。就像intel時(shí)刻把握著cpu的最新技術(shù),才能保證自己是行業(yè)老大。技術(shù)決定它的將來。
所以,程序員要能達(dá)到這樣的目標(biāo),就要有非常強(qiáng)的耐心和非常好的機(jī)遇才有可能。事實(shí)上,現(xiàn)在的機(jī)會(huì)挺好的,2005年以前機(jī)會(huì)都非常大,以后機(jī)會(huì)會(huì)比較小。但是,如果有耐心的話,你還是會(huì)有機(jī)會(huì)的,機(jī)會(huì)都是出在耐心里。我記得有句話說“雄心的一半是耐心”,我認(rèn)為雄心的三分之二都是耐心。如果你越有野心,你就越要有耐心,你的野心才有可能實(shí)現(xiàn)。如果你有野心而沒有耐心,那都是胡思亂想,別人一眼就能看穿。最后在競(jìng)爭(zhēng)中,對(duì)手一眼就看到你的意圖,那你還有什么可競(jìng)爭(zhēng)的?
1.2.3 程序員是吃青春飯的嗎
很多人都認(rèn)為程序員是三十歲以前的職業(yè),到了三十歲以后,就不應(yīng)再做程序員了。現(xiàn)在的很多程序員也有這種想法,我覺得這種想法很不對(duì)。
在20世紀(jì)80年代末到90年代初,那時(shí)軟件還沒有形成行業(yè),程序員不能以此作為謀生的手段時(shí),你必須轉(zhuǎn)行,因?yàn)槟隳贻p的時(shí)候不用考慮吃飯的問題,天天“玩”都可以,但是以后就不可能了。
據(jù)我了解,微軟里面的那些高手,幾乎都是四五十歲的,而且都是做底層的。他們是上世紀(jì)70年代就開始“玩”程序的,所以對(duì)于整個(gè)計(jì)算機(jī),他們是太清楚了。現(xiàn)在有些人主觀臆斷地希望微軟第二天倒閉就好了,但那可能性太小了。因?yàn)槟切┏绦騿T是從cpu是4004的時(shí)候開始,玩到現(xiàn)在奔騰iv,沒有哪一代東西他們沒有經(jīng)歷過。
你知道他們現(xiàn)在正在玩什么嗎?現(xiàn)在正在玩64位的cpu。你說你普通的程序員,有這個(gè)耐心嗎?沒有這個(gè)耐心,你絕對(duì)做不了,你也絕對(duì)做不了高手。他為什么能做?因?yàn)樗粌H是玩過來的,而且他還非常有耐心,每一步技術(shù)他都跟得上,所以對(duì)他來說,沒有任何的難度和壓力。
因?yàn)橛?jì)算機(jī)技術(shù)沒有任何時(shí)候是突變的。它的今年和去年相差不會(huì)很大,但是回過頭來看三年以前的情況,和現(xiàn)在的距離就很大。所以說,如果你每年都跟著技術(shù)進(jìn)步的話,你的壓力就很小,因?yàn)槟銜r(shí)刻都能掌握最新的技術(shù)。但是,如果你落下來,別說十年,就是三年,你就趕不上了。
如果你一旦趕不上,就會(huì)覺得非常吃力;如果你趕不上,你就會(huì)迷失方向;如果你迷失了方向,你就覺得計(jì)算機(jī)沒有味道,越做越?jīng)]勁。當(dāng)你還只是有個(gè)思路的時(shí)候,別人的產(chǎn)品都做出來了,因?yàn)槟愕乃礁鷦e人相差太遠(yuǎn),人家早就想到的問題,你現(xiàn)在才開始認(rèn)識(shí)。水平越高,他就看得越遠(yuǎn),那么他的思維就越開闊;水平越低,想的問題就越窄。
64位cpu是這個(gè)十年和下個(gè)十年最重要的技術(shù)之一,誰抓住這個(gè)機(jī)會(huì),誰就能抓住未來賺錢的商機(jī)。cpu是英特爾設(shè)計(jì)的,對(duì)這一點(diǎn)他肯定清楚。舉例來說,如果從64位的角度來看現(xiàn)在的32位,就像從現(xiàn)在的角度去看dos。你說dos很復(fù)雜嗎?當(dāng)你在dos年代的時(shí)候,你會(huì)覺得dos很復(fù)雜。你說現(xiàn)在的windows不夠復(fù)雜嗎?windows太復(fù)雜了,但是你到了64位的時(shí)候再去看windows,就如同現(xiàn)在看dos一樣。
整個(gè)64位系統(tǒng)的平臺(tái)和思維方式、思路都比現(xiàn)在更開闊,打個(gè)比方說,現(xiàn)在的windows里面能開n個(gè)dos窗口,每個(gè)dos窗都能運(yùn)行一個(gè)程序。到達(dá)64位的時(shí)候,操作系統(tǒng)事實(shí)上能做到開n個(gè)x86,開n個(gè)windows 98,然后再開n個(gè)windows 95都沒有問題,系統(tǒng)能做到這一步,甚至你的系統(tǒng)內(nèi)開n個(gè)windows nt都沒有關(guān)系。這就是64位和32位的差別。所以,微軟的那些“老頭”,四、五十歲的那幾個(gè)做核心的人,現(xiàn)在正在玩這些東西。你說微軟的技術(shù)它能不先進(jìn)嗎?是linux那幾個(gè)玩家能搞定的嗎?
微軟的技術(shù)非常雄厚,世界計(jì)算機(jī)的最新技術(shù)絕對(duì)集中在這幾個(gè)人手里。而且這幾個(gè)人的思維模式非常開闊,誰都沒有意識(shí)到的東西他早就開始做了。現(xiàn)在64位的cpu都出來一二年了,你說有什么人去做這些應(yīng)用嗎?沒有,有的就是那幾個(gè)unix廠商做好后給自己用的。
所以,追求技術(shù)的最高境界的時(shí)候,實(shí)際上是沒有年齡限制的。對(duì)我來說,現(xiàn)在都三十三了,我從來沒有想過退出這行,我覺得我就能玩下去,一直玩到退休都沒有問題。我要時(shí)刻保持技術(shù)的最前端,這樣的話對(duì)我來說是不困難的,沒有任何累的感覺。
很多人說做程序不是人干的事情,是非人的待遇。這樣,他們一旦成立一個(gè)公司,做出一點(diǎn)成績,在輝煌的時(shí)候馬上就考慮退出。因?yàn)樗麄兲嗔耍刻焱砩习疽梗刻焱砩蠠藘砂鼰熯€不夠,屋子里面簡直就缺氧了,好像還沒有解決問題。
白天睡覺,晚上干活,那當(dāng)然累死了,這是自己折騰自己。所以,做程序員一定要有一種正常的心態(tài),就是說,你做程序的時(shí)候,不要把自己的生活搞得顛三倒四的。如果非得搞得晚上燒好多煙才行,這樣你肯定折騰不到三十歲,三十歲以后身體就差了。
事實(shí)上,我基本上就沒有因?yàn)樽龀绦蚨疽沟摹N抑唤?jīng)歷過三次熬夜,一次是在學(xué)校的時(shí)候,1986年剛接觸計(jì)算機(jī)時(shí),一天晚上跟一個(gè)同桌在計(jì)算機(jī)室內(nèi)玩游戲,研究了半天,搞著搞著就到了天亮,這是第一次。然后在畢業(yè)之前,在286上做一個(gè)程序。還有一次就是超級(jí)解霸上市前,那時(shí)公司已吹得很大了,那天晚上沒法睡覺。
一般來說,我也是十二點(diǎn)鐘睡覺,第二天七點(diǎn)就起了。所以說,只有具有正常的生活、正常的節(jié)奏,才有正常的心態(tài)來做程序員,這樣,你的思路才是正常的,只有正常的東西才能長久。搞疲勞戰(zhàn)或者是黑白顛倒,時(shí)間長久后就玩不轉(zhuǎn)了,玩著玩著就不想玩了。
好的開始是成功的一半,本文首先會(huì)試圖告訴你什么是程序員?為什么要做這樣的程序?正確的入門方法是什么?
程序員只有在理解了以上內(nèi)容的基礎(chǔ)上,才能進(jìn)一步更快地提高自身技能,這時(shí)候再開始程序的設(shè)計(jì)。其實(shí),對(duì)一個(gè)軟件的開發(fā)者來說,真正重要的不在于這行代碼怎么寫,那些代碼應(yīng)該怎么寫,關(guān)鍵是思路的問題,而思路事實(shí)上是經(jīng)驗(yàn)的積累。經(jīng)驗(yàn)是使你從最初的封閉的思維方式,到最后形成開放式的思維的一個(gè)過程。將我十幾年程序生涯中獲得的一些經(jīng)驗(yàn)告訴讀者,使大家少走彎路也是我想寫這本書的主要目的。
1.1 程序≠軟件
現(xiàn)在很多人以為程序就是軟件,軟件就是程序。事實(shí)上,軟件和程序在20世紀(jì)80年代時(shí),還可以說是等同的,或者說,在非pc領(lǐng)域里它們可能還會(huì)是等同的,比如說某個(gè)嵌入式軟件領(lǐng)域,軟件和程序可能是等同的。但是,在pc這個(gè)領(lǐng)域內(nèi),現(xiàn)在的程序已不等于軟件了。這是什么意思呢?
1. 軟件發(fā)展簡述
在20世紀(jì)80年代的時(shí)候,pc剛誕生,這時(shí)國內(nèi)還沒有幾個(gè)人會(huì)寫程序。那么,如果你寫個(gè)程序,別人就可以拿來用。這時(shí)候的程序就能產(chǎn)生價(jià)值,這個(gè)程序就直接等同于軟件。
但軟件行業(yè)發(fā)展到現(xiàn)在,這里以中國的情況為例(美國在20世紀(jì)80年代,程序已經(jīng)不等同于軟件了),程序也不等同于軟件了。因?yàn)楝F(xiàn)在會(huì)寫程序很容易,但是你的這個(gè)程序很難產(chǎn)生什么樣的商業(yè)意義,也不能產(chǎn)生什么價(jià)值,這就很難直接變成軟件。要使一個(gè)程序直接變成軟件,中間就面臨著很高的門檻問題。這個(gè)門檻問題來自于整個(gè)行業(yè)的形成。
現(xiàn)在,你寫了一個(gè)程序以后,要面臨商業(yè)化的過程。你要宣傳,你要讓用戶知道,你要建立經(jīng)銷渠道,可能你還要花很多的時(shí)間去說服別人用你的東西。這是程序到軟件的一個(gè)過程。這門檻已比較高了。
我們?cè)诤蛧鴥?nèi)的大經(jīng)銷商的銷售渠道的人聊天時(shí),他們的老板說,這幾年做軟件的門檻挺高的,如果你沒有五、六百萬做軟件,那是“玩”不起來的。我說:“你們就使門檻很高了。”他說:“那肯定是的。如果你寫個(gè)“爛”程序,明天你倒閉了,你的東西還占了我的庫房,我還不知道找誰退去呢。我的庫房是要錢的呀!現(xiàn)在的軟件又是那么多!”
所以,如果你沒有一定的資產(chǎn)的話,經(jīng)銷商都不理你。實(shí)際情況也是這樣的,如果你的公司比較小,且沒什么名氣,你的產(chǎn)品放到經(jīng)銷商庫房,那么他最多給你暫收,產(chǎn)品銷不動(dòng)的話,一般兩周絕對(duì)會(huì)退貨。因?yàn)楝F(xiàn)在經(jīng)銷商可選擇的余地已很多了,所謂的軟件也已經(jīng)很多了。而程序則更多,程序都想變成軟件,誰都說自己的是“金子”。但只有經(jīng)受住用戶的檢驗(yàn),才能成為真正的“金子”。
這就是美國為什么在20世紀(jì)90年代幾乎沒有什么新的軟件公司產(chǎn)生的原因。只是原來80年代的大的軟件公司互相兼并,我吞你,你吃我。但是,寫程序的人很多,美國的程序變軟件的門檻可能比我們還高,所以很多人寫了程序就丟在網(wǎng)上,就形成了共享軟件。
2. 共享軟件
共享軟件是避開商業(yè)渠道的一種方法。它避開了商業(yè)的門檻,因?yàn)檫@個(gè)行業(yè)的門檻發(fā)展很高以后就輕易進(jìn)不去了。我寫個(gè)程序丟在網(wǎng)上,你下載就可以用,這時(shí)候程序又等于軟件。共享軟件是這樣產(chǎn)生的,是因?yàn)闆]有辦法中的辦法。如果說程序直接等于軟件的話,誰也不會(huì)輕易把程序丟到網(wǎng)上去。
開始做共享軟件的人并不認(rèn)為做它能賺錢,只是后來用的人多了,有人付錢給他了。共享軟件使得程序和軟件的距離縮短了,但是它與商業(yè)軟件的距離會(huì)進(jìn)一步拉大。商業(yè)軟件的功能和所要達(dá)到的目標(biāo)就不是一個(gè)人能“玩”得起來的了。這時(shí)的軟件也已不是幾個(gè)人、一個(gè)小組就能做出來的了。這就是在美國新的軟件公司沒法產(chǎn)生的原因。比如netscape網(wǎng)景是在1995~1996年產(chǎn)生的新軟件公司,但是,兩三年后它就不見了。
1.1.1 商業(yè)軟件門檻的形成
1. 商業(yè)軟件門檻的形成
商業(yè)軟件門檻的形成是整個(gè)行業(yè)發(fā)展的必然結(jié)果。任何一個(gè)行業(yè)初始階段時(shí)的門檻都非常低,但是,只要發(fā)展到一定的階段后,它的門檻就必然抬高。比如,現(xiàn)在國內(nèi)生產(chǎn)小汽車很困難,但在20世紀(jì)50年代~60年代的時(shí)候,你裝4個(gè)輪子,再加上柴油機(jī)等就形成汽車。那時(shí)的萊特兄弟裝個(gè)螺旋槳,加兩個(gè)機(jī)翼,就能做飛機(jī)。整個(gè)行業(yè)還沒有形成的時(shí)候,絕對(duì)可以這樣做,但是,到整個(gè)行業(yè)形成時(shí),你就做不了了。所有的行業(yè)都是這樣的。
為什么網(wǎng)站一出來時(shí)那么多人去擠著做?這也是因?yàn)橐婚_始的時(shí)候,看起來門檻非常低,人人都可以做。只要有一個(gè)服務(wù)器,架根網(wǎng)線,就能做網(wǎng)站。這個(gè)行業(yè)處于初始階段時(shí),情況就是這樣的。但這個(gè)行業(yè)形成后,你就輕易地“玩”不了了。
國內(nèi)的軟件發(fā)展也是如此。國內(nèi)的軟件自從軟件經(jīng)銷商形成以后,這個(gè)行業(yè)才真正地形成。有沒有一個(gè)渠道是判斷一個(gè)行業(yè)是否形成的很重要的環(huán)節(jié)。任何一個(gè)行業(yè)都會(huì)有一個(gè)經(jīng)銷渠道,如果渠道形成了,那么這個(gè)行業(yè)也就形成了。第一名的經(jīng)銷商是1994年~1995年成立的,也就是說,中國軟件行業(yè)大概也就是在1995年形成的,至今才經(jīng)歷8年時(shí)間的發(fā)展。
有一種浮躁的思想認(rèn)為,中國軟件產(chǎn)業(yè)應(yīng)該很快就能趕上美國。美國軟件行業(yè)是上世紀(jì)80年代形成的,到現(xiàn)在已經(jīng)發(fā)展了20多年了。中國軟件行業(yè)才8年,8年才是一個(gè)懵懂的小孩,20多歲是一個(gè)強(qiáng)壯的青年,那么他們的力量是不對(duì)等的。但也要看到,當(dāng)8歲變成15歲的時(shí)候,它真正的能量才會(huì)反映出來。
2. 軟件門檻對(duì)程序員的影響
現(xiàn)在中國軟件行業(yè)正在形成。所以,現(xiàn)在做一個(gè)程序員一定要有耐心,因?yàn)楝F(xiàn)在已經(jīng)不等于以前了。你一定要把所有的問題搞清楚,然后再去做程序。
對(duì)于程序員來說,最好的工作環(huán)境是在現(xiàn)有的或者初始要成立的公司里面,這是最容易成功的。個(gè)人單槍匹馬闖天下已經(jīng)很困難了。即使現(xiàn)在偶爾做兩個(gè)共享軟件放在網(wǎng)上能成名,但是也已經(jīng)比較困難了。因?yàn)楝F(xiàn)在做軟件的人已經(jīng)很多了。這也說明軟件已經(jīng)不等于程序了,程序也不等于軟件。
程序要變成軟件,這中間是一個(gè)商業(yè)化的過程。沒有門檻以前,它沒有這個(gè)商業(yè)過程,現(xiàn)在有這個(gè)行業(yè)了,它中間就有商業(yè)化的過程。這個(gè)商業(yè)的過程就不是一個(gè)人能“玩”的。
如果你開始做某一類軟件的時(shí)候,別人已經(jīng)做成了,這時(shí)你再?zèng)Q定花力氣去做,那么你就要花雙倍的力氣去趕上別人。
現(xiàn)在的商業(yè)軟件往往是由很多模塊組成的,模塊是整個(gè)系統(tǒng)的一部分。個(gè)人要完整地寫一個(gè)商業(yè)系統(tǒng)幾乎是不可能的。軟件進(jìn)入windows平臺(tái)后,它已經(jīng)很復(fù)雜了,不像在dos的時(shí)候,你寫兩行程序就能賣,做個(gè)zip也能賣。事實(shí)上,美國的商業(yè)編譯器也不是一個(gè)人能“玩”的。現(xiàn)在你可能覺得它是很簡單的,甚至linux還帶了一個(gè)gcc,且源程序還在。你可以把它改一改,做個(gè)vc試一試,看它會(huì)有人用嗎?它能變成軟件嗎?即使你再做個(gè)界面,它也還是一個(gè)gcc,絕對(duì)不會(huì)成為visual c++那樣能商業(yè)化的軟件。
可見,國外軟件行業(yè)的門檻要比中國的高很多了。我覺得我們中國即使再去做這樣的東西,也沒有多大的意義了。這個(gè)門檻你是追不過來的。不僅要花雙倍的力氣,而且在這么短的時(shí)間內(nèi),你還要完成別人已經(jīng)完成過的工作,包括別人所做的測(cè)試工作。只有這樣,才能做到你的軟件與別人有競(jìng)爭(zhēng)力,能與它做比較。
1.1.2 認(rèn)清自己的發(fā)展
如果連以上認(rèn)識(shí)都不清楚,很可能就以為去書店買一本mfc高手速成之類的書,編兩個(gè)程序就能成為軟件高手。就好像這些書是“黃金”,我學(xué)兩下,學(xué)會(huì)了vc、mfc,就能做一個(gè)軟件拿出去賣了。這種想法也不是不行,最后一定能行,但要有耐心,還要有機(jī)遇。機(jī)遇是從耐心中產(chǎn)生的,越有耐心,就越有機(jī)遇。你得非常努力,要花很多的精力,可能還要走很多的彎路。
如果你是從mfc入手的,或是從vb入手的,則如要做出一個(gè)真正的能應(yīng)用個(gè)人領(lǐng)域的通用軟件,就會(huì)走非常多的彎路。直接的捷徑絕對(duì)不是走這兩條路。這兩條路看起來很快,而且在很多公司里面確實(shí)需要這樣的東西,比如說我這家公司就是為另一個(gè)家公司做系統(tǒng)集成的,那我就需要這樣的東西,我不管你具體怎么實(shí)現(xiàn),我只需要達(dá)到這個(gè)目標(biāo)就行了。
任何軟件的實(shí)現(xiàn)都會(huì)有n種方法,即使你是用最差的那種方法實(shí)現(xiàn)的,也沒有問題,最后它還是能運(yùn)行。即使有問題,再改一改就是。但是,做通用軟件就不行了,通用是一對(duì)多,你做出來的軟件以后要面向全國,如果將來自由貿(mào)易通到香港也好,通到國外也好,整個(gè)產(chǎn)品能銷到全世界的話,這時(shí)候,通用軟件所有做的工作就不是這么簡單了。所以說,正確的入門方法就很關(guān)鍵。
如果你僅僅只是想混口飯吃,找個(gè)工作,可能教你成為mfc的高手之類的書對(duì)你就足夠了。但是,如果你想做一個(gè)很好的軟件,不僅能滿足你謀一碗飯吃,還能使你揚(yáng)名,最后你的軟件還能成為很多人用,甚至你還想把它作為一個(gè)事業(yè)去經(jīng)營,那么這第一步就非常關(guān)鍵。這時(shí)就絕對(duì)不能找一本mfc或找一本vb的書學(xué)兩下就行,而是要從最底層開始做起,從最基本做起。
1.2 高手是怎樣練成的
1.2.1 高手成長的六個(gè)階段
程序員怎樣才能達(dá)到編程的最高境界?最高境界絕對(duì)不是你去編兩行代碼,或者是幾分鐘能寫幾行代碼,或者是用什么所謂的可視化工具產(chǎn)生最少的代碼這些工作,這都不是真正的高手境界。即使是這樣的高手,那也都是無知者的自封。
我認(rèn)為,一個(gè)程序員的成長可分為如下六個(gè)階段。
? 第一階段
此階段主要是能熟練地使用某種語言。這就相當(dāng)于練武中的套路和架式這些表面的東西。
? 第二階段
此階段能精通基于某種平臺(tái)的接口(例如我們現(xiàn)在常用的win 32的api函數(shù))以及所對(duì)應(yīng)語言的自身的庫函數(shù)。到達(dá)這個(gè)階段后,也就相當(dāng)于可以進(jìn)行真實(shí)散打?qū)毩耍梢哉嬲卦趯?shí)踐中做些應(yīng)用。
? 第三階段
此階段能深入地了解某個(gè)平臺(tái)系統(tǒng)的底層,已經(jīng)具有了初級(jí)的內(nèi)功的能力,也就是“手中有劍,心中無劍”。
? 第四階級(jí)
此階段能直接在平臺(tái)上進(jìn)行比較深層次的開發(fā)。基本上,能達(dá)到這個(gè)層次就可以說是進(jìn)入了高層次。這時(shí)進(jìn)入了高級(jí)內(nèi)功的修煉。比如能進(jìn)行vxd或操作系統(tǒng)的內(nèi)核的修改。
這時(shí)已經(jīng)不再有語言的束縛,語言只是一種工具,即使要用自己不會(huì)的語言進(jìn)行開發(fā),也只是簡單地熟悉一下,就手到擒來,完全不像是第一階段的時(shí)候?qū)W習(xí)語言的那種情況。一般來說,從第三階段過渡到第四階段是比較困難的。為什么會(huì)難呢?這就是因?yàn)楹芏嗳说乃枷胱儾贿^來。
? 第五階級(jí)
此階段就已經(jīng)不再局限于簡單的技術(shù)上的問題了,而是能從全局上把握和設(shè)計(jì)一個(gè)比較大的系統(tǒng)體系結(jié)構(gòu),從內(nèi)核到外層界面。可以說是“手中無劍,心中有劍”。到了這個(gè)階段以后,能對(duì)市面上的任何軟件進(jìn)行剖析,并能按自己的要求進(jìn)行設(shè)計(jì),就算是ms word這樣的大型軟件,只要有充足的時(shí)間,也一定會(huì)設(shè)計(jì)出來。
? 第六階級(jí)
此階段也是最高的境界,達(dá)到“無招勝有招”。這時(shí)候,任何問題就純粹變成了一個(gè)思路的問題,不是用什么代碼就能表示的。也就是“手中無劍,心中也無劍”。
此時(shí),對(duì)于練功的人來說,他已不用再去學(xué)什么少林拳,只是在旁看一下少林拳的對(duì)戰(zhàn),就能把此拳拿來就用。這就是真正的大師級(jí)的人物。這時(shí),win 32或linux在你眼里是沒有什么差別的。
每一個(gè)階段再向上發(fā)展時(shí)都要按一定的方法。第一、第二個(gè)階段通過自學(xué)就可以完成,只要多用心去研究,耐心地去學(xué)習(xí)。
要想從第二個(gè)階段過渡到第三個(gè)階段,就要有一個(gè)好的學(xué)習(xí)環(huán)境。例如有一個(gè)高手帶領(lǐng)或公司里有一個(gè)好的練手環(huán)境。經(jīng)過二、三年的積累就能達(dá)到第三個(gè)階段。但是,有些人到達(dá)第三個(gè)階段后,常常就很難有境界上的突破了。他們這時(shí)會(huì)產(chǎn)生一種觀念,認(rèn)為軟件無非如此,認(rèn)為自己已無所不能。其實(shí),這時(shí)如果遇到大的或難些的軟件,他們往往還是無從下手。
現(xiàn)在我們國家大部分程序員都是在第二、三級(jí)之間。他們大多都是通過自學(xué)成才的,不過這樣的程序員一般在軟件公司也能獨(dú)當(dāng)一面,完成一些軟件的模塊。
但是,也還有一大堆處在第一階段的程序員,他們一般就能玩玩vb,做程序時(shí),去找一堆控件集成一個(gè)軟件。
現(xiàn)在一種流行的說法是,中國軟件人才現(xiàn)在是一個(gè)橄欖型的人才結(jié)構(gòu),有大量的中等水平的程序員,而初級(jí)和高級(jí)程序員比較少。而我認(rèn)為,現(xiàn)在中國絕大多數(shù)都是初級(jí)的程序員,中級(jí)程序員很少,高級(jí)的就更少了。所以,現(xiàn)在的人才結(jié)構(gòu)是“方塔”形,這是一種斷層的不良結(jié)構(gòu)。而真正成熟的軟件人才結(jié)構(gòu)應(yīng)該是平滑的三角形結(jié)構(gòu)。這樣,初級(jí)、中級(jí)、高級(jí)程序員才能充分地各施所長。三種人才結(jié)構(gòu)對(duì)比如圖1.1所示。
圖1.1 三種人才結(jié)構(gòu)對(duì)比
1.2.2 初級(jí)程序員和高級(jí)程序員的區(qū)別
一般對(duì)于一個(gè)問題,初級(jí)程序員和高級(jí)程序員考慮這個(gè)問題的方法絕對(duì)是不同的。比如,在初級(jí)程序員階段時(shí),他會(huì)覺得vb也能做出應(yīng)用來,且看起來也不錯(cuò)。
但到了中級(jí)程序員時(shí),他可能就不會(huì)選擇vb了,可能會(huì)用mfc,這時(shí),也能做出效果不錯(cuò)的程序。
到高級(jí)程序員時(shí),他絕對(duì)不是首先選擇以上工具,vb也好,vc也好,這些都不是他考慮的問題。這時(shí)考慮的絕對(duì)是什么才是具有最快效率、最穩(wěn)定性能的解決問題的方法。
軟件和別的產(chǎn)品不同。比如,在軟件中要達(dá)到某個(gè)目標(biāo),有n種方法,但是在n種方法中,只有一種方法或兩種方法是最好的,其他的都很次。所以,要做一個(gè)好的系統(tǒng),是很需要耐心的。如果沒有耐心,就不會(huì)有細(xì)活,有細(xì)活的東西才是好東西。我覺得做軟件是這樣,做任何事情也是這樣的,一定要投入。
程序員到達(dá)最高境界的時(shí)候,想的就是“我就是程序,程序就是我”。這時(shí)候我要做一個(gè)軟件,不會(huì)有自己主觀的思路,而是以機(jī)器的思路來考慮問題,也就是說,就是以程序的思考方式來思考程序,而不是以我去設(shè)計(jì)程序的方式去思考程序。這一點(diǎn)如果不到比較高的層次是不能明白的。
你設(shè)計(jì)程序不就是你思考問題,然后按自己的思路去做程序嗎?
其實(shí)不是的。在我設(shè)計(jì)這個(gè)程序的時(shí)候,相當(dāng)于我“鉆”入這個(gè)程序里面去了。這時(shí)候沒有我自己的任何思維,我的所有思維都是這個(gè)程序,它這步該怎么走,下步該怎么走,它可能會(huì)出現(xiàn)什么情況。我動(dòng)這個(gè)部分的時(shí)候,別的部分是否要干擾,也許會(huì)動(dòng)一發(fā)而牽全身,它們之間是怎么相互影響的?
也只有到達(dá)這個(gè)境界,你的程序才能真正地寫好,絕對(duì)不是做個(gè)什么可視化。可視化本身就是“我去設(shè)計(jì)這個(gè)程序”,而真正的程序高手是“我就是程序”,這兩種方法絕對(duì)是不同的。比如,我要用vb去設(shè)計(jì)一個(gè)程序,和我本身就是一個(gè)程序的思維方式,是不一樣的。別人也許覺得操作系統(tǒng)很深?yuàn)W,很復(fù)雜,其實(shí),如果你到達(dá)高手狀態(tài),你就是操作系統(tǒng),你就能做任何程序。
對(duì)待軟件要有一個(gè)全面的分析方法,光說理論是沒有用的。如果你沒有經(jīng)過第一、第二、第三、第四這四個(gè)階段,則永遠(yuǎn)到達(dá)不了高境界。因?yàn)榭罩袠情w的理論沒有用,而這些必須是一步一步地去做出來。
一個(gè)高級(jí)程序員應(yīng)該具備開放性思維,從里到外的所有的知識(shí)都能了解。然后,看到世界最新技術(shù)就能馬上掌握,馬上了解。實(shí)際上,技術(shù)到達(dá)最高的境界后,是沒有分別的。任何東西都是相通的,只要你到達(dá)這個(gè)境界以后,什么問題一看就能明白,一看就能抓住最核心的問題,最根本的根本,而不會(huì)被其他的枝葉或表象所迷惑,做到這一步后才算比較成功。
從程序員本身來說,如果它到達(dá)這一步以后,他就已經(jīng)形成了開闊的思維。他有這種開放性思維的話,他就能做戰(zhàn)略決策,這對(duì)他將來做任何事情都有好處。事實(shí)上,會(huì)做程序后,就會(huì)有一種分析問題的方法,學(xué)會(huì)怎么樣把問題的表象剖開,看到它的本質(zhì)。這時(shí)你碰到任何具體的問題,只要給點(diǎn)時(shí)間,都能輕而易舉地解決。實(shí)際上,對(duì)開發(fā)計(jì)算機(jī)軟件來說,沒有什么做不了的軟件,所有的軟件都能做,只是看你有沒有時(shí)間,有沒有耐心,有沒有資金做支撐。
這幾年,尤其是這兩三年,估計(jì)到2005年前,中國軟件這個(gè)行業(yè)里面大的軟件公司就能形成。現(xiàn)在就已經(jīng)在形成,例如用友,它上市后,地位就更加穩(wěn)固了。其他大的軟件企業(yè)會(huì)在這幾年內(nèi)迅速長大。這時(shí)候,包括流通渠道、經(jīng)銷商的渠道也會(huì)迅速長大。也就是說,到2005年以后,中國軟件這個(gè)行業(yè)的門檻比現(xiàn)在還要高很多,與美國不會(huì)有太大的差別。此時(shí),中國軟件才真正體現(xiàn)出它的威力來。如果你是這些威力中的一員,就已經(jīng)很厲害了。
別人可能知道比爾?蓋茨是個(gè)談判的高手,是賣東西的高手,其實(shí),比爾?蓋茨從根本上來說是個(gè)程序高手,這是他根本中的根本。他對(duì)所有的技術(shù)都非常敏感,一眼就看到本質(zhì),而且他本身也能做程序,時(shí)常在看程序。現(xiàn)在他不做董事長,而做首席設(shè)計(jì)師,這時(shí)他就更加接近程序的本質(zhì)。因?yàn)樗旧砭陀泻荛_闊的思維,又深入到技術(shù)的本身,所以他就知道技術(shù)的方向。這對(duì)于一個(gè)公司,對(duì)他這樣的人來說,是非常重要的。
如果他判斷錯(cuò)誤一步,那公司以后再回頭就很難了。計(jì)算機(jī)的競(jìng)爭(zhēng)是非常激烈的,不能走錯(cuò)半步。很多公司以前看上去很火,后來就
銷聲匿跡了,就是因?yàn)樗咤e(cuò)一步,然后就不行了。為什么它會(huì)走錯(cuò)?因?yàn)樗涣私饧夹g(shù)的本質(zhì)在哪里,技術(shù)的發(fā)展方向在哪里。
比爾?蓋茨因?yàn)楦改甘菍W(xué)法律的,所以他本身就很能“侃”,很有說服力,而他又是做技術(shù)的,就非常清楚技術(shù)的方向在哪里,所以他才能把方向把握得很準(zhǔn)確,公司越來越大。而別的公司只火一陣子,他卻火了還會(huì)再火。就算微軟再龐大,你如果不把握好軟件技術(shù)的最前沿,一樣也會(huì)玩完。就像intel時(shí)刻把握著cpu的最新技術(shù),才能保證自己是行業(yè)老大。技術(shù)決定它的將來。
所以,程序員要能達(dá)到這樣的目標(biāo),就要有非常強(qiáng)的耐心和非常好的機(jī)遇才有可能。事實(shí)上,現(xiàn)在的機(jī)會(huì)挺好的,2005年以前機(jī)會(huì)都非常大,以后機(jī)會(huì)會(huì)比較小。但是,如果有耐心的話,你還是會(huì)有機(jī)會(huì)的,機(jī)會(huì)都是出在耐心里。我記得有句話說“雄心的一半是耐心”,我認(rèn)為雄心的三分之二都是耐心。如果你越有野心,你就越要有耐心,你的野心才有可能實(shí)現(xiàn)。如果你有野心而沒有耐心,那都是胡思亂想,別人一眼就能看穿。最后在競(jìng)爭(zhēng)中,對(duì)手一眼就看到你的意圖,那你還有什么可競(jìng)爭(zhēng)的?
1.2.3 程序員是吃青春飯的嗎
很多人都認(rèn)為程序員是三十歲以前的職業(yè),到了三十歲以后,就不應(yīng)再做程序員了。現(xiàn)在的很多程序員也有這種想法,我覺得這種想法很不對(duì)。
在20世紀(jì)80年代末到90年代初,那時(shí)軟件還沒有形成行業(yè),程序員不能以此作為謀生的手段時(shí),你必須轉(zhuǎn)行,因?yàn)槟隳贻p的時(shí)候不用考慮吃飯的問題,天天“玩”都可以,但是以后就不可能了。
據(jù)我了解,微軟里面的那些高手,幾乎都是四五十歲的,而且都是做底層的。他們是上世紀(jì)70年代就開始“玩”程序的,所以對(duì)于整個(gè)計(jì)算機(jī),他們是太清楚了。現(xiàn)在有些人主觀臆斷地希望微軟第二天倒閉就好了,但那可能性太小了。因?yàn)槟切┏绦騿T是從cpu是4004的時(shí)候開始,玩到現(xiàn)在奔騰iv,沒有哪一代東西他們沒有經(jīng)歷過。
你知道他們現(xiàn)在正在玩什么嗎?現(xiàn)在正在玩64位的cpu。你說你普通的程序員,有這個(gè)耐心嗎?沒有這個(gè)耐心,你絕對(duì)做不了,你也絕對(duì)做不了高手。他為什么能做?因?yàn)樗粌H是玩過來的,而且他還非常有耐心,每一步技術(shù)他都跟得上,所以對(duì)他來說,沒有任何的難度和壓力。
因?yàn)橛?jì)算機(jī)技術(shù)沒有任何時(shí)候是突變的。它的今年和去年相差不會(huì)很大,但是回過頭來看三年以前的情況,和現(xiàn)在的距離就很大。所以說,如果你每年都跟著技術(shù)進(jìn)步的話,你的壓力就很小,因?yàn)槟銜r(shí)刻都能掌握最新的技術(shù)。但是,如果你落下來,別說十年,就是三年,你就趕不上了。
如果你一旦趕不上,就會(huì)覺得非常吃力;如果你趕不上,你就會(huì)迷失方向;如果你迷失了方向,你就覺得計(jì)算機(jī)沒有味道,越做越?jīng)]勁。當(dāng)你還只是有個(gè)思路的時(shí)候,別人的產(chǎn)品都做出來了,因?yàn)槟愕乃礁鷦e人相差太遠(yuǎn),人家早就想到的問題,你現(xiàn)在才開始認(rèn)識(shí)。水平越高,他就看得越遠(yuǎn),那么他的思維就越開闊;水平越低,想的問題就越窄。
64位cpu是這個(gè)十年和下個(gè)十年最重要的技術(shù)之一,誰抓住這個(gè)機(jī)會(huì),誰就能抓住未來賺錢的商機(jī)。cpu是英特爾設(shè)計(jì)的,對(duì)這一點(diǎn)他肯定清楚。舉例來說,如果從64位的角度來看現(xiàn)在的32位,就像從現(xiàn)在的角度去看dos。你說dos很復(fù)雜嗎?當(dāng)你在dos年代的時(shí)候,你會(huì)覺得dos很復(fù)雜。你說現(xiàn)在的windows不夠復(fù)雜嗎?windows太復(fù)雜了,但是你到了64位的時(shí)候再去看windows,就如同現(xiàn)在看dos一樣。
整個(gè)64位系統(tǒng)的平臺(tái)和思維方式、思路都比現(xiàn)在更開闊,打個(gè)比方說,現(xiàn)在的windows里面能開n個(gè)dos窗口,每個(gè)dos窗都能運(yùn)行一個(gè)程序。到達(dá)64位的時(shí)候,操作系統(tǒng)事實(shí)上能做到開n個(gè)x86,開n個(gè)windows 98,然后再開n個(gè)windows 95都沒有問題,系統(tǒng)能做到這一步,甚至你的系統(tǒng)內(nèi)開n個(gè)windows nt都沒有關(guān)系。這就是64位和32位的差別。所以,微軟的那些“老頭”,四、五十歲的那幾個(gè)做核心的人,現(xiàn)在正在玩這些東西。你說微軟的技術(shù)它能不先進(jìn)嗎?是linux那幾個(gè)玩家能搞定的嗎?
微軟的技術(shù)非常雄厚,世界計(jì)算機(jī)的最新技術(shù)絕對(duì)集中在這幾個(gè)人手里。而且這幾個(gè)人的思維模式非常開闊,誰都沒有意識(shí)到的東西他早就開始做了。現(xiàn)在64位的cpu都出來一二年了,你說有什么人去做這些應(yīng)用嗎?沒有,有的就是那幾個(gè)unix廠商做好后給自己用的。
所以,追求技術(shù)的最高境界的時(shí)候,實(shí)際上是沒有年齡限制的。對(duì)我來說,現(xiàn)在都三十三了,我從來沒有想過退出這行,我覺得我就能玩下去,一直玩到退休都沒有問題。我要時(shí)刻保持技術(shù)的最前端,這樣的話對(duì)我來說是不困難的,沒有任何累的感覺。
很多人說做程序不是人干的事情,是非人的待遇。這樣,他們一旦成立一個(gè)公司,做出一點(diǎn)成績,在輝煌的時(shí)候馬上就考慮退出。因?yàn)樗麄兲嗔耍刻焱砩习疽梗刻焱砩蠠藘砂鼰熯€不夠,屋子里面簡直就缺氧了,好像還沒有解決問題。
白天睡覺,晚上干活,那當(dāng)然累死了,這是自己折騰自己。所以,做程序員一定要有一種正常的心態(tài),就是說,你做程序的時(shí)候,不要把自己的生活搞得顛三倒四的。如果非得搞得晚上燒好多煙才行,這樣你肯定折騰不到三十歲,三十歲以后身體就差了。
事實(shí)上,我基本上就沒有因?yàn)樽龀绦蚨疽沟摹N抑唤?jīng)歷過三次熬夜,一次是在學(xué)校的時(shí)候,1986年剛接觸計(jì)算機(jī)時(shí),一天晚上跟一個(gè)同桌在計(jì)算機(jī)室內(nèi)玩游戲,研究了半天,搞著搞著就到了天亮,這是第一次。然后在畢業(yè)之前,在286上做一個(gè)程序。還有一次就是超級(jí)解霸上市前,那時(shí)公司已吹得很大了,那天晚上沒法睡覺。
一般來說,我也是十二點(diǎn)鐘睡覺,第二天七點(diǎn)就起了。所以說,只有具有正常的生活、正常的節(jié)奏,才有正常的心態(tài)來做程序員,這樣,你的思路才是正常的,只有正常的東西才能長久。搞疲勞戰(zhàn)或者是黑白顛倒,時(shí)間長久后就玩不轉(zhuǎn)了,玩著玩著就不想玩了。
梁肇新:
1970年出生于廣西玉林,1989年就讀于廣西大學(xué);
1993年大學(xué)畢業(yè)后進(jìn)入珠海巨人公司,從事軟件開發(fā)工作,深入研究了Windows內(nèi)核,開發(fā)出漢字平臺(tái)系統(tǒng);
1995年7月離開巨人公司,獨(dú)立創(chuàng)業(yè);
1997年獨(dú)立開發(fā)出使其一舉成名的《超級(jí)解霸3.0》,獨(dú)創(chuàng)"Direct -CDROM"技術(shù),因解決了電腦上播放VCD的讀死問題而蜚聲海內(nèi)外;
1999年創(chuàng)立北京世紀(jì)豪杰計(jì)算機(jī)技術(shù)公司,擔(dān)任董事長兼首席程序員,在視音頻編解碼、網(wǎng)絡(luò)傳輸、圖像處理、操作系統(tǒng)等四大領(lǐng)域擁有多項(xiàng)專利。
“梁肇新這個(gè)人了不起,他走了一條跟我完全不同的路,依靠自學(xué)把Windows系統(tǒng)研究透了,不僅在編程技術(shù)上成為了絕頂?shù)母呤郑以谒枷肷弦策_(dá)到了很高的高度。我非常欽佩他。”
—陳榕(北京科泰世紀(jì)有限公司首席科學(xué)家,前微軟COM+開發(fā)組核心成員)
本書的作者梁肇新先生是國內(nèi)著名的編程高手。他開發(fā)的“豪杰解霸”系列軟件產(chǎn)品在中國的通用軟件市場(chǎng)中是一個(gè)難得的亮點(diǎn)。我聽過很多關(guān)于他的故事,給我的感覺是,他的編程技術(shù),他的能力,他的意志品質(zhì)和他的經(jīng)歷就好像一段傳奇,相信他也是很多程序員心中的榜樣。傳奇是無法復(fù)制的,但是如果一個(gè)程序員對(duì)榜樣僅僅抱著仰慕的心情而沒有超越的野心,大概算不上是一個(gè)合格的程序員,而如果僅僅有超越的野心而不善于從榜樣的身上學(xué)習(xí),恐怕也算不上聰明的程序員。
一般在事業(yè)上最成功的程序員都不太愿意動(dòng)手寫作。很多人是太忙不想寫,也有一些人是想寫卻寫不好。難得梁肇新先生這樣的編程高手愿意抽出寶貴的時(shí)間,將自己的技術(shù)心得與讀者分享,不能不說是中國程序員的幸事。梁先生在這本書里論述了多方面的技術(shù)問題,卻都講得相當(dāng)深入。表面上來看,這本書的內(nèi)容有些分散,其實(shí)形散而神聚,通篇體現(xiàn)出一個(gè)核心思想,就是要迎難而上,務(wù)求甚解,無論是硬件原理、操作系統(tǒng)模型還是MMX指令,一定要自己動(dòng)手,把道理徹底弄明白。讀者如果能夠從書中感受到這種精神和方法,那么應(yīng)該說就是大有收獲的。
posted on 2005-10-22 20:11
瘦猴 閱讀(98)
評(píng)論(0) 編輯 收藏