程式設計高手成長的六個階段(樑肇新《程式設計高手箴言》)
1.2.1 高手成長的六個階段
程式設計師怎樣才能達到程式設計的最高境界?
最高境界絕對不是你去編兩行程式碼,或者是幾分鐘能寫幾行程式碼,或者是用什麼所謂的視覺化工具產生最少的程式碼這些工作,這都不是真正的高手境界。即使是這樣的高手,那也都是無知者的自封。
我認為,一個程式設計師的成長可分為如下六個階段。
第一階段 此階段主要是能熟練地使用某種語言。這就相當於練武中的套路和架式這些表面的東西。
第二階段 此階段能精通基於某種平臺的介面(例如我們現在常用的Win 32的API函式)以及所對應語言的自身的庫函式。到達這個階段後,也就相當於可以進行真實散打對練了,可以真正地在實踐中做些應用。
第三階段 此階段能深入地瞭解某個平臺系統的底層,已經具有了初級的內功的能力,也就是“手中有劍,心中無劍”。
第四階級 此階段能直接在平臺上進行比較深層次的開發。基本上,能達到這個層次就可以說是進入了高層次。這時進入了高階內功的修煉。比如能進行VxD或作業系統的核心的修改。 這時已經不再有語言的束縛,語言只是一種工具,即使要用自己不會的語言進行開發,也只是簡單地熟悉一下,就手到擒來,完全不像是第一階段的時候學習語言的那種情況。一般來說,從第三階段過渡到第四階段是比較困難的。為什麼會難呢?這就是因為很多人的思想轉變不過來。
第五階級 此階段就已經不再侷限於簡單的技術上的問題了,而是能從全域性上把握和設計一個比較大的系統體系結構,從核心到外層介面。可以說是“手中無劍,心中有劍”。到了這個階段以後,能對市面上的任何軟體進行剖析,並能按自己的要求進行設計,就算是MS Word這樣的大型軟體,只要有充足的時間,也一定會設計出來。
第六階級 此階段也是最高的境界,達到“無招勝有招”。這時候,任何問題就純粹變成了一個思路的問題,不是用什麼程式碼就能表示的。也就是“手中無劍,心中也無劍”。 此時,對於練功的人來說,他已不用再去學什麼少林拳,只是在旁看一下少林拳的對戰,就能把此拳拿來就用。這就是真正的大師級的人物。這時,Win 32或Linux在你眼裡是沒有什麼差別的。
每一個階段再向上發展時都要按一定的方法。
第一、第二個階段通過自學就可以完成,只要多用心去研究,耐心地去學習。
要想從第二個階段過渡到第三個階段,就要有一個好的學習環境。例如有一個高手帶領或公司裡有一個好的練手環境。經過二、三年的積累就能達到第三個階段。
但是,有些人到達第三個階段後,常常就很難有境界上的突破了。他們這時會產生一種觀念,認為軟體無非如此,認為自己已無所不能。其實,這時如果遇到大的或難些的軟體,他們往往還是無從下手。 現在我們國家大部分程式設計師都是在第二、三級之間。他們大多都是通過自學成才的,不過這樣的程式設計師一般在軟體公司也能獨當一面,完成一些軟體的模組。 但是,也還有一大堆處在第一階段的程式設計師,他們一般就能玩玩VB,做程式時,去找一堆控制元件整合一個軟體。 現在一種流行的說法是,中國軟體人才現在是一個橄欖型的人才結構,有大量的中等水平的程式設計師,而初級和高階程式設計師比較少。而我認為,現在中國絕大多數都是初級的程式設計師,中級程式設計師很少,高階的就更少了。所以,現在的人才結構是“方塔”形,這是一種斷層的不良結構。而真正成熟的軟體人才結構應該是平滑的三角形結構。這樣,初級、中級、高階程式設計師才能充分地各施所長。三種人才結構對比如圖1.1所示。
1.2.2 初級程式設計師和高階程式設計師的區別一般對於一個問題,初級程式設計師和高階程式設計師考慮這個問題的方法絕對是不同的。比如,在初級程式設計師階段時,他會覺得VB也能做出應用來,且看起來也不錯。 但到了中級程式設計師時,他可能就不會選擇VB了,可能會用MFC,這時,也能做出效果不錯的程式。 到高階程式設計師時,他絕對不是首先選擇以上工具,VB也好,VC也好,這些都不是他考慮的問題。這時考慮的絕對是什麼才是具有最快效率、最穩定效能的解決問題的方法。
]軟體和別的產品不同。比如,在軟體中要達到某個目標,有n種方法,但是在n種方法中,只有一種方法或兩種方法是最好的,其他的都很次。所以,要做一個好的系統,是很需要耐心的。如果沒有耐心,就不會有細活,有細活的東西才是好東西。我覺得做軟體是這樣,做任何事情也是這樣的,一定要投入。
程式設計師到達最高境界的時候,想的就是“我就是程式,程式就是我”。這時候我要做一個軟體,不會有自己主觀的思路,而是以機器的思路來考慮問題,也就是說,就是以程式的思考方式來思考程式,而不是以我去設計程式的方式去思考程式。這一點如果不到比較高的層次是不能明白的。
你設計程式不就是你思考問題,然後按自己的思路去做程式嗎? 其實不是的。在我設計這個程式的時候,相當於我“鑽”入這個程式裡面去了。這時候沒有我自己的任何思維,我的所有思維都是這個程式,它這步該怎麼走,下步該怎麼走,它可能會出現什麼情況。我動這個部分的時候,別的部分是否要干擾,也許會動一發而牽全身,它們之間是怎麼相互影響的? 也只有到達這個境界,你的程式才能真正地寫好,絕對不是做個什麼視覺化。視覺化本身就是“我去設計這個程式”,而真正的程式高手是“我就是程式”,這兩種方法絕對是不同的。
比如,我要用VB去設計一個程式,和我本身就是一個程式的思維方式,是不一樣的。別人也許覺得作業系統很深奧,很複雜,其實,如果你到達高手狀態,你就是作業系統,你就能做任何程式。 對待軟體要有一個全面的分析方法,光說理論是沒有用的。
如果你沒有經過第一、第二、第三、第四這四個階段,則永遠到達不了高境界。因為空中樓閣的理論沒有用,而這些必須是一步一步地去做出來。
一個高階程式設計師應該具備開放性思維,從裡到外的所有的知識都能瞭解。然後,看到世界最新技術就能馬上掌握,馬上了解。實際上,技術到達最高的境界後,是沒有分別的。任何東西都是相通的,只要你到達這個境界以後,什麼問題一看就能明白,一看就能抓住最核心的問題,最根本的根本,而不會被其他的枝葉或表象所迷惑,做到這一步後才算比較成功。 從程式設計師本身來說,如果它到達這一步以後,他就已經形成了開闊的思維。他有這種開放性思維的話,他就能做戰略決策,這對他將來做任何事情都有好處。事實上,會做程式後,就會有一種分析問題的方法,學會怎麼樣把問題的表象剖開,看到它的本質。這時你碰到任何具體的問題,只要給點時間,都能輕而易舉地解決。實際上,對開發計算機軟體來說,沒有什麼做不了的軟體,所有的軟體都能做,只是看你有沒有時間,有沒有耐心,有沒有資金做支撐。
這幾年,尤其是這兩三年,估計到2005年前,中國軟體這個行業裡面大的軟體公司就能形成。現在就已經在形成,例如用友,它上市後,地位就更加穩固了。其他大的軟體企業會在這幾年內迅速長大。這時候,包括流通渠道、經銷商的渠道也會迅速長大。也就是說,到2005年以後,中國軟體這個行業的門檻比現在還要高很多,與美國不會有太大的差別。此時,中國軟體才真正體現出它的威力來。如果你是這些威力中的一員,就已經很厲害了。 [face=楷體_GB2312]別人可能知道比爾·蓋茨是個談判的高手,是賣東西的高手,其實,比爾·蓋茨從根本上來說是個程式高手,這是他根本中的根本。他對所有的技術都非常敏感,一眼就看到本質,而且他本身也能做程式,時常在看程式。現在他不做董事長,而做首席設計師,這時他就更加接近程式的本質。因為他本身就有很開闊的思維,又深入到技術的本身,所以他就知道技術的方向。這對於一個公司,對他這樣的人來說,是非常重要的。 如果他判斷錯誤一步,那公司以後再回頭就很難了。計算機的競爭是非常激烈的,不能走錯半步。很多公司以前看上去很火,後來就銷聲匿跡了,就是因為它走錯一步,然後就不行了。為什麼它會走錯?因為他不瞭解技術的本質在哪裡,技術的發展方向在哪裡。 比爾·蓋茨因為父母是學法律的,所以他本身就很能“侃”,很有說服力,而他又是做技術的,就非常清楚技術的方向在哪裡,所以他才能把方向把握得很準確,公司越來越大。而別的公司只火一陣子,他卻火了還會再火。就算微軟再龐大,你如果不把握好軟體技術的最前沿,一樣也會玩完。就像Intel時刻把握著CPU的最新技術,才能保證自己是行業老大。技術決定它的將來。[/face] 所以,程式設計師要能達到這樣的目標,就要有非常強的耐心和非常好的機遇才有可能。事實上,現在的機會挺好的,2005年以前機會都非常大,以後機會會比較小。但是,如果有耐心的話,你還是會有機會的,機會都是出在耐心裡。我記得有句話說“雄心的一半是耐心”,我認為雄心的三分之二都是耐心。如果你越有野心,你就越要有耐心,你的野心才有可能實現。如果你有野心而沒有耐心,那都是胡思亂想,別人一眼就能看穿。最後在競爭中,對手一眼就看到你的意圖,那你還有什麼可競爭的?
1.2.3 程式設計師是吃青春飯的嗎
很多人都認為程式設計師是三十歲以前的職業,到了三十歲以後,就不應再做程式設計師了。現在的很多程式設計師也有這種想法,我覺得這種想法很不對。
在20世紀80年代末到90年代初,那時軟體還沒有形成行業,程式設計師不能以此作為謀生的手段時,你必須轉行,因為你年輕的時候不用考慮吃飯的問題,天天“玩”都可以,但是以後就不可能了。 據我瞭解,微軟裡面的那些高手,幾乎都是四五十歲的,而且都是做底層的。他們是上世紀70年代就開始“玩”程式的,所以對於整個計算機,他們是太清楚了。現在有些人主觀臆斷地希望微軟第二天倒閉就好了,但那可能性太小了。因為那些程式設計師是從CPU是4004的時候開始,玩到現在奔騰IV,沒有哪一代東西他們沒有經歷過。 你知道他們現在正在玩什麼嗎?現在正在玩64位的CPU。你說你普通的程式設計師,有這個耐心嗎?沒有這個耐心,你絕對做不了,你也絕對當不了高手。他為什麼能做?因為他不僅是玩過來的,而且他還非常有耐心,每一步技術他都跟得上,所以對他來說,沒有任何的難度和壓力。 因為計算機技術沒有任何時候是突變的。它的今年和去年相差不會很大,但是回過頭來看三年以前的情況,和現在的距離就很大。所以說,如果你每年都跟著技術進步的話,你的壓力就很小,因為你時刻都能掌握最新的技術。但是,如果你落下來,別說十年,就是三年,你就趕不上了。 如果你一旦趕不上,就會覺得非常吃力;如果你趕不上,你就會迷失方向;如果你迷失了方向,你就覺得計算機沒有味道,越做越沒勁。當你還只是有個思路的時候,別人的產品都做出來了,因為你的水平跟別人相差太遠,人家早就想到的問題,你現在才開始認識。水平越高,他就看得越遠,那麼他的思維就越開闊;水平越低,想的問題就越窄。 [face=楷體_GB2312]64位CPU是這個十年和下個十年最重要的技術之一,誰抓住這個機會,誰就能抓住未來賺錢的商機。CPU是英特爾設計的,對這一點他肯定清楚。舉例來說,如果從64位的角度來看現在的32位,就像從現在的角度去看DOS。你說DOS很複雜嗎?當你在DOS年代的時候,你會覺得DOS很複雜。你說現在的Windows不夠複雜嗎?Windows太複雜了,但是你到了64位的時候再去看Windows,就如同現在看DOS一樣。 整個64位系統的平臺和思維方式、思路都比現在更開闊,打個比方說,現在的Windows裡面能開n個DOS視窗,每個DOS窗都能執行一個程式。到達64位的時候,作業系統事實上能做到開n個X86,開n個Windows 98,然後再開n個Windows 95都沒有問題,系統能做到這一步,甚至你的系統內開n個Windows NT都沒有關係。這就是64位和32位的差別。所以,微軟的那些“老頭”,四、五十歲的那幾個做核心的人,現在正在玩這些東西。你說微軟的技術它能不先進嗎?是Linux那幾個玩家能搞定的嗎? 微軟的技術非常雄厚,世界計算機的最新技術絕對集中在這幾個人手裡。而且這幾個人的思維模式非常開闊,誰都沒有意識到的東西他早就開始做了。現在64位的CPU都出來一二年了,你說有什麼人去做這些應用嗎?沒有,有的就是那幾個UNIX廠商做好後給自己用的。[/face] 所以,追求技術的最高境界的時候,實際上是沒有年齡限制的。對我來說,現在都三十三了,我從來沒有想過退出這行,我覺得我就能玩下去,一直玩到退休都沒有問題。我要時刻保持技術的最前端,這樣的話對我來說是不困難的,沒有任何累的感覺。 很多人說做程式不是人乾的事情,是非人的待遇。這樣,他們一旦成立一個公司,做出一點成績,在輝煌的時候馬上就考慮退出。因為他們太苦了,每天晚上熬夜,每天晚上燒了兩包煙還不夠,屋子裡面簡直就缺氧了,好像還沒有解決問題。 白天睡覺,晚上幹活,那當然累死了,這是自己折騰自己。所以,做程式設計師一定要有一種正常的心態,就是說,你做程式的時候,不要把自己的生活搞得顛三倒四的。如果非得搞得晚上燒好多煙才行,這樣你肯定折騰不到三十歲,三十歲以後身體就差了。 事實上,我基本上就沒有因為做程式而熬夜的。我只經歷過三次熬夜,一次是在學校的時候,1986年剛接觸計算機時,一天晚上跟一個同桌在計算機室內玩遊戲,研究了半天,搞著搞著就到了天亮,這是第一次。然後在畢業之前,在286上做一個程式。還有一次就是超級解霸上市前,那時公司已吹得很大了,那天晚上沒法睡覺。 一般來說,我也是十二點鐘睡覺,第二天七點就起了。所以說,只有具有正常的生活、正常的節奏,才有正常的心態來做程式設計師,這樣,你的思路才是正常的,只有正常的東西才能長久。搞疲勞戰或者是黑白顛倒,時間長久後就玩不轉了,玩著玩著就不想玩了。 只要你不想玩,不瞭解新技術,你就會落後,一旦落後,你再想追,就很難了