一位老程序員38年經(jīng)驗總結(jié):不要有年齡危機(jī),直接去做
能把一件事堅持 40 年的人并不多,我們今天要介紹的這位就是其中一員。他叫 Noah Gibbs,從事編程工作快滿 40 年了,最近他用博客的形式分享了自己總結(jié)的一些經(jīng)驗。
Noah Gibbs
再過兩年,也就是 2024 年,我將成為一名擁有 40 年編程經(jīng)驗的工程師。在此期間,我也獲得了豐厚的回報。我該從哪里介紹我的經(jīng)驗?zāi)兀烤蛷能浖_發(fā)說起吧。
軟件開發(fā)還是「年輕」的
就拿編程語言來說,F(xiàn)ortran 可以追溯到 1957 年,同時期出現(xiàn)的還有 LISP 、Algol 等。設(shè)想一下,假如從 1957 年開始就有人從事編程工作,到今天也已經(jīng)有 65 年的經(jīng)驗了。
至于我,自 1998 年以來,我一直是一名全職程序員,時間跨度達(dá) 24 年。不過嚴(yán)格說來,我從 1984 年就開始干程序員這一行了,這樣算下來已有 38 年從業(yè)經(jīng)驗。
至于其他行業(yè),例如文藝界大提琴演奏者馬友友(Yo Yo Ma)從 4 歲半就開始拉大提琴,演藝生涯超過 63 年,但他還不是世界上演奏時間最長的音樂大師。根據(jù)吉尼斯世界紀(jì)錄,有位音樂人在過去 80 年里連續(xù)發(fā)行了多個音樂作品,這還不包括現(xiàn)場表演或其他活動。
因此相比其他領(lǐng)域來說,我們(編程)的領(lǐng)域還很年輕。
年齡不是問題
其實,不管從什么時候開始都不會太晚。大約一年前,45 歲的我開始學(xué)習(xí)鋼琴。如果我能堅持下去,在我 60 歲時,我相信自己會成為一名非常優(yōu)秀的鋼琴家。
我遇到過很多優(yōu)秀的程序員,他們從 20 歲、30 歲甚至 40 歲才開始。我不明白我們?yōu)槭裁床荒軓?50 歲或 60 歲開始學(xué)習(xí)一項新的東西。年齡不是問題。
嘗試不同的事情
如果你想從事一段漫長而又無趣的編程生涯,而現(xiàn)在又剛剛開始。不用擔(dān)心你剛起步,我經(jīng)常會鼓勵別人「只要開始著手寫一些軟件,任何軟件都無所謂,只要去行動就足夠了。」在此過程中,你會學(xué)習(xí)很多不同的東西,學(xué)習(xí)順序并不重要,重要的是你學(xué)到了什么。
以我個人為例,在我 40 年的職業(yè)生涯中,會遇到很多編程要求,如桌面應(yīng)用、操作系統(tǒng)、Web 程序等等。只要你嘗試不同的事情,不必在意先學(xué)哪個,后學(xué)哪個,邊用邊學(xué)。如果你太拘泥于學(xué)習(xí)而忽視實踐,可能會失敗。
學(xué)習(xí)的東西暫時沒用?等等看
假如你擔(dān)心自己學(xué)的東西沒用怎么辦?其實沒用是相對的。比如我,我把多年業(yè)余時間投入到一種名為 DGD 的 舊 MUD 編程語言中。這門語言于我而言用處不大,然而學(xué)習(xí)過程卻教會我很多。它教會我后來 Ruby on Rails(一個使用 Ruby 語言寫的開源 Web 應(yīng)用框架) 使用的東西,它教會我關(guān)于使用數(shù)據(jù)庫編程的知識,即使它沒有使用數(shù)據(jù)庫!
總之,這一學(xué)習(xí)過程在我后來學(xué)到的五六種不同的語言中都很有用。
有趣的是,多年后我憑借 DGD 找到了一份咨詢的工作。本來世界上就沒有多少這種工作,但我就是其中之一!這比學(xué)過許多實用的語言更實用。
我也經(jīng)常對自己說「現(xiàn)在還早」,我的意思是,我才 46 歲,不是 96 歲老的快走不動了。我至少還有 20 年,也許 50 年的時間用來學(xué)習(xí)。
不管怎樣,最重要的是持續(xù)不斷地工作。要想成為一名擁有 20 年、40 年或 70 年經(jīng)驗的程序員,需要付出很多努力。學(xué)習(xí)一些有趣或有用的東西,10 年、20 年或 30 年后回過頭來看你收獲了什么。
談到工作,我認(rèn)為工作是一種很好的學(xué)習(xí)方式。不過我也喜歡做一些與工作無關(guān)的事情。無論與工作有關(guān)與否,我都會編寫一些代碼。我喜歡寫一些其他程序員可以使用的東西,這樣才有意義。假如說,你不喜歡現(xiàn)在的工作了,你要想辦法改變你的觀點,讓自己適應(yīng)工作;假如真的無法堅持,你應(yīng)該采取措施,比如休假或者辭職。
要腳踏實地
做決定很容易,比如你要成為一名計算機(jī)程序員,然后制定了一堆計劃、無數(shù)個要點、分成幾大部分來實現(xiàn)這一目標(biāo)。但是我想說的是,不要把計劃看得太認(rèn)真。
學(xué)習(xí)編程并不是一項你計劃好的任務(wù),當(dāng)你開始動手時,你就是一個程序員。如果你還沒開始,建議你去一個在線代碼學(xué)習(xí)網(wǎng)站編寫你的第一個程序,它應(yīng)該不會超過 20 分鐘。
當(dāng)你積累到一定程度,開始寫一些規(guī)模較大的軟件時,可能會面臨程序臃腫等問題,這時你就需要學(xué)習(xí)一些模塊化和封裝的知識。想讓程序運行得更好,還需要掌握一些數(shù)學(xué)知識。所有這些都可以在網(wǎng)上找到,如果你想深入學(xué)習(xí),還能找到參考書籍和課程。
你也可以培養(yǎng)一些愛好,而不是把所有精力投入到軟件編程里。保持繼續(xù)工作,它會讓你變得更好,不要害怕那些看起來不切實際的工作。就像我不知道我要怎么用音樂來幫助我的軟件編寫。但未來是非常遙遠(yuǎn)的,沒有人可以預(yù)測 20 年后會發(fā)生什么。
讓自己變得更優(yōu)秀
早期的職業(yè)培訓(xùn)(編程學(xué)校、博客文章、大學(xué)課程、書籍)有點像裝配線,會學(xué)習(xí)到一些非常基礎(chǔ)的技能,例如編寫函數(shù)、調(diào)試等,這種學(xué)習(xí)方式試圖確保你能掌握基本編程能力。
如果你想在一眾人中展露鋒芒,你必須非常擅長某件事,而這件事必須是受歡迎的、有利可圖的、缺你不可的那種。如果你打算在軟件領(lǐng)域賺到比爾 · 蓋茨那樣的財富,而你卻寫了 Haskell(復(fù)雜、深奧、廣受好評,但沒那么賺錢),那么這將是一個巨大的失敗,反之亦然。
從基礎(chǔ)中學(xué)習(xí)深層次原則
不要一開始就去學(xué)習(xí)軟件設(shè)計的深層原理,假如沒有實踐經(jīng)驗的話,這個過程會很痛苦。你可以先從構(gòu)建簡單的軟件開始,至于用哪種語言也不用糾結(jié),關(guān)鍵是動手實踐。然后找出這一過程遇到的錯誤,查資料、從原理上進(jìn)行解決。
假如同樣的過程循環(huán) 20 年,構(gòu)建、查錯、學(xué)習(xí)理論、糾錯,你會收獲很多。在這個行業(yè),技術(shù)變化相當(dāng)快,你也可以從其他領(lǐng)域?qū)W到很多東西。
不要害怕,直接去做就好了。至于我,四十年的時間不知不覺就過去了。無論如何,只要堅持下去,就算成功了。