程序員,你能真正掌握多少編程技術(shù)?
我總能看到一些公司在招聘廣告里這樣描述他們的崗位要求:“有豐富的從零開始構(gòu)建iOS及Android應(yīng)用的經(jīng)驗;精通移動及 Web 技術(shù),包括 Java、HTML5、CSS3、JavaScript 和 AJAX。“
(可世上根本)沒有這樣的人:一個人只能真正精通一個(技術(shù)方向),而在其他方向上技術(shù)平平。你也可以在精通一門技術(shù)后轉(zhuǎn)而鉆研另一種技術(shù),(但這會讓你很快)忘掉前者的很多細節(jié)。這樣或許已經(jīng)足夠讓你輕松唬住很多人,讓他們認為你無所不能、無所不曉——但真遇上棘手的問題,你也只能靠運氣了。
今時不同往日,當(dāng)代任何一個主流領(lǐng)域的技術(shù)都相當(dāng)復(fù)雜,并且不斷地變化,需要人投入大量時間。只是利用業(yè)余時間學(xué)習(xí)的話,連保持跟進某個技術(shù)領(lǐng)域的最新動態(tài)都很困難,更不用說從零開始“精通”這項技術(shù)了。因此,只有參與一個真實的項目才能讓你真正學(xué)習(xí)一套新的(技術(shù))環(huán)境。而能夠同時參與開發(fā)大型原生 Android、iOS 應(yīng)用以及響應(yīng)式 Web 客戶端程序的又有多少人?
在過去 34 年的程序員生涯里,我很少同時在多個技術(shù)領(lǐng)域上工作。我的第一份工作是在 Supermini 上開發(fā),后來用 Apple 寫 6502 匯編、在PC 上寫 Pascal,我的兩個創(chuàng)業(yè)公司的開發(fā)環(huán)境都是 Mac 和 C。在為別的公司(包括 Apple)工作時, 我先后用過 C、一點 C++、Objective-C/WebObjects, 然后轉(zhuǎn)向基于 Java 的 Web 前后端開發(fā)(但很少同時開發(fā)這兩者)。再后來,我寫了一些 JavaScript,做過基于 C++ 的游戲編程, 最后,就是我現(xiàn)在做的: Objective-C 和 iOS。為了掌握各種新知識,這中間的每次技術(shù)轉(zhuǎn)變我都花了幾年時間一邊做一邊進行大量的學(xué)習(xí)。
如果出于某些原因,有人真的能夠同時精通 Android 和 iOS,甚至是 Web ,那么作為一個真正的全才,我想他的期望薪酬會遠遠高出多數(shù)公司愿意給出的價格:公司實際上只想以最低的工資水平招幾個“什么都能做”的人以節(jié)約成本。我至今無法理解有人能夠同時成為許多方面的專家,以及他們怎么能同時掌握不同的技術(shù)、開發(fā)不同平臺的應(yīng)用并與時俱進。我認識一些才華橫溢的人,但我不記得有哪一個能夠像耍雜耍一樣將多種技術(shù)玩弄于股掌之上,并開發(fā)出能體現(xiàn)精湛技藝的應(yīng)用。
好吧,可能會有一些例外吧,但是我始終認為多數(shù)人做不到這一點。一個人固然能先精通一種技能,然后再嘗試精通另一個,但這個過程中必然會忘記很多前面的知識。去年我有幾個月無所事事,等著被公司解雇(公司所有的技術(shù)都早已經(jīng)落伍被替代了,他們開始把整個品牌打折出售,所以顯然我的下崗也只是早晚的問題)。我花了一個月做了一些 C++ 開發(fā),然后是 Node.js, 最后還搞了一段時間 Swift。今年再回顧這些學(xué)過的技術(shù)時(我的新工作用的是 Objective-C),我發(fā)現(xiàn)我已經(jīng)忘了之前學(xué)到的大多數(shù)內(nèi)容。如果不是經(jīng)常使用的東西,肯定會很快被忘到腦后。當(dāng)我用 PHP 重新搭建我現(xiàn)在這個博客系統(tǒng)時,我掌握過的各種語言在我腦袋里全都糊成了一片。
如果你用過 Objective-C、然后使用 Swift 做 iOS 開發(fā)的話,那至少兩者還有一部分重疊。不過 Android 開發(fā)跟 iOS 相比可不僅僅只是另一種語言的差別了:你需要掌握完全不同的開發(fā)工具、布局方法,以及如何支持多個版本的操作系統(tǒng),并兼容 24000 多種安卓設(shè)備。另一方面,單單要跟上今年六月 WWDC 里發(fā)布的新變化就要花很大的功夫,Apple 發(fā)布的示例代碼并不兼容最新 beta 版的 Xcode 更是雪上加霜。 就算你能不寫代碼,每天能看完最新的視頻、讀完最新的文檔和示例代碼,不過這樣你又哪來的勇氣稱自己是個專家呢?
除了安卓和 iOS 這兩個截然不同的復(fù)雜移動開發(fā)環(huán)境,現(xiàn)在的 Web 開發(fā)也添了不少亂,尤其是此起彼伏層出不窮的各種 JavaScript 框架, 要跟隨它們的變化真得有三頭六臂才行。而且從跟我共事過的 JavaScript 程序員來看,他們甚至連一個框架的變化都跟不上(嗯,我說的就是 AngularJS)。
所以如果你找到這樣一個人選,他/她:iOS 和 Android 開發(fā)不在話下、JS 桌面/移動端 Web 編程小菜一碟;熟練運用現(xiàn)代風(fēng)格的 API 又能兼容各個老版本 OS,各種 UI 設(shè)計方式優(yōu)劣如數(shù)家珍,諸多瀏覽器特性及安卓設(shè)備特例了然于胸,還總能以破紀錄的時間交付無 Bug 的產(chǎn)品…那你就真的賺大了——對了,他應(yīng)該還愿意以低于市場價為你工作。
回想我開始編程那會,一切都原始而簡單。我只需要掌握一種語言,一種操作系統(tǒng),而不需要任何框架。即使在我的兩家初創(chuàng)公司,我也只需要掌握 C 語言,了解 Macintosh 和偶爾的一些 68K 匯編。時代變了,但我們還是只有一個并不遵循摩爾定律、也沒法升級的大腦。
最后,假如你能(真正的)同時做 Android、iOS 和移動 Web 開發(fā),并寫出大師級的作品的話,我要向你致敬!當(dāng)然同時,我也希望你也能拿到你應(yīng)得的三倍酬勞。