評(píng)價(jià)一個(gè)人是有很多維度的,有些程序員可能編碼平庸,但在商業(yè)上取得了更大的成功,這同樣是一種成功。但是這里就事論事,只評(píng)價(jià)其在工程領(lǐng)域取得的成績(jī)。我的評(píng)價(jià)標(biāo)準(zhǔn)是 “大神級(jí)” 程序員是要有公開或者可考證的作品的,不依賴于其在其它領(lǐng)域取得的成就。因?yàn)?“大神級(jí)” 不是一個(gè)很嚴(yán)肅的稱呼,后面統(tǒng)稱為系統(tǒng)級(jí)程序員。
軟件工程最本質(zhì)的東西是關(guān)于復(fù)雜性的調(diào)控 -- Tame the complexity。如何獨(dú)立駕馭一個(gè)大型軟件的開發(fā)是一個(gè)有經(jīng)驗(yàn)工程師再進(jìn)一步,所要跨越最大的門檻。 事實(shí)上絕大部分系統(tǒng)軟件一開始的架構(gòu)也都是一兩個(gè)人主導(dǎo)的。很多工程師大部分職業(yè)生涯是參與商業(yè)軟件的某個(gè)模塊的具體研發(fā),或者把不同的組件粘合起來, 沒有機(jī)會(huì)獨(dú)立架構(gòu)某個(gè)系統(tǒng)級(jí)軟件。所以從這個(gè)角度來說,是某些程序員自身獨(dú)特的經(jīng)歷造就了自己知識(shí)的跨越, 成為了系統(tǒng)級(jí)程序員。
我所在的領(lǐng)域主要是程序語言領(lǐng)域,日常有幸和OCaml, Hack, Infer, Flow,Skip, React 這些項(xiàng)目的創(chuàng)始人近距離接觸過。自己架構(gòu)過兩個(gè)大型軟件: 一個(gè)是 Fan 宏編程系統(tǒng) (沒有能商業(yè)化),還有一個(gè)是 ReScript 語言。
可能從事的是基礎(chǔ)軟件研發(fā),我發(fā)現(xiàn)他們無一例外的基本功非常扎實(shí),而且涉獵面很廣。像OCaml的作者Xavier Leory涉獵之廣令人嘆服,他的主頁是這樣寫的 “I'm a senior computer scientist interested in all scientific aspects of computer programming.”。事實(shí)也確實(shí)是這樣,他不僅對(duì)編譯器造詣很深,還寫過第一個(gè)版本的pthreads,對(duì)密碼學(xué)有很好的insight,formal verification方面也著作頗豐。
與普通程序員一個(gè)更顯著的區(qū)別是,在系統(tǒng)級(jí)程序員眼里,所有的依賴都不是黑盒,都是可以根據(jù)需求修改的。比如我需要調(diào)試一個(gè)內(nèi)存的bug, 直接修改GC, walk through GC roots看下什么情況。或是標(biāo)準(zhǔn)庫里某個(gè)數(shù)據(jù)結(jié)構(gòu)不夠高效,自己直接手寫一個(gè),這種情況非常常見。
我自己當(dāng)時(shí)在給ReScript找一個(gè)快速的構(gòu)建系統(tǒng),當(dāng)時(shí)市面上最快的是Ninja, 但是還是達(dá)不到自己的預(yù)期, 就直接動(dòng)手去修改了很多代碼,最后大概快了50%。
這個(gè)可能和我們常說的軟件工程模塊化有違背,但是真正要做到極致的性能,整個(gè)軟件棧是不應(yīng)該有黑盒的。我感覺這一塊也是國內(nèi)和國外的主要差距,回國的時(shí)候發(fā)現(xiàn)在國內(nèi)一些一線大廠,GCC被當(dāng)作是一個(gè)黑盒 而沒有深入訂制。很多技術(shù)大會(huì)大部分停留在如何更好的使用已有的技術(shù), 這時(shí)候應(yīng)該再進(jìn)一步,研究如何直接創(chuàng)造更好的技術(shù), dream high。
Hack項(xiàng)目的創(chuàng)始人在Hack大獲成功之后又搞了個(gè)skip lang的項(xiàng)目, 但是沒有獲得成功,最后被解散了。他離職以后,我跟他視頻過一次,他說自己獨(dú)立雇傭了個(gè)合伙人繼續(xù)skip的開發(fā),這很好的詮釋了什么叫發(fā)自內(nèi)心的熱愛。
系統(tǒng)級(jí)的程序員大多是self motivated, 只是單純的覺得這個(gè)東西很有意思,并沒有太多的想法。我當(dāng)時(shí)開始ReScript這個(gè)項(xiàng)目也是覺得這個(gè)東西很好玩,并沒有想到它以后會(huì)被很多商業(yè)公司用到。
還有一點(diǎn)體會(huì)比較深的是我們目標(biāo)要定的比自己的能力高那么一點(diǎn)。如果一個(gè)項(xiàng)目從規(guī)劃一開始就知道能做出來或者已經(jīng)有人做過了, 那反而沒有什么意思了。一個(gè)項(xiàng)目沒有人做并不一定代表它很難,回答里面提到Bill Joy寫了VI編輯器?這東西 真的很難嗎,恐怕未必,難得是他第一個(gè)去實(shí)現(xiàn)了這個(gè)未知的東西。
就像孫子兵法里說的 "取法乎上,僅得其中, 取法乎中,僅得其下;取法乎下,無所得矣!" 軟件工程相比于數(shù)學(xué)或者其它自然學(xué)科還是一個(gè)比較簡(jiǎn)單的學(xué)科,只要野心足夠大,很多情況是能做出來點(diǎn)東西的。
![]() |