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