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