算法、應用程序安全、性能優化以及架構等等,這些東西衰減速度很慢,更值得認真鉆研。
我是個程序員,差不多四十歲了。記得某個周六的早晨,我老婆在家里帶孩子,我自己跑去參加一場技術會議。當時這個會議的主題是 React Native,主講人一直想給我們灌輸一種 React Native 將成為移動開發領域“下一個大事件”的印象。但在我看來,它跟 15 年前的 JSP 其實挺像的,連演示代碼中的邏輯都一模一樣——但我覺得可能是自己“老了”,有點“沒跟上節奏”。
主講人一張一張放著幻燈片,那些實時編碼畫面讓人眼花繚亂。接著就是演講里有名的“掉書袋”環節,主講人一口氣說起六款我前所未聞的支持工具,其中有一款叫 Pepperoni ——對,就是意式辣香腸那個詞。我是個剛學會 Angular 的老家伙,坐在現場感覺自己像個傻子。我真心希望臺上能講得慢一點,簡單一點。
但其實這一切又讓我生出種熟悉的感覺。過去二十年里,我經歷過不少什么浪潮啊、什么變革的。其實感覺還行,一樣樣“顛覆”總是來了又去,拽著從業者們的神經不斷亢奮。這讓我自己也有了技術創新社區的歸屬感,覺得我也能為讓一切變得更輕松、更快、更干凈、更好而做出點努力。但這一天,面對即將到來的四十歲,我必須承認自己有點疲憊了。我知道,要想繼續掙到可觀的薪水,我就得跟上時代的變化、拋棄一些以往自己深信不疑的知識,為下一場旅程做好準備。這些我都知道。
但我轉念一想,其他行業的專家其實并不需要像我這樣熬過自己的編程生涯。就說四十歲的醫生們,他們不用擔心自己對于心腦血管系統的知識突然就過時了。律師、水管工、會計師或者英語老師也是一樣,雖然每個職業都有自己的獨特之處,但著眼于職業生涯的中期,總有一些積累下來的知識應該相對穩定,同時也成為他們獲得尊重與報償的根源。但在編程方面,二十年的從業經驗似乎沒那么值錢?
兩股力量
當然,編程這行里也有不少積極向上的從業者,他們熱愛編程工作帶給他們的一切。但單從無休無止地自我否定、自我顛覆這事上看,編程似乎或多或少有著自己的獨特性。但我不禁疑惑,這種獨特性真的成立嗎?編程真的跟其他所有行業都不一樣嗎?如果是真的,為什么?這又會給我們的職業生涯帶來怎樣的影響?我個人想從兩個角度,分享自己的一點思考。
首先就是知識衰減。我們所知曉的一切,包括編程之外的很多認知,終將過時。我在 16 歲的時候就學會了開車,直到現在這門手藝還是能發揮作用。由此來看,開車算是衰減速度很慢的知識類型。對其他一些專業人士來說,他們的知識衰減速度也比較慢 。雖然醫學上的新發現可能會取代一部分現有程序,但我們對于生物學的理解恐怕不太可能出現全面顛覆。在這樣的基礎上,知識的累積才真正具有效力。多從業一年,醫生們的知識儲備就更豐富一些,因為這 12 個月里他們學到的新知識會疊加在原有知識之上。
但先不說是好是壞,在編程領域,情況完全不同。說句不負責任的話,我認為:
程序員有半數知識都將在未來十年內失效。
也許這話并不靠譜,但結合個人經歷,我是比較認同的。換句話說,就算從現在開始我什么新知識都不學,那么到 2026 年,我也還是有大概一半的知識能發揮作用(感謝長壽的 SQL),另外一半則沒準毫無用處(React Native 可能就屬于這種)。我肯定會繼續學習,用新知識替換掉舊知識,但這就夠了嗎?到 2026 年,我腦袋里頭仍然有效的知識,會比現在更多嗎?
這就引出了第二股力量,即知識積累速率——就是我們往自己的知識庫里添加新內容的速度。在各個領域,大家都得跨過一定的知識門檻才能獲得“認證”(至少可以當成從業的敲門磚),所以每個人在職業早期都需要積累跟認證有關的知識。但在編程領域,隨著知識的快速衰減,我們似乎永遠無法真正邁出“學生”時代。我們必須得終生學習,這也是程序員的職業生涯顯得如此“非主流”的核心原因。
01、三個階段
如果讓我畫出普通程序員在職業生涯中的知識儲備量變化情況,結合知識的衰減與積累速度,我覺得大概的情況可能是下圖這樣:
在職業生涯的最初階段,即熱情的學徒階段,知識的積累相對容易。一切都是全新的,每一次體驗都能帶來更多的知識儲備。另外,我們那時候還年輕,所以沒有什么一定得做、或者一定不能做的事。我們可以花幾個晚上或者周末學習新的語言和框架。更重要的是,雇主對我們的期望也不高。年輕人嘛,不犯錯怎么能叫年輕人,所以我們比其他年長的同事更輕松自在,有余力抽點時間填補自己知識上的空白。這是個有趣的階段,而且總有種感覺伴隨左右——我們不知道的還太多。
到了一定階段,我們不再是新手,轉而成長為具備生產能力、可以自給自足的成熟開發人員。這讓我們第一次意識到,自己跟同事之間的差距(甚至是比自己大十歲的同事)似乎沒有那么大。這讓我們充滿了干勁,后起之秀就該這個樣子!我們在學習上的投資帶來了回報,我們掌握的知識也幾乎全都有用——或者說,還沒來得及衰減掉。憑借豐富而新鮮的知識,我們開始刻客戶、同行以及企業管理者的尊重,升職、加薪、職業發展也隨之而來。雖然當時大家未必意識得到,但這就是職業生涯中的一大重要轉折點。
在這個轉折點上,有兩個重要事件。
首先,晉升為“高級”開發人員帶來的不只是更高的工資,同時也有雇主們更大的期望。明星程序員就應該成長為下一個領導者,幫助新手程序員啦、審查代碼啦、接受采訪以及參加技術會議之類,最好還能騰出手來幫助企業維護一下復雜而陳舊的遺留軟件。
這些事看起來都很合理,但卻在不知不覺間犧牲掉了我們繼續積累知識的速度。還有時間逛技術博客嗎?沒有!
另外,就在這個時間點上,我們第一次經歷、或者至少開始意識到知識衰減的存在。我們在職業生涯早期學到的一些東西現在已經過時了。更具體地講,先前提到的“兩股力量”——知識衰減與知識積累速率,從這里開始成為我們的敵人。
接下來,我們進入了最后一個階段——資深老鳥期。沒錯,我們知識淵博、富有成效;但我們也意識到,自己每時每刻掌握的知識總量可能都比剛剛又少了那么一點。更可怕的是,我們往往沒有時間積累新的知識作為補充。這一點最令人沮喪,所以很多程序員最后轉而去做管理、銷售、測試,甚至是回鄉下種地了。因為如果不這樣,我們自己知道未來五年的職業生涯只會急轉直下,沒有半分余地。
02、個人一點不成熟的小建議
我現在就處在這么個階段。我仍然熱愛學習,但我知道就算一點新東西不學,自己也不會差到哪里去……最多是徘徊在“專家”這個定義范圍的下限附近。我希望能成為馬丁·福勒那樣的大師,像他那樣在生活與工作之間找到平衡點(我敢打賭他的生活絕對安排得多姿多彩)。也可以說,正是因為從知識衰減與積累速率的角度看待問題,我才有了這種釋然的心態。
所以,我首先嘗試把眼光放得更長遠一些。我會對新的職務抱以更謹慎的態度,以警惕的心理面對自己鮮有涉及的所謂“大好機會”。不少同事確實在其他公司里拿到了更高的薪水,但他們也失去了接觸新事物、學習新知識的空間。在未來五年中,他們會意識到自己曾經引以為傲的寶貴知識已經不再適用,自己的實際貢獻已經值不了那么高的薪水。所以,結合實際情況,我可能更重視雇主提供的工作環境,而不只是關心新的崗位能給多少工資。
其次,由于時間有限,我會更多把精力投入到持久性比較強的知識身上。算法、應用程序安全、性能優化以及架構等等,這些東西衰減速度很慢,更值得我認真鉆研。在我看來,這些領域中蘊藏的機遇,也要比學習最新的 JavaScript 庫更大一些。
最后,可能我自己還沒有真正走出這座圍城;但單從職業角度而言,知識衰減與知識積累速率確實能幫大家換個角度審視自己的成長。有什么想聊的,咱們評論區見!
03、老程序員們的評論
Ben Northrop 的這篇文章發布后,引起了很多人的共鳴,很多一輩子都在編程的“大齡程序員”紛紛發表了意見。
“我已經有 45 年的編程經驗了。編程就是了解問題、找到方法并加以解決。這種條件下知識永遠不會過時。雖然每種編程語言都需要數周的學習時間和數月的掌握時間,但他們中的大多數都非常相似。操作系統和數據庫也是如此。問題在于,許多人認為老程序員不能學習新的花樣,但這個觀點并不正確。”
“我今年 54 歲了。。. 我們對軟件的愛就是因為它的半衰期很短。我們必須不斷學習才能生存和發展。這并不容易,而且新事物產生的速度也越來越快,但是,終身學習才能讓軟件行業更吸引人。。.“
“我今年 79 歲了,算是老程序員的代表吧。我 1958 年第一次用 SHARE 匯編語言在 IBM 704 上寫程序。哦對,我還在一臺 IBM 650 上編過程,那臺機器配的存儲器是個能容納 2000 個字的磁鼓。“
問題是,每當計算機的運行速度提高大概 4 倍,程序員們學過的知識就都得更新一輪。另外,隨著主存儲器和次存儲器的速率比例發生變化,最佳實踐也會隨之調整。現在的計算機速度更快、內存更大,所以需要注意的性能問題也越來越少——不少現代編程語言甚至直接忽略了這些問題。不過舊問題的消失,總會伴隨新問題的出現:在線應用與云計算的普及,又帶來了新的挑戰。這種感覺真的不好,就像每過十年物理定律就被任意改變了一樣。愛因斯坦當初是擴展了物理學的適用范圍,可沒有徹底否定低速物理學定律。與以往的大型機相比,面向云環境編寫程序更像是為另一個完全不同的平行宇宙搞物理學研究。
但我相信這一切正在放緩,整個軟件行業終將走向成熟。到那時,程序員們可能會一起回顧過往的日子,就像我們現在有時候會撿起復古情懷滿滿的西部片來看一樣。順帶一提,我現在已經退休,偶爾用 Mathematica 編編程、打發時間。經歷了漫長的旅程,但我還是我,什么都沒有改變。”
編輯:hfy
-
編程
+關注
關注
88文章
3637瀏覽量
93945 -
程序員
+關注
關注
4文章
953瀏覽量
29843 -
Mathematica
+關注
關注
1文章
16瀏覽量
16091
發布評論請先 登錄
相關推薦
評論