1. 程式人生 > 實用技巧 >我是一位40歲的“老程式設計師”,我有一些想法

我是一位40歲的“老程式設計師”,我有一些想法

作者 | Ben Northrop

翻譯 | 核子可樂

策劃 | Tina

演算法、應用程式安全、效能優化以及架構等等,這些東西衰減速度很慢,更值得認真鑽研。

我是個程式設計師,差不多四十歲了。記得某個週六的早晨,我老婆在家裡帶孩子,我自己跑去參加一場技術會議。當時這個會議的主題是 React Native,主講人一直想給我們灌輸一種 React Native 將成為移動開發領域“下一個大事件”的印象。但在我看來,它跟 15 年前的 JSP 其實挺像的,連演示程式碼中的邏輯都一模一樣——但我覺得可能是自己“老了”,有點“沒跟上節奏”。

主講人一張一張放著幻燈片,那些實時編碼畫面讓人眼花繚亂。接著就是演講裡有名的“掉書袋”環節,主講人一口氣說起六款我前所未聞的支援工具,其中有一款叫 Pepperoni ——對,就是意式辣香腸那個詞。我是個剛學會 Angular 的老傢伙,坐在現場感覺自己像個傻子。我真心希望臺上能講得慢一點,簡單一點。

但其實這一切又讓我生出種熟悉的感覺。過去二十年裡,我經歷過不少什麼浪潮啊、什麼變革的。其實感覺還行,一樣樣“顛覆”總是來了又去,拽著從業者們的神經不斷亢奮。這讓我自己也有了技術創新社群的歸屬感,覺得我也能為讓一切變得更輕鬆、更快、更乾淨、更好而做出點努力。但這一天,面對即將到來的四十歲,我必須承認自己有點疲憊了。我知道,要想繼續掙到可觀的薪水,我就得跟上時代的變化、拋棄一些以往自己深信不疑的知識,為下一場旅程做好準備。這些我都知道。

但我轉念一想,其他行業的專家其實並不需要像我這樣熬過自己的程式設計生涯。就說四十歲的醫生們,他們不用擔心自己對於心腦血管系統的知識突然就過時了。律師、水管工、會計師或者英語老師也是一樣,雖然每個職業都有自己的獨特之處,但著眼於職業生涯的中期,總有一些積累下來的知識應該相對穩定,同時也成為他們獲得尊重與報償的根源。但在程式設計方面,二十年的從業經驗似乎沒那麼值錢?

兩股力量

當然,程式設計這行裡也有不少積極向上的從業者,他們熱愛程式設計工作帶給他們的一切。但單從無休無止地自我否定、自我顛覆這事上看,程式設計似乎或多或少有著自己的獨特性。但我不禁疑惑,這種獨特性真的成立嗎?程式設計真的跟其他所有行業都不一樣嗎?如果是真的,為什麼?這又會給我們的職業生涯帶來怎樣的影響?我個人想從兩個角度,分享自己的一點思考。

首先就是知識衰減。我們所知曉的一切,包括程式設計之外的很多認知,終將過時。我在 16 歲的時候就學會了開車,直到現在這門手藝還是能發揮作用。由此來看,開車算是衰減速度很慢的知識型別。對其他一些專業人士來說,他們的知識衰減速度也比較慢 。雖然醫學上的新發現可能會取代一部分現有程式,但我們對於生物學的理解恐怕不太可能出現全面顛覆。在這樣的基礎上,知識的累積才真正具有效力。多從業一年,醫生們的知識儲備就更豐富一些,因為這 12 個月裡他們學到的新知識會疊加在原有知識之上。

但先不說是好是壞,在程式設計領域,情況完全不同。說句不負責任的話,我認為:

程式設計師有半數知識都將在未來十年內失效。

也許這話並不靠譜,但結合個人經歷,我是比較認同的。換句話說,就算從現在開始我什麼新知識都不學,那麼到 2026 年,我也還是有大概一半的知識能發揮作用(感謝長壽的 SQL),另外一半則沒準毫無用處(React Native 可能就屬於這種)。我肯定會繼續學習,用新知識替換掉舊知識,但這就夠了嗎?到 2026 年,我腦袋裡頭仍然有效的知識,會比現在更多嗎?

這就引出了第二股力量,即知識積累速率——就是我們往自己的知識庫裡新增新內容的速度。在各個領域,大家都得跨過一定的知識門檻才能獲得“認證”(至少可以當成從業的敲門磚),所以每個人在職業早期都需要積累跟認證有關的知識。但在程式設計領域,隨著知識的快速衰減,我們似乎永遠無法真正邁出“學生”時代。我們必須得終生學習,這也是程式設計師的職業生涯顯得如此“非主流”的核心原因。

三個階段

如果讓我畫出普通程式設計師在職業生涯中的知識儲備量變化情況,結合知識的衰減與積累速度,我覺得大概的情況可能是下圖這樣:

在職業生涯的最初階段,即熱情的學徒階段,知識的積累相對容易。一切都是全新的,每一次體驗都能帶來更多的知識儲備。另外,我們那時候還年輕,所以沒有什麼一定得做、或者一定不能做的事。我們可以花幾個晚上或者週末學習新的語言和框架。更重要的是,僱主對我們的期望也不高。年輕人嘛,不犯錯怎麼能叫年輕人,所以我們比其他年長的同事更輕鬆自在,有餘力抽點時間填補自己知識上的空白。這是個有趣的階段,而且總有種感覺伴隨左右——我們不知道的還太多。

