原來的那些問題去哪兒了呢?被少數(shù)造“”輪子的程序員們解決了——那些寫操作系統(tǒng)、編譯器、虛擬機、運行時環(huán)境、框架…等等的程序員們。這個趨勢一直在持續(xù)——新興的rust、golang等語言試圖解決多核時代出現(xiàn)的并發(fā)問題,hadoop、spark、mesos試圖屏蔽分布式系統(tǒng)底層的細節(jié)……可以預見,以后的并行編程和分布式編程門檻將會大大降低。這個過程是必然的,因為一項技術(shù)的發(fā)展,就是為了讓更多的人能更方便的使用它。
而這些計算機工具不能直接應用于業(yè)務,因為計算機不能理解人類的語言,所以就有了大量的程度員存在,把人類的語言“翻譯”成計算機語言。這些程序員是使用“輪子”的。當然這之間并不是非黑即白的,一個軟件在多大程度上可以被稱為輪子,取決于它的復用性。如果一段代碼只能在一個地方使用,它顯然不能稱為輪子。而事實是,大部分為具體的業(yè)務邏輯所寫的代碼,復用程度很低。
對于把通用計算機工具應用到具體業(yè)務這個過程,中間到底有多少問題是技術(shù)性的?大部分技術(shù)困難被操作系統(tǒng)、編譯器、虛擬機解決掉了,剩下的主要是大型軟件(如果這是個大型軟件)的復雜性控制——而這個問題又主要由少數(shù)高級別的架構(gòu)師負責。對于寫具體代碼的程序員,剩下的技術(shù)性困難已經(jīng)很少了。
舉一個我供職過的公司,這是一家互聯(lián)網(wǎng)公司,整個網(wǎng)站99%的代碼是php,基本上沒有java。沒有專門的前端工程師,php、html和javascript代碼混在一起。測試幾乎等于沒有,基本都是開發(fā)人員自測。上線流程只是個形式,質(zhì)量控制部門唯二的作用就是向服務器上同步代碼和出現(xiàn)事故之后給開發(fā)人員定責任。我曾經(jīng)和另一個部門合作,他調(diào)用我提供的接口,而他在我的接口沒上線的時候就上線了,導致一場事故。我本來是算法工程師,寫php只是客串,而在這個過程中,沒有任何上線依賴的控制,連提示也沒有,甚至沒有人對我進行上線流程的培訓。然而,這是一家中等規(guī)模的互聯(lián)網(wǎng)公司,己經(jīng)發(fā)展了十來年,占據(jù)了所在細分市場領(lǐng)域的頭號份額,并且己經(jīng)上市。
我舉這個例子并不是要黑它,而是想用事實支持上面的觀點:大部分程序員,大部分所謂的“科技”公司,所面臨的技術(shù)問題比想象的要少的多(這也許是那家公司沒有CTO的原因)。
這不是個別情況,大多數(shù)公司都存在類似的問題——從技術(shù)角度看,它就是個渣,你會很奇怪它怎么還沒死。然而事實是,它不但沒死,反而活的生機勃勃,甚至上市了。公司的擁有者們早已實現(xiàn)了屌絲逆襲迎娶白富美的理想,而辱罵他們的程序員們還在苦苦的為房貸或者首付掙扎。這里面,有大量的非技術(shù)因素起著關(guān)鍵作用,盡管它們都自稱科技公司。
越來越多的人意識到了技術(shù)的局限性。年初,一個同學找工作,他向來是個“純技術(shù)流”的工程師,曾經(jīng)寫過很好的技術(shù)博客,甚至發(fā)起過開源項目。然而這次他說,“不想再做最底層的工程師了”,希望能做一些“高層的、能看到項目整體的”、以及“和人打交道,能夠把自己的想法向外推動,并產(chǎn)生價值”的工作。于是,他去某公司負責帶幾個小弟去了。當我把這些轉(zhuǎn)述給另一個同學的時候,他的反應是“我最近也有這樣的想法”。還有個同學,說寫了幾年C++,技術(shù)上沒學到多少,反而是接觸的業(yè)務知識比較多。再比如我之前的leader,他是數(shù)學博士出身,曾經(jīng)對算法有一種近乎天真的信仰;在我離職的時候,他已經(jīng)完全轉(zhuǎn)型為業(yè)務和產(chǎn)品導向了。而某個幾年前就開始淡化技術(shù),聚會時大講“軟實力”的同學,早已在BAT做了Team Leader,生活滋潤,終日以跑步為樂。為何?其實原因很簡單:公司里沒有那么多技術(shù)問題需要解決。
《代碼大全》里有個比喻,如果你的問題是給自己的愛犬造一個小窩,那么動手做就是了,如果出了什么錯誤,大不了重做一個,最多浪費一下午的時間。而造一個摩天大樓就不同了。所以,如果寫一份“狗窩”級別的程序,算法、數(shù)據(jù)結(jié)構(gòu)、設計模式這些又有多大意義呢?甚至違反了DRY原則也沒關(guān)系,反正一段代碼也拷貝不了幾次,出了bug就改,大不了重寫一次,最多浪費一下午。而且,說不定這個項目兩周之后就被砍掉了。如果你做的是一份“造狗窩”的工作,就算你有造摩天大樓的技術(shù),和屠龍之技又有什么分別呢?唯一的“好處”就是你會據(jù)此向老板提出更多的加薪要求,以至于老板對你“另眼相看”。