編程已經(jīng)成為了我生命中的一部分
我很享受編程或者閱讀別人代碼過程中帶來的快樂。很多人可能會認為“學”編程學到某個階段就可以毫不費力得閱讀所有的代碼。但是事實是要真的讀懂,尤其是讀懂一個大型項目的代碼,依然要付出一定的努力。
編程是一段需要不斷磨練的不歸路
每學一個新的技能,我們都像是蹣跚學步的孩子。最開始的我們總是笨拙的,不過當我們看到一個專家時只看到的是他成功的樣子,卻忘記了最初他可能和我們一樣的笨拙。
今天就來回顧一下我編程道路上蹣跚學步的樣子,或許對你有一點啟發(fā)。
無知的大學
在這里講大學時候的糗事,不知道會不會被宿舍的哥們暴打。我保證,這絕對是真實的故事。
當年我們進大學的時候,電腦還是個稀罕的奢侈品
當時我啥都不懂,跟著宿舍哥們跑到了中關村攢了人生中第一臺電腦。攢機的小哥溜得不要不要的,分分鐘就把電腦系統(tǒng)裝好。那人盡皆知的草原界面頭一次出現(xiàn)在我的眼前。就這么屁顛屁顛抱著電腦回到了宿舍。沒錯,是抱,還是兩個人抱。一個人抱機箱,一個人抱顯示器,當時的電腦就是這么大。
買的時候是說為了學習,可是買回來后最大的功效是游戲。此處省略三萬八千字。
還是回到編程的話題上來。
你很難想象當時我們作為北郵的學生,編出的第一個程序盡然是這樣的。

這件事我記得特別清楚,因為這時我們宿舍老二在我機器上打出的第一個程序。然后還特意讓我們老大親自運行了一把他的大作。
PS:老二現(xiàn)在在北交是(副?)教授
迷茫的工作
畢業(yè)之后就走上了編程的道路,正式成為了一名程序員。
雖然我很幸運,畢業(yè)就去了一家傳說中非常牛逼的企業(yè),但是這家公司的幾年時間中我并沒有獲得一些實質(zhì)性的成長。
當時我們的項目主要做的是集成性的工作,也就是底層核心的代碼由設備商提供,我們需要做的就是調(diào)用各種不同的接口,來完成各種邏輯,最后實現(xiàn)用戶的需求。
所以在這個過程中,最重要的就是查看各種手冊,確認是否能夠?qū)崿F(xiàn)需求,并且驗證功能。雖然這也是一個技術活,但是我卻覺得不好玩。因為我們根本看不到底層的邏輯是如何實現(xiàn)的,這樣對自己的技術能力的成長并沒有太大的好處。一旦別人的底層邏輯變化了,接口變化了,我們也要跟著變。
也正是基于這樣的原因,我嘗試選擇新的方向。
執(zhí)著的開源
進入開源世界是巧合也不是巧合。
早在學校的時候就聽說過開源,如果沒有記錯當年還在學校里見過Richard Stallman來做過講座。當時覺得一個老大爺,拿著個光盤放頭頂還挺神神叨叨的。后來才知道他是開源界的精神領袖。
自己一直都對開源軟件有著特別的向往,覺得一群牛人在一起盡然能整出這么大的一個動靜,如果有機會自己也一定要參與一下。
很幸運,當年IBM時隔好些年之后又在中國成立開源團隊,我就這么走上了開源軟件的賊船。
PS:當我離開后不久,這個團隊盡然解散了,不禁唏噓。
故事扯遠了,還是說道我編程的經(jīng)歷。在IBM這段日子,是我編程能力大幅提高的時光。當然我要感謝公司,感謝團隊,感謝老板能讓我參與這樣有意義的項目。
在這個過程中,我總結出對一個編程人員成長最為有意義的事情是
獨立分析
剛進入開源世界,我確實有點不適應。因為開源世界的特點就是沒有文檔。之前的工作基本都是分工明確的,我們按照手冊和接口說明調(diào)用即可。但是在開源軟件中,出了代碼只有代碼。想找個人問,還不一定有人能回答。大神們都在網(wǎng)絡上,就算是不排斥你的問題,也得有時間理你。
沒辦法,只好硬著頭皮往下啃??幸惶鞗]結果,就啃兩天。兩天不行就三天。剛開始的時候確實很懵,就跟老師說的一樣。沒有過做成的經(jīng)驗,就不知道究竟能不能成。我想很多學了一點編程,開始會寫一點代碼的,在看到大型項目的時候多少會有點木。因為項目太大,不知道從哪里開始入手。
一開始我也是這樣的。有的文件動輒上千行,連頭都找不到。后來我慢慢形成了自己的一套方法。今天就先講一個。這個辦法其實也很土,就是拆分??吹烬嫶蟮暮瘮?shù),根本分不清這個函數(shù)什么功能的時候,我就把函數(shù)中被調(diào)用的函數(shù)列出,先去理解被調(diào)用的函數(shù)。如果被調(diào)用的函數(shù)還是不懂,就再進一層去看。這樣就形成了一個遞歸??倳龅阶罨镜?,能夠理解的函數(shù)或者定義,然后再反推。這個方法確實土,不過對我來說很管用。在這個過程中,我對代碼,對整個項目的理解變得更加深入。
就這么類似于王強一日十字的速度,把整個模塊啃了下來。最后啃完后那暢快淋漓,豁然開朗,并不亞于看一本優(yōu)美小說。
這里我再補充一點,大家很可能會覺得在這段日子中每天都是痛苦的。確實,在沒有理清所有細節(jié)時心里總會有牽掛。但是我想用陶淵明的一句話來形容可能更為貼切。
好讀書,不求甚解;每有會意,便欣然忘食。
雖然這個過程中都處于似懂非懂的狀態(tài),但每天都會多懂那么一點點。這種感覺陶淵明先生形容的非常生動。
從此以后我就好像進入了另一個境界。
不知道是我穿透了代碼,還是代碼穿透了我
回頭來看
大致這么回顧,我的編程經(jīng)歷基本上經(jīng)歷了這么三個階段
- 幾乎是一無所知
- 一定的使用能力
- 無師的自學能力
可以看到,大家可能和我一樣,在初期對編程是一無所知的。能寫出的代碼就像那個“傻”一樣的醒目。在這里,需要的最少必要知識是一定的語法和簡單的運行操作。
而經(jīng)過一定的學習,掌握了基本的技能,我們就可以勝任日常的工作了。就像文中說的,這里的最少必要知識是對接口文檔的理解和運用。
然而要再往下繼續(xù)走一層則需要付出更多時間和耐心。在這里就是不斷的實踐、總結、再實踐。
記得一位鋼琴老師曾經(jīng)說過,鋼琴其實沒有大家想象這么難,鋼琴的入門相對于其它的樂器可能要更簡單一些。但是真的要練好剛琴,要展現(xiàn)鋼琴自身的魅力則需要花費更多的時間和耐心。
這點和學習編程我覺得是一模一樣的。要成為大師不容易,要彈一首簡單的生日快樂并沒有想象的那么難。