幹了 40 年程式設計師,是一種什麼體驗?
一位從 1984 年就開始當程式設計師的老哥出來「現身說法」了。
他總結了自己從業近 40 年的經驗,匯集成 13 條建議,希望能給想長期做程式設計師的新手們提供一些幫助。
文章一發布,就在 reddit、推特上引發討論,許多程式設計師也紛紛跟帖附議,有網友就表示:不能同意更多!
趕緊來看看,他都分享了哪些幹貨吧。
來自近 40 年碼農的經驗分享
這位老哥叫 Noah Gibbs,曾供職於英偉達、AppFolio Inc、DAQRI 等多家公司,目前就職於 Shopify。
作為一名資深的軟體開發者,他一直活躍在開發一線。
但與想像中不同,這次他並沒有介紹要學習什麼語言或框架,而是指出了一些他認為比技術更重要的事。
(以下是作者 Noah Gibbs 的口吻敘述)
1、幾歲開始都不晚
大約一年前,也就是 45 歲時,我才開始學習彈鋼琴。這一年我覺得自己一直在進步,我相信如果堅持下去,到 60 歲時我一定會非常棒。
學習編程也是一樣,當你已經有了一些其他領域的背景時,你學習編程就會變得很快。
相信我,如果你從 50 歲開始做程式設計師,10 年後,也就是你 60 歲時,肯定會比我 18 歲的水平好得多。
我遇到過很多優秀的程式設計師,他們都是在 20 歲、30 歲甚至 40 歲才入行,所以我不知道你為什麼不能從 50、60 歲開始。這一行需要時間和工作,但你不必非得年輕。
2、多嘗試不同類型的編程
如果你剛剛入行,並且想長期從事編程行業,我的建議是:要多寫一些軟體,任何軟體、寫什麼都無所謂。
在我幹程式設計師的 40 年裡,很多潮流來來去去。可以說,讓自己多嘗試不同的類型的編程很重要。
這可以使你思想不會變僵硬,而且事實證明,幾乎任何一種規則都能教會你一些東西。
如果你太拘泥於某一項單獨的任務,就很可能會失敗。
3、不要怕回報慢
不要覺得自己正在學習的東西是無用的,因為無用只是相對的。
我曾經把多年的業餘時間投入到一種叫做 DGD 的舊 MUD 編程語言中。這當然不是為了實用價值,因為幾乎所有關於它的東西都是奇怪的和不標準的,很少有真正能應用的。
但它教會了我很多,它教會了我 Ruby on Rails 後來應用的東西,它教會了我如何使用數據庫編程,它還教會了我一些在後來學的 5、6 種語言中都能用上的東西。
有趣的是,多年後我在 DGD 找到了一份咨詢工作。這世界上還沒有多少 DGD 的工作,但我有一個!這比我學過的許多「實用」語言更實用。
就像我經常對自己說的:“現在還早。” 你可以多學習一些有趣或有用的東西,即使可能十年、二十或三十年後才有回報。
不要總是選擇 18 個月後就會變好的東西,因為你無法預見未來會發生什麼。
4、找到工作對你的吸引點
你開始寫程式碼一定是因為它的某些方面吸引了你,你要做的是試著弄清楚那是什麼。
這個答案每一個人都不一樣,對於我來說,我喜歡寫程式碼給我帶來的成就感和聰明的感覺。
只有在工作中找到足夠吸引你的點,才能長期堅持下去。
如果你感覺不到任何被吸引的點,那你可能需要休個假,或重新尋找你喜歡的東西,因為這樣的工作只會讓你精疲力竭。
5、這不是短跑或馬拉松,這是寫日記
如果你是個新手,很可能在下定決心「我要成為一名程式設計師」後,列出一個詳細的計劃,計劃中可能包含 8 個大點、56 個小點等等。
我不會告訴你不要這麼激動,但我要說:不要把這個計劃太當真。因為你不可能通過計算和計劃來完成所有的事情。
在某些時候,你並沒有「脫離你設定的任務」,你只是「過著自己的生活」。這不是失敗,也不是放棄。
你無法預測什麼是有價值的,所以你應該學習所有的東西。我的經驗就是:你活得越久,工作得越好,你就越能意識到每件事 (每個人) 都能教給你有用的東西。
你不是在跑短跑或馬拉松。相反,這就像是在寫日記。
十年後,你會翻看這本日記,然後說,“哇,我做了一些很酷的事情” 或者 “嗯,我是個很有趣的人”,但我想你應該不會在日記上寫 “我非常擅長 Java”。
6、不要混淆工作和職業
不要把工作和職業混為一談,它們不是一回事。
對於我來說,編寫軟體是一項非常棒的工作,但只是一個還行或者可以更好的職業。
在接受別人的建議時,也要注意對方提到的是關於工作的建議,還是關於這份職業的建議,如果你把兩者混淆,這個建議就沒有多大意義了。
7、學習順序並不重要
在剛入門的時候,你往往會得到關於首先學習什麼語言或技術的不同建議,但這其實不重要。
如果你沒有按老規矩走,而是開創了自己的道路,那並不意味著你沒有做好基礎工作,也不意味著你就很糟糕。
因為如果某件事真的很重要,你遲早都會發現,並重新去學它。
8、你越優秀,就越和別人不一樣
早期的程式設計師職業培訓(例如博客文章、大學課程、書籍)就像流水線,試圖培養你在每一個方面的基本能力。
而且新手很容易誤認為,一個首席工程師需要點滿很多技能、每個技能水平也必須很高,但事實並非如此。
你可以通過編寫一段相當簡單的代碼並詳細地描述它,就像 Patrick McKenzie 在《Bingo Card Creator》中做的那樣,也可以通過寫一些真正有利可圖的東西來獲得尊重。
除了基本的能力之外,這些道路幾乎沒有任何共同之處。
這也是為什麼當你求職時問這樣的問題是很蠢的:“我是一名有 15 年工作經驗的軟體工程師,通常的薪水是多少?”
15 年是如此之久,以至於你應該形成了與其他人不同的優勢之處。你寫過書嗎?從事過賺錢的大型項目嗎?整合過一個有趣的開源項目嗎?這 15 年你做了什麼?
當然,這也不僅僅是工資的問題。你可以問:“我是一個有 15 年經驗的軟體工程師,這意味著我有能力領導這個項目,對吗?” 答案當然是 “可能”。接下來的問題是 “那在 15 年裡你做了什麼?”
9、從實踐中學習
我不會建議人們一開始就去學習軟體設計的深層原理,這是因為如果你試圖把它們當作純理論來學習,那麼幾乎肯定會做錯。
對於初學者來說,首先要學會用一些實際的語言構建一個可用的軟體。不管是哪一種語言,只有犯一些真正的錯誤,才能在錯誤中解決問題。
然後就可以這樣循環:實踐,犯錯,學習理論,修正錯誤。
當然,這也並不意味著如果你先學習了理論,你就會永遠變差,只不過是需要一段時間才能正確使用你所學的知識。
10、使用什麼技術很重要
如果你想在程式設計師這一行做上幾十年,那麼你不僅要學習各種各樣的技術,還要學習各種各樣的非技術技能。
舉個例子,“學習至少一種函數式編程語言”,就像鋼琴家 “學習演奏莫扎特的鋼琴曲” 一樣是必須的,但同時,學習一些編程時所涉及的邊緣技術,會為你培養額外的洞察力。
11、向其他領域學習
如果我們的行業還很年輕,這意味著什麼?這意味著我們還在研究基本原理。
你可以從其他領域學到很多東西。我曾經寫了一本關於如何偷學藝術家練習方法的書,正是因為藝術和音樂都是古老的學科,它們已經領先計算機發展幾千年了。
所以,如果你遇到了一個問題,你可以考慮一下其他領域的人們會如何處理這個問題。
例如,阿圖爾・葛文德(Atul Gawande)的《清單宣言(Checklist Manifesto)》中就講述了飛行員、摩天大樓建造者和醫生處理問題的截然不同的方式,這些都是很好的方法。
12、不要重複造輪子
眾所周知,如果美術家重複畫一個靜物、音樂家反復練一首曲子,他們都會越來越熟練,但程式設計師不一樣。
在程式設計師中有一個說法是「不要重複造輪子」,我們的工作正是想辦法讓電腦完成所有的重複工作,這樣我們就可以只做新的工作。
你可以嘗試重新發明輪子、可以故意用「糟糕」的方式編寫代碼,看看會發生什麼。總而言之,你需要真正擅長一些不同尋常的事情。
13、只管去做
我一直在向大家推薦非技術領域的建議,而不是那些充斥著技術宅們的論壇,那些論壇裡充斥著最近才轉行為程式設計師的人那種偏執的熱情。
如果你寫程式,你就是程式設計師,或者軟體工程師,或者隨便你怎麼稱呼它。
只要你堅持寫下去,你就可以一直做一個程式設計師,不管多少年。無論如何,如果你堅持下去,你就有資格,這才是最重要的。
怎麼樣,看完以後,你對程式設計師行業有沒有新的認知?