ADVERTISEMENT
做了40年的程式設計師,是什麼感覺?一位從1984年就開始當程式設計師的資深前輩出來「現身說法」。
他總結了自己從業近40年的經驗,彙集成13條建議,希望能給想長期做程式設計師的新手們提供一些幫助。
文章一發表,就在reddit、Twitter上引發討論,許多程式設計師也紛紛發文附議,有網友就表示:再同意不過了!
來自近40年碼農的經驗分享
這位程式設計師叫Noah Gibbs,曾供職於NVIDIA、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、只管去做
我一直在向大家推薦非技術領域的建議,而不是那些充斥著技術宅們的論壇,那些論壇裡充斥著最近才轉行為程式設計師的人那種偏執的熱情。
如果你寫程式,你就是程式設計師,或者軟體工程師,或者隨便你怎麼稱呼它。
只要你堅持寫下去,你就可以一直做一個程式設計師,不管多少年。無論如何,如果你堅持下去,你就有資格,這才是最重要的。
資料來源:
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!