有這么一種觀點(diǎn):程序員要想提高技術(shù)水平,多讀開源代碼、多參與社區(qū)討論與開發(fā)好了。我以前很贊同,現(xiàn)在發(fā)現(xiàn)不是這樣。
panpan和xuhui對(duì)我的批評(píng)是,多看看技術(shù)以外的東西。我的理解是這樣,很多東西它之所以這么做,不是因?yàn)榧夹g(shù)上是優(yōu)的,而是因?yàn)楣て、領(lǐng)導(dǎo)的旨意、需求變更留下的歷史問題等等。這些原因是無法通過閱讀代碼而得知的,我只能看到實(shí)現(xiàn)細(xì)節(jié),卻不能知道作者的設(shè)計(jì)意圖。像Qt、 leveldb這樣的項(xiàng)目,名為開源,但是它并沒有采用開放式的開發(fā)。只是這個(gè)公司將其技術(shù)成果共享出來了而已,中間的過程完全不可得知。舉個(gè)例子,Nokia和Intel說要合伙做一個(gè)叫Meego的操作系統(tǒng)。Intel說好啊,我對(duì)Linux熟,我來優(yōu)化底層系統(tǒng),Nokia你來搞QT及上層軟件。結(jié)果Intel很郁悶的發(fā)現(xiàn),Nokia的Meego項(xiàng)目組有兩套BUG管理系統(tǒng),一套是對(duì)內(nèi)的,只有Nokia自己的員工可以訪問(intel的不行),一套是對(duì)外的,放在社區(qū)里讓任何人都可以去提BUG。然后Intel怒了,你這讓我們?cè)趺春献?Nokia也很委屈,因?yàn)閷?duì)任何一個(gè)手機(jī)廠商來說,未上市的手機(jī)的硬件細(xì)節(jié)是很重要的商業(yè)機(jī)密,這些東西很容易通過BUG管理系統(tǒng)中的日志文件和coredump流露出來。所以,大多數(shù)軟件廠商終選擇的都是Nokia這樣的做法。
很多時(shí)候要想清楚自己的目的,是讓項(xiàng)目盡快完工,還是追求純技術(shù)?如果是后者,不如老老實(shí)實(shí)在學(xué);蛘哐芯克糁。做項(xiàng)目重要的不是解決一個(gè)多么大的技術(shù)問題,而是盡可能的把所有技術(shù)困難都繞開,然后再解決那些不得不解決的。這時(shí)便會(huì)引申出一個(gè)重要原則:Simple is the best。
讀代碼跟讀小說不一樣。寫小說的人心里一定是有讀者在的。所以每拿起一本古典小說的時(shí)候,仿佛穿越了時(shí)空在跟一個(gè)已經(jīng)死去的人對(duì)話。而代碼不一樣,代碼主要還是給機(jī)器讀的,以及給自己讀。舉個(gè)例子,如果你對(duì)C++的模板推導(dǎo)很擅長,你會(huì)因?yàn)檫@門技術(shù)太晦澀,有人有可能看不懂,而不用嗎?所以如果想通過代碼猜透作者的設(shè)計(jì)企圖,不管能不能做到,總之為其花費(fèi)的代價(jià)實(shí)在是太高。那么有別的方法嗎? 有啊! 跳到這個(gè)公司去,中午跟作者一起吃個(gè)飯,隨便套兩句,出來了。
對(duì)我自己來說,很有幸能在的互聯(lián)網(wǎng)公司工作。如果我想去百度、騰迅、阿里中的任何一家,應(yīng)該都是有機(jī)會(huì)的。所以,總有比我的老員工,如果有幸遇到一個(gè)比較開明的,跟著這樣的人做項(xiàng)目,會(huì)學(xué)到很多從開源項(xiàng)目、從書本學(xué)不到的東西。
這些,大概是我跟1年前之比的轉(zhuǎn)變吧。