不思進(jìn)取的程序員不是好的程序員。無(wú)數(shù)的開(kāi)發(fā)者都?jí)粝胫梢约尤?Google、Facebook、Apple、BAT 這樣的大公司,的確,能夠在數(shù)一數(shù)二的互聯(lián)網(wǎng)公司工作確實(shí)很酷。但是,作為一名開(kāi)發(fā)者,如果能夠打敗 Google、BAT,那豈不是更酷?不過(guò)想要做到這一點(diǎn)很不容易,因?yàn)槟阈枰牟粌H僅是計(jì)算機(jī)相關(guān)知識(shí)。
那么怎么才能打敗 Google、BAT 呢?除了掌握編碼知識(shí),又需要了解哪些內(nèi)容呢?接下來(lái)我們?yōu)槟阋灰唤視源鸢福@篇文章比較長(zhǎng),閱讀需一定的耐心,即使如此,但個(gè)人認(rèn)為也極具借鑒意義。
第一步,成為一名入門(mén)級(jí)的 efficiencer。
何為 Efficiencer?
Efficiencer 是一個(gè)新的詞匯,源于我自己創(chuàng)造,用來(lái)描述那些我認(rèn)為更有商業(yè)頭腦,更能自主的軟件開(kāi)發(fā)者。
簡(jiǎn)而言之,Efficiencer 與程序員是有一定區(qū)別的。程序員主要工作是根據(jù)軟件需求和規(guī)范編寫(xiě)代碼。而 Efficiencer 重在解決問(wèn)題。以下的案例希望可以幫助你更好地理解兩者的區(qū)別:
你去找一個(gè)程序員,說(shuō):“我需要一個(gè) ASP MVC 網(wǎng)站,在后臺(tái)使用 Entity Framework、.NET 和 SQL Server。” 程序員說(shuō):“好的,老板,把線框圖給我,我馬上開(kāi)始寫(xiě)代碼。”
你去找一個(gè) Efficiencer,說(shuō):“目前我們公司采用電話的方式下單,而我們公司的網(wǎng)站僅僅是一個(gè)展示性的頁(yè)面。我不懂技術(shù)細(xì)節(jié),但我希望客戶可以 24 小時(shí)的通過(guò)我們的網(wǎng)站進(jìn)行下單,我想要你幫助我實(shí)現(xiàn)這樣的功能,以便我們跟上競(jìng)爭(zhēng)對(duì)手的腳步。” Efficiencer 說(shuō):“我?guī)椭撕芏嘞衲氵@樣的企業(yè)實(shí)現(xiàn)自動(dòng)化訂購(gòu)流程,所以不用擔(dān)心,我會(huì)確保你的網(wǎng)站不僅可以與競(jìng)爭(zhēng)對(duì)手競(jìng)爭(zhēng),而且還會(huì)超越競(jìng)爭(zhēng)對(duì)手。”
基于此,你看出兩者的差別了嗎?哪一種專業(yè)人員是需要被老板管理,哪一種可以自己直接當(dāng)老板?
入門(mén)級(jí) Efficiencer 的難題
在未來(lái)的編程世界里,軟件開(kāi)發(fā)人員并非是行業(yè)中最不重要的人。曾經(jīng)我提出了一個(gè)關(guān)于未來(lái)的構(gòu)想,在這個(gè)構(gòu)想中,由 Efficiencer 組成的公司架構(gòu)上類似律師事務(wù)所,他們負(fù)責(zé)將項(xiàng)目管理(狀態(tài)報(bào)告和時(shí)間表協(xié)調(diào))委托給下屬,而不是上級(jí)。
這已經(jīng)引起了很多人的共鳴。人們普遍喜歡這個(gè)構(gòu)想,但入門(mén)級(jí)的 Efficiencer 面臨的阻礙是什么呢?
短期到中期的職業(yè)生涯規(guī)劃
有關(guān) Efficiencer 職業(yè)規(guī)劃需注意以下幾點(diǎn):
跳過(guò)大量的編程理論和書(shū)籍,因?yàn)檫@種學(xué)習(xí)方式效率很低。
用盡所有辦法讓自己開(kāi)始進(jìn)行編程實(shí)戰(zhàn)(新兵訓(xùn)練營(yíng)、橫向過(guò)渡、自學(xué),或者其他途徑)。
花 2-4 年的時(shí)間擔(dān)任公司程序員,盡可能多的做項(xiàng)目,從項(xiàng)目中提升自己。程序員和醫(yī)生有些類似,需要不斷從項(xiàng)目中學(xué)習(xí),活到老學(xué)到老。
辭去現(xiàn)有的編碼工作,成為一個(gè)實(shí)際的 Efficiencer,因?yàn)?2 - 4 年時(shí)間足夠你掌握某一領(lǐng)域的編程技能。在你重新就業(yè)之后,你應(yīng)該開(kāi)始專注于你的特殊專長(zhǎng),并提升你的個(gè)人品牌、職業(yè)規(guī)劃、商務(wù)能力。
以上,很多人會(huì)有爭(zhēng)議,畢竟 2 - 4 年的編程經(jīng)歷只能勉強(qiáng)入門(mén)而已,怎么會(huì)達(dá)到高級(jí)水平?接下來(lái),我將一一來(lái)解釋。
先發(fā)制人的辯護(hù)之路
我是一個(gè)達(dá)克效應(yīng)(認(rèn)知偏差,能力越低的人越容易產(chǎn)生對(duì)自己過(guò)高的評(píng)價(jià),而能力越高的人則傾向于低估自己的能力)中所說(shuō)的白癡嗎?當(dāng)然,在反對(duì)者的眼里我的確是白癡。現(xiàn)在我們先不討論達(dá)克效應(yīng),我先介紹一些我自己。
我的背景
雖然我可能是一個(gè)白癡,但在我所說(shuō)的 2 - 4 年的時(shí)間里,我活得明明白白。如果我說(shuō)你在提升開(kāi)發(fā)技能上花費(fèi)的時(shí)間的培訓(xùn)大多數(shù)都是浪費(fèi)的,那么你一定感覺(jué)到自己被冒犯。
換句話說(shuō):
學(xué)位不錯(cuò),但很久以前我就已經(jīng)拿到了,自然愿景也變了。
自從我停止當(dāng)一名領(lǐng)死工資的程序員以來(lái),我的收入增加了一倍多。
我發(fā)現(xiàn)教會(huì)別人編程比編程本身更有價(jià)值。
有些公司在面試時(shí)把 R-Tree 看得比什么都重要,對(duì)于這類公司我會(huì)毫不猶豫地拒絕。
我離開(kāi)了我前文中提到的那家公司,這家公司采用非循環(huán)圖表,并在不久之后關(guān)閉了整個(gè)產(chǎn)品線(并破產(chǎn)了)。
之后,我擁有一個(gè)非常好的生活方式和極大的自主權(quán)。
我提到所有這一切只是為了證明我既沒(méi)有酸葡萄心理,也不是紙上談兵。接下來(lái),先不說(shuō)我,我們來(lái)談?wù)?Google 的 Jill 吧。
編程技巧對(duì)你的收入影響不大
為了加強(qiáng)我關(guān)于程序員技能邊際收益遞減的假設(shè),讓我們以一個(gè)名為 Jill 的程序員舉例。Jill 是一位真正的程序大牛,她是一名以一敵十的程序員。她加入 Google 之后讓 Google 里面那些大牛都黯然失色。
我想 Jill 應(yīng)當(dāng)算是一個(gè)以一敵千的程序員。她真的非常出色,當(dāng)她厭倦了 git 命令行的笨拙時(shí),自學(xué)成才,并且從頭開(kāi)始用匯編語(yǔ)言編寫(xiě)了一個(gè) Linux shell,其中每個(gè) git 命令參數(shù)排列都是單個(gè)字符。她是世界上最有趣的程序員,并且她在 Google 工作。
那么她在 Google 做什么呢?她負(fù)責(zé)優(yōu)化網(wǎng)絡(luò)搜索引擎的速度。她精通計(jì)算機(jī)基礎(chǔ)知識(shí)、緩存失效、異步編程、分布式系統(tǒng),能夠?qū)⑺阉鲿r(shí)間優(yōu)化到納秒級(jí)。
這為谷歌帶來(lái)了多少價(jià)值呢?因?yàn)?Jill 的存在,使得 Google 在搜索方面幾乎壟斷了市場(chǎng)。Jill 為 Google 帶來(lái)數(shù)十億美元的收入。
那么 Google 給 Jill 支付的薪水是多少呢? 大概每年 20 萬(wàn)美元。
當(dāng)然 Google 會(huì)支付她更多,但是你懂得,這也需要遵守制定好的薪酬體系。你不能比你的經(jīng)理拿得更多。因此,Jill 為 Google 賺了數(shù)十億美元,然而每年在 15 萬(wàn)美元(Google 軟件工程師標(biāo)準(zhǔn)薪資)的基礎(chǔ)之上僅僅多獲得 5 萬(wàn)美元。在山景城總部,這僅僅意味著她的住所可以從一個(gè)標(biāo)間換成一套。
編程技巧對(duì)你的公司影響不大
或許,你會(huì)對(duì) Jill 這種不公平的事情充滿了不滿。她為 Google 創(chuàng)造了數(shù)十億美元的收入,但是自己每年僅僅多得 5 萬(wàn)美元。但是,說(shuō)實(shí)話,他們應(yīng)該付給她多少呢?
他們應(yīng)該每年支付她一百萬(wàn)嗎?如果他們真的想這樣做,可以找到人力資源部門(mén)并調(diào)整薪酬體系。但是這樣做會(huì)提醒像微軟這樣的競(jìng)爭(zhēng)對(duì)手她的重要性。
當(dāng)然,她可以自主創(chuàng)業(yè)。她可以從 Google 中脫穎而出,開(kāi)始構(gòu)建自己的搜索引擎,但是 Jill 不再是程序員了。她變成了一個(gè) efficiencer,專門(mén)研究快速搜索技術(shù)。而她的算法在產(chǎn)品化,市場(chǎng)化,獲得資金之后才有價(jià)值,然后找到一種方式進(jìn)入市場(chǎng)。懷著一顆成為巨頭的心,但是卻面臨著殘酷的競(jìng)爭(zhēng)。
回到主題,Jill 在 Google 的卓越貢獻(xiàn)真的值得嗎?如果她幸運(yùn)的話,每年價(jià)值也僅比他人多 5 萬(wàn)美元。
你知道為什么嗎?因?yàn)閮H僅擅長(zhǎng)編程的價(jià)值是不高的。
Jill 是不過(guò)是一個(gè)假設(shè),沒(méi)有能夠以一敵千的程序員,也沒(méi)有能夠獨(dú)自一人完成搜索引擎的“愛(ài)因斯坦”存在。Jill 的案例大大夸大了程序員的價(jià)值。在現(xiàn)實(shí)世界里,Jill 不過(guò)是一位比普通人優(yōu)秀一點(diǎn)的程序員,和 Google 大部分程序員相比,她可能也就是在編程方面比較出色。
關(guān)于編程技巧的玩笑
當(dāng)我回顧自己的編程生涯時(shí),我想我學(xué)過(guò)的編程語(yǔ)言都數(shù)不過(guò)來(lái)了。
曾經(jīng)有一段時(shí)間我深信自己掌握多門(mén)語(yǔ)言會(huì)使自己成為一名優(yōu)秀的程序員。我最早使用 C ++ ,后來(lái)使用一門(mén)叫做 ML 的函數(shù)式語(yǔ)言,然后是 Perl、PHP、C、C#、Java、Python、VB,還有一些我不記得的編程語(yǔ)言,并且我都學(xué)得還不錯(cuò)。考慮諸多語(yǔ)言的特性,理解類型和泛型,權(quán)衡多重繼承的利弊。..。..所有這一切都是超級(jí)重要的。這使我成為一個(gè)真正的、全面的、專業(yè)的程序員。
人們總是喜歡重視和敘述自己的經(jīng)驗(yàn)。是的,我常常告訴自己:沒(méi)有 10 種不同編程語(yǔ)言的涉獵,我就不可能寫(xiě)出一些好的業(yè)務(wù)應(yīng)用程序。當(dāng)然,我可以寫(xiě),但我不會(huì)寫(xiě)得太好。維護(hù)起來(lái)會(huì)稍微困難一點(diǎn),用戶的成本會(huì)更高。
邊際收益遞減
你越多學(xué)習(xí)一門(mén)編程語(yǔ)言就越能使你成為一個(gè)更好的程序員嗎?當(dāng)然,它的確如此。但是在這篇文章的剩余部分會(huì)貫穿一個(gè)術(shù)語(yǔ):邊際收益遞減。我們常常認(rèn)為學(xué)習(xí)每個(gè)語(yǔ)言、框架等等是非常重要的,但這并不一定能夠提升我們的編程技能。
實(shí)際上,新的語(yǔ)言和框架并沒(méi)有我們認(rèn)為的那么重要。它們不過(guò)是時(shí)代的趨勢(shì)。
正如我前文所說(shuō),我最早進(jìn)入軟件行業(yè)時(shí)使用 C ++。但是,C++ 無(wú)法作為一個(gè)企業(yè)級(jí) Web 語(yǔ)言,因此我學(xué)習(xí)了 Java。持續(xù)了一段時(shí)間之后我進(jìn)入了一家使用 .NET 的公司,在那里我又學(xué)習(xí)了 C#。多年來(lái),我并不是為了追求新奇的技術(shù)而選擇學(xué)習(xí)多個(gè)語(yǔ)言和框架。而是為了跟上時(shí)代的步伐,以免公司招聘一個(gè)只有我一半工資的應(yīng)屆畢業(yè)生來(lái)替代我。
隨著我們?cè)谶@個(gè)行業(yè)中年齡的增長(zhǎng),發(fā)現(xiàn)企業(yè)有使用“年輕”程序員淘汰大齡程序員的想法。這是非常糟糕的想法。我們對(duì)此進(jìn)行抗議:“新人編寫(xiě)的代碼充滿 bug,而像我們這樣的經(jīng)驗(yàn)豐富的大齡程序員編寫(xiě)的代碼更加優(yōu)雅和穩(wěn)定!” 我們把掌握多個(gè)編程語(yǔ)言的豐富經(jīng)驗(yàn)敘述為一種優(yōu)點(diǎn),讓雇主相信自己的價(jià)值。也讓自己更加安心。
但是,我們所有這些多個(gè)不同語(yǔ)言的經(jīng)驗(yàn)價(jià)值并不高。實(shí)際上,我們面對(duì)新的編程語(yǔ)言和框架,大多數(shù)人差不多都只有一兩年的經(jīng)驗(yàn)。
編程技能的實(shí)際價(jià)值
如果本文就在此處終止了,那么一定是令讀者沮喪的。我要繼續(xù)論證自己的 efficiencer 理論:你只需要2 - 4年的時(shí)間或者編程經(jīng)驗(yàn),然后你就可以開(kāi)始利用常規(guī)編程以外的經(jīng)驗(yàn)。
還記住我所說(shuō)的邊際收益嗎?大體上這是行業(yè)在編程技能方面的邊際收益。如上圖所示,我用紅色部分來(lái)表示一個(gè)初級(jí)編程在行業(yè)中占有的比例和創(chuàng)造的價(jià)值。我估計(jì)它差不多占一半左右,雖然這樣的程序?qū)懙梅浅T愀狻H绻?xì)分的話,情況如下:
市面上的初級(jí)程序(紅色)占比 50%。
加上稍好一些的程序(橙色),可以達(dá)到 75%。
如果加上更好一些的程序(黃色),那么可以高達(dá) 90%,這將帶給你一個(gè)高度可維護(hù)的領(lǐng)域。
如果程序非常出色(綠色),則可達(dá)到 95%。
加上最后的5%(藍(lán)色)可以提高到 100%,來(lái)自 Jill 這樣的大牛。
以上數(shù)據(jù)雖然并不是絕對(duì)的準(zhǔn)確,但是你可以推斷沒(méi)有經(jīng)驗(yàn)的開(kāi)發(fā)者編寫(xiě)代碼的指數(shù)倍增。市面上所有軟件中有一半是由經(jīng)驗(yàn)不多的人編寫(xiě)的。而且,盡管如此,依然在繼續(xù)。
這是什么意思呢?這意味著從初級(jí)程序開(kāi)始然后試圖將其提升是有商機(jī)的。
編程技巧的價(jià)值遞減
我剛剛概述的是一個(gè)基準(zhǔn)。從敏捷開(kāi)發(fā)的角度來(lái)看實(shí)際上它可能有些不準(zhǔn)確。
為什么呢?敏捷開(kāi)發(fā)的目標(biāo)是為應(yīng)用開(kāi)發(fā)商降低風(fēng)險(xiǎn)。如何降低風(fēng)險(xiǎn)?這意味著找到一種方法來(lái)幫助企業(yè)讓有限的人才庫(kù)中的初級(jí)開(kāi)發(fā)人員做更多的事情。敏捷開(kāi)發(fā)涉及結(jié)對(duì)編程,早期反饋和檢查,集體代碼所有權(quán),嚴(yán)格的測(cè)試,持續(xù)集成等實(shí)踐。..總之,敏捷包括假設(shè),發(fā)現(xiàn)和糾正錯(cuò)誤。
敏捷會(huì)改進(jìn)上面的圖表。它將軟件開(kāi)發(fā)商品化,使經(jīng)驗(yàn)較少的人員在可替代團(tuán)隊(duì)成員的職業(yè)生涯中提前做出有意義的貢獻(xiàn)。因此一幅新的圖表應(yīng)運(yùn)而生:
但敏捷已經(jīng)存在了一段時(shí)間,我們正在接受更新更大的事情。我不是在談?wù)摗熬妗焙推渌?xiàng)目管理潮流,而是更多的技術(shù)導(dǎo)向的運(yùn)動(dòng)。我們打破了開(kāi)發(fā)、部署和運(yùn)營(yíng)之間的障礙,稱之為 DevOps。從單元層面到生產(chǎn)層面,我們已經(jīng)取得了更大的進(jìn)展。我們做dark launches,使用 Monkey 測(cè)試,并用微服務(wù)去去除風(fēng)險(xiǎn)。
隨著我們這些手段的實(shí)施,提升了商品化應(yīng)用開(kāi)發(fā)。我們啟用自動(dòng)化錯(cuò)誤檢測(cè),補(bǔ)救和分析。我們將 Web、移動(dòng)開(kāi)發(fā)整體上轉(zhuǎn)化為逐個(gè)數(shù)字的活動(dòng)。
現(xiàn)在回到我提到的 efficiencer 理念,對(duì)其進(jìn)行重新定義。紅色和橙色代表“我們已經(jīng)完成了它,它介于初級(jí)和稍好之間。擁有 2 - 4 年的編程經(jīng)驗(yàn),你將達(dá)到或超過(guò)這個(gè)水平的技能。然后,你將發(fā)現(xiàn)自己處于 95% 區(qū)間,相比于 Jill 這種以一敵千的大牛來(lái)說(shuō),你已經(jīng)成為了以一敵 950 的優(yōu)秀程序員。
非 efficiencer 的人生
我提出了一個(gè)不重要的邊緣編程技巧,這使很多人都感到壓抑,包括我自己。但是,真的,這并不全是壞事。因?yàn)槟阏娴暮芟矚g編寫(xiě)代碼和學(xué)習(xí)新技術(shù),如果你想在自己的職業(yè)生涯中成為一個(gè)個(gè)人貢獻(xiàn)的軟件開(kāi)發(fā)者,放手去做,你一定會(huì)過(guò)上自己想要的生活。
如果用金錢(qián)來(lái)衡量的話,你的職業(yè)路徑如下:
剛剛進(jìn)入軟件行業(yè),作為一個(gè)初級(jí)開(kāi)發(fā)人員每年薪水大約 6 萬(wàn)美元。
工作 5 年之后成為一名高級(jí)開(kāi)發(fā)人員,薪水大約 11 萬(wàn)美元。
逐漸獲得類似“首席工程師”或“技術(shù)主管”或“架構(gòu)師”這樣的頭銜,薪水在 15 萬(wàn)美元左右。
在職業(yè)生涯的剩余時(shí)間進(jìn)行朝九晚五的工作,每年學(xué)習(xí)一下新的技術(shù),將薪水維持在 15 萬(wàn)美元。
這樣的生活很不錯(cuò)。我想,你的收入在全球范圍內(nèi)來(lái)比較是比較普通的。而且你也意識(shí)想要發(fā)展自己的業(yè)余愛(ài)好是需要足夠工資支持的。
這不容易突破,不過(guò)也沒(méi)有什么可恥的。
非常容易理解,它有一個(gè)非常具體和清晰的上限。隨著時(shí)間的流逝,你或許會(huì)成為軟件開(kāi)發(fā)領(lǐng)域中最不重要的人,因?yàn)槟銜?huì)忙于追逐框架和技術(shù),以此為條件讓他人來(lái)衡量你的價(jià)值。
將非 efficiencer 的職業(yè)生涯進(jìn)行可視化
假設(shè)你作為一個(gè)程序員開(kāi)始了職業(yè)生涯,決心永遠(yuǎn)不會(huì)進(jìn)入管理崗位。當(dāng)然,你永遠(yuǎn)不會(huì)自己主動(dòng)成為一個(gè) efficiencer,因?yàn)橹钡綆追昼娗澳悴胖?efficiencer 是什么。
以下是你的職業(yè)生涯直觀的可視化圖像。2 - 4 年后,你可以獲得高達(dá) 95% 的價(jià)值交付能力,你成為一個(gè)多面手。那么,在接下來(lái)的 41 年里,你將會(huì)搗鼓,學(xué)習(xí)新的框架,保持現(xiàn)狀,并在最后 5% 的邊際收益遞減區(qū)域徘徊(除非你從編程工作中逃離開(kāi),用更多的時(shí)間來(lái)指導(dǎo)別人,這是我為 efficiencer 所提到的那種專業(yè)的一個(gè)例子)。
換句話說(shuō),在職業(yè)生涯的前10%,你將達(dá)到職業(yè)價(jià)值的 95%。這非常令人驚訝。
程序員迷戀技能的弊端
如果把你的技能定位在綠色和黃色,你會(huì)有一個(gè)美好的生活。而基于此,你僅是把技能的提升當(dāng)做是一種業(yè)余愛(ài)好,因?yàn)槟阃度肓撕芏嗑Γ瑓s沒(méi)有獲得任何額外的回報(bào)。
實(shí)際上,任何一個(gè)具有商業(yè)意識(shí)的紅色或橙色的人都可以利用他們的編程技巧,并且自己做得更好。
例如以一敵千的程序員 Jill 離開(kāi)谷歌,甚至只是稍微做一點(diǎn)商業(yè)計(jì)劃,她就會(huì)建立一個(gè)初創(chuàng)公司,抗衡谷歌。然后谷歌將不得花費(fèi)數(shù)百萬(wàn)美元買(mǎi)下她。但是如果身處黃、綠、藍(lán)階段的程序員,僅是自我提升該有的編程技能,這樣反而會(huì)有限制作用,好比在對(duì)她說(shuō):“Jill,你技術(shù)太牛了,不要操心其他事情,只要專門(mén)做好搜索就可以了,至于商業(yè)上的事交給我們就可以。”
Efficiencer 的未來(lái)
總體而言,Efficiencer 可以解釋為程序員出生的創(chuàng)業(yè)者。在如今技術(shù)變革日新月異的大環(huán)境之下,很多程序員都擔(dān)心一過(guò) 35 歲就即將面臨失業(yè)的風(fēng)險(xiǎn),其實(shí)若不想成為管理者,卻又對(duì)編程充滿興趣,Efficiencer 不乏為一個(gè)較好的出路,雖然剛開(kāi)始,收入有所下降,但是一旦堅(jiān)持下去,很快就可以超越之前的水準(zhǔn)。
-
程序員
+關(guān)注
關(guān)注
4文章
951瀏覽量
29799
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論