到了一定階段,我們不再是新手,轉而成長為具備生產能力、可以自給自足的成熟開發人員。這讓我們第一次意識到,自己跟同事之間的差距(甚至是比自己大十歲的同事)似乎沒有那麼大。這讓我們充滿了幹勁,後起之秀就該這個樣子!我們在學習上的投資帶來了回報,我們掌握的知識也幾乎全都有用——或者說,還沒來得及衰減掉。憑藉豐富而新鮮的知識,我們開始刻客戶、同行以及企業管理者的尊重,升職、加薪、職業發展也隨之而來。雖然當時大家未必意識得到,但這就是職業生涯中的一大重要轉折點。

在這個轉折點上,有兩個重要事件。

首先,晉升為“高階”開發人員帶來的不只是更高的工資,同時也有僱主們更大的期望。明星程式設計師就應該成長為下一個領導者,幫助新手程式設計師啦、審查程式碼啦、接受採訪以及參加技術會議之類,最好還能騰出手來幫助企業維護一下複雜而陳舊的遺留軟體。

這些事看起來都很合理,但卻在不知不覺間犧牲掉了我們繼續積累知識的速度。還有時間逛技術部落格嗎?沒有!

另外,就在這個時間點上,我們第一次經歷、或者至少開始意識到知識衰減的存在。我們在職業生涯早期學到的一些東西現在已經過時了。更具體地講,先前提到的“兩股力量”——知識衰減與知識積累速率,從這裡開始成為我們的敵人。

接下來,我們進入了最後一個階段——資深老鳥期。沒錯,我們知識淵博、富有成效;但我們也意識到,自己每時每刻掌握的知識總量可能都比剛剛又少了那麼一點。更可怕的是,我們往往沒有時間積累新的知識作為補充。這一點最令人沮喪,所以很多程式設計師最後轉而去做管理、銷售、測試,甚至是回鄉下種地了。因為如果不這樣,我們自己知道未來五年的職業生涯只會急轉直下,沒有半分餘地。

個人一點不成熟的小建議

我現在就處在這麼個階段。我仍然熱愛學習,但我知道就算一點新東西不學,自己也不會差到哪裡去……最多是徘徊在“專家”這個定義範圍的下限附近。我希望能成為馬丁·福勒那樣的大師,像他那樣在生活與工作之間找到平衡點(我敢打賭他的生活絕對安排得多姿多彩)。也可以說,正是因為從知識衰減與積累速率的角度看待問題,我才有了這種釋然的心態。

所以,我首先嚐試把眼光放得更長遠一些。我會對新的職務抱以更謹慎的態度,以警惕的心理面對自己鮮有涉及的所謂“大好機會”。不少同事確實在其他公司裡拿到了更高的薪水,但他們也失去了接觸新事物、學習新知識的空間。在未來五年中,他們會意識到自己曾經引以為傲的寶貴知識已經不再適用,自己的實際貢獻已經值不了那麼高的薪水。所以,結合實際情況,我可能更重視僱主提供的工作環境,而不只是關心新的崗位能給多少工資。

其次,由於時間有限,我會更多把精力投入到永續性比較強的知識身上。演算法、應用程式安全、效能優化以及架構等等,這些東西衰減速度很慢,更值得我認真鑽研。在我看來,這些領域中蘊藏的機遇,也要比學習最新的 JavaScript 庫更大一些。

最後,可能我自己還沒有真正走出這座圍城;但單從職業角度而言,知識衰減與知識積累速率確實能幫大家換個角度審視自己的成長。有什麼想聊的,咱們評論區見!

老程式設計師們的評論

Ben Northrop 的這篇文章釋出後,引起了很多人的共鳴,很多一輩子都在程式設計的“大齡程式設計師”紛紛發表了意見。

“我已經有 45 年的程式設計經驗了。程式設計就是了解問題、找到方法並加以解決。這種條件下知識永遠不會過時。雖然每種程式語言都需要數週的學習時間和數月的掌握時間,但他們中的大多數都非常相似。作業系統和資料庫也是如此。問題在於,許多人認為老程式設計師不能學習新的花樣,但這個觀點並不正確。”

“我今年 54 歲了... 我們對軟體的愛就是因為它的半衰期很短。我們必須不斷學習才能生存和發展。這並不容易,而且新事物產生的速度也越來越快,但是,終身學習才能讓軟體行業更吸引人...“

“我今年 79 歲了,算是老程式設計師的代表吧。我 1958 年第一次用 SHARE 組合語言在 IBM 704 上寫程式。哦對,我還在一臺 IBM 650 上編過程,那臺機器配的儲存器是個能容納 2000 個字的磁鼓。“

問題是,每當計算機的執行速度提高大概 4 倍,程式設計師們學過的知識就都得更新一輪。另外,隨著主儲存器和次儲存器的速率比例發生變化,最佳實踐也會隨之調整。現在的計算機速度更快、記憶體更大,所以需要注意的效能問題也越來越少——不少現代程式語言甚至直接忽略了這些問題。不過舊問題的消失,總會伴隨新問題的出現:線上應用與雲端計算的普及,又帶來了新的挑戰。這種感覺真的不好,就像每過十年物理定律就被任意改變了一樣。愛因斯坦當初是擴充套件了物理學的適用範圍,可沒有徹底否定低速物理學定律。與以往的大型機相比,面向雲環境編寫程式更像是為另一個完全不同的平行宇宙搞物理學研究。

但我相信這一切正在放緩,整個軟體行業終將走向成熟。到那時,程式設計師們可能會一起回顧過往的日子,就像我們現在有時候會撿起復古情懷滿滿的西部片來看一樣。順帶一提,我現在已經退休,偶爾用 Mathematica 編程式設計、打發時間。經歷了漫長的旅程,但我還是我,什麼都沒有改變。”