公司里曾在北美作為產品研發(fā)經理的資深人物某日和我閑聊,說到中美程序員的差別,北美的程序員,尤其是發(fā)明那些根本性東西比如JAVA, 比如Message機制,用得都是非常簡單的辦法,一方面,英語作為母語,與程序設計語言更加靠近,比中國的象形文字來的近,另一方面,這些北美的程序員似乎都深諳大道至簡的道理,代碼都寫得很簡單,當然問題的思維方式更為系統(tǒng)。相對的來說,國內的技術人員總是習慣把問題復雜化,不僅理解問題復雜化,解法也復雜,有時正是因為沒有理解核心代碼的設計,反而使得解法更加背道而馳。 《代碼之美》這本書,剛好給了一些關于北美(但不限于)的頂級程序員的例子,與其說它是講代碼之美,到不如說是講他們的思維方式,我們甚至可以窺見他們的價值觀,個人的體會是,這本書里面的頂級程序員們體現(xiàn)了以一系列思維習慣值得國內同行參考:
第一:非常認真全面的研究問題/客戶需求,比如在為霍金開發(fā)只用一個按鈕的交互軟件時,他們很快意識到按鈕不止表達01,按扭的時長可以成為一種模擬輸入,從而為長按和短按分別設計更細化的選項,由此簡化了后面的設計。
第二:總是希望用一個個案抽象一種模型,并用于更大的范圍,前面的程序可以服務給盲人,Google著名的MapReduce算法開始用于統(tǒng)計百萬億網頁上的詞頻率,后來用于所有分布式環(huán)境
第三:永遠尋求簡單的方式來解決問題,不過有個技巧,就是可以把復雜的難題恰當?shù)姆指?。MapReduce算法體現(xiàn)了一種簡約之美,如同我們常講的中間件,屏蔽一切分布式,普通的程序員都可以依靠MapReduce和GFS來寫用于上千臺機器的分布式應用。 在另一章開源ERP5的項目中,復雜的ERP項目的一級類僅有五個,Resouce, Node, Path, Movement, Item, 這些概念加上Order和Delivery的業(yè)務基本項構成了基礎業(yè)務模型,這個設計思維有點像說宇宙是四大元素組成的。 另一個不錯的案例來自Linux內核小組關于驅動的研究。 這個模型的抽象能力的缺乏,估計是中國工程師的軟肋,也是思維復雜化的原因。硅谷軟件人才IC(India/China)比比皆是,但能夠定義軟件行業(yè)的,還都是白人?;蛟S,這個刪繁入簡的抽象能力,早在中國人學語文的時候被虛情假意的形容詞淹沒了。
第四:對于技術難題的靈感需要等待,從這本書看起來,軟件天才是不存在的,幾位頂級程序員都遇到一籌莫展的問題,有些幾個月也沒有解法,有的是某次喝咖啡的靈光一閃,或者干脆關鍵的程序都是在喜馬拉雅山下的山村寫的。
第五:他們都懷有程序改變世界的信心,在關于安全通訊的一章結尾,作者深信他們對于世界的民主化在做貢獻,在他們看來:人類文明的代碼,越來越需要程序員對其進行重新編程,然后重新接入社會這個操作系統(tǒng)中。比如,基因序列分析,商業(yè)軟件,計算機建模,更不要說互聯(lián)網上的多次革命,Email, Blog, SNS, VoIP。
這下理解為什么Google敢于對抗各國政府。
PS:但是對抗不了中國政府啊。