寫在前面
美國勞動力的中值年齡是 42 歲,而 Stack Overflow 的一項有關(guān)年齡的調(diào)查表明,40 歲之后的開發(fā)人員只占開發(fā)人員總數(shù)的 13%。那么其他人到哪里去了?他們被解雇了或者上升到管理崗位了嗎?軟件開發(fā)對于過了 40 歲的人來說,是不是就意味著終結(jié)?
本文羅列了 10 位年齡超過 40 歲的老程序員們的故事,他們都是頂級的軟件開發(fā)者,拒絕從事管理崗位,仍然活躍在開發(fā)一線,將編程作為生活收入的主要來源。本文內(nèi)容來自 Belisoft 博客,并已獲得作者的翻譯授權(quán),查看原文 SOFTWARE DEVELOPERS AFTER 40, 50 AND 60 WHO ARE STILL CODING :
Rob Fletcher,Netflix(Los Gatos,CA)的高級軟件工程師,45歲
專長: Web 開發(fā)、測試驅(qū)動開發(fā)、敏捷軟件開發(fā)、Grails、Groovy、Spock 以及 AngularJS。
我已經(jīng)寫了 16 年的代碼,做了幾年獨(dú)立承包商之后,在 42 歲那年加入 Netflix,成為一名高級工程師。
我每天都寫代碼。目前最喜歡的語言是 Kotlin。我想學(xué)習(xí) Go 語言,平常用得比較多的是 Java、Scala 和 Groovy。我一直在學(xué)習(xí)新的東西,哪怕是很小的事情。我知道自己會是一個糟糕的管理者,所以我壓根沒有想往管理方向發(fā)展。
很多事情取決于你的態(tài)度。不要成為厭惡新技術(shù)的老技術(shù)人,也不要嘲笑那些正在使用新技術(shù)的人。在進(jìn)行技術(shù)選型時,你的經(jīng)驗應(yīng)該成為決策的基礎(chǔ)。如果選擇了老技術(shù),那是因為它們正好適合當(dāng)前的需求,而不是因為要保護(hù)你那積攢了多年卻即將過時的專業(yè)知識,也不是因為害怕那些后進(jìn)者帶著 Node.js 和 Go 語言來搶奪你的工作。
Ebbe Kristensen,Prevas A/S(Denmark)的高級軟件設(shè)計師,62歲
專長:開發(fā)實(shí)時嵌入式軟件、軟件配置管理、構(gòu)建測試用例(系統(tǒng)測試和單元測試)。在實(shí)時嵌入式系統(tǒng)、Linux 和 Windows(包括。NET)方面有豐富的寫作和文檔經(jīng)驗,擅長 C、C++、Python、C# 和 Pascal。
我在 1980 年獲得了一個電力系統(tǒng)的電子工程學(xué)士學(xué)位,從我的第一份工作開始,我就以開發(fā)軟件作為我的謀生手段。因為專業(yè)學(xué)位的問題,我花了將近一年的時間才找到第一份工作。但從那個時候開始,我一直是一名軟件工程師。
我?guī)缀跆焯鞂懘a,不處理任何與管理相關(guān)的任務(wù)。事實(shí)上,在很早之前我就意識到,我在管理方面沒有什么競爭力。
作為一名程序員,我很喜歡這個角色,我也很勝任這份工作。如果讓我做一名管理者,肯定會有大麻煩,而且我一點(diǎn)也不享受管理工作。
我的同事里只有兩個人年紀(jì)比我大,其他的(包括上司們)都是比我年輕。我的直線經(jīng)理不到 40 歲,而他是我見過的最好的管理者之一。我在 58 歲那年得到了這份工作,不過我并不是年紀(jì)最大的雇員,有兩個同事年紀(jì)比我還大,盡管如此,他們還是被公司錄用了。
有時候,你幾天甚至幾周都不會學(xué)進(jìn)去什么東西,而有時候幾個小時學(xué)進(jìn)去的東西就可以把之前 “損失” 的時間彌補(bǔ)回來。重要的是,你總是想方設(shè)法地去學(xué)習(xí),時刻準(zhǔn)備著,等待機(jī)會的出現(xiàn)。
John Brothers,Make&Build(Atlanta,GA)的高級軟件架構(gòu)師,47歲
專長:企業(yè)架構(gòu)和開發(fā)、敏捷教練、數(shù)據(jù)可視化軟件。信用卡處理、IT 服務(wù)和移動應(yīng)用開發(fā)。
我喜歡解決問題,而且我喜歡尋找新的方式來解決問題。正因為如此,我似乎具備了與時俱進(jìn)的技能。
我最近正在使用 Node.js 開發(fā)一個項目,之前也用過 Hadoop、NoSQL,開發(fā)過 Android 應(yīng)用,也寫過 Go 語言代碼,還熟悉 jQuery 和 Bootstrap 的各種特性。
我也關(guān)注 Java 的最新動態(tài),還有 Spring、JMS、REST、JSON 和 JPA,以及其他相關(guān)的技術(shù)。
我也適當(dāng)關(guān)注技術(shù)生態(tài)系統(tǒng)的其他部分。在過去的幾年,我使用了 IntelliJ、Eclipse、Sublime、Emacs 和 Vi 這些開發(fā)工具,我很喜歡使用這些工具來解決各種問題。我一開始使用的是 CVS,后來學(xué)習(xí)了 Subversion,最近在學(xué)習(xí) Git。我也有 AWS 相關(guān)的經(jīng)驗。我還是一個獲得認(rèn)證的 Scrum Master、產(chǎn)品經(jīng)理和開發(fā)者。我寫過很多自動化單元測試(在構(gòu)建一個系統(tǒng)時,以測試驅(qū)動開發(fā)是我最喜歡的挑戰(zhàn)之一)。
我不害怕學(xué)習(xí)新東西。我使用 Ruby on Rails/Grails 開發(fā) Web 應(yīng)用,使用 Perl、PHP 和 Python 開發(fā)應(yīng)用解決業(yè)務(wù)問題。我也有 SOAP 和 AOP 的相關(guān)經(jīng)驗。
我嘗試著要成為一名全棧的開發(fā)者。我熟悉 Unix,經(jīng)常編寫 shell 腳本。我喜歡部署應(yīng)用、服務(wù)器和工具,不管是為了開發(fā)還是為了生產(chǎn)。我熟悉 SQL 和 NoSQL,并且知道它們各自的優(yōu)缺點(diǎn)。我了解 TCP/IP,我知道路由、DHCP 和各種代理的基礎(chǔ)知識。我構(gòu)建過 MVC 應(yīng)用、消息驅(qū)動的應(yīng)用、EJB 和基于 Spring 的服務(wù)。我也做過前端的 JavaScript 和 CSS 開發(fā)。我并不想成為一個可以拿獎的 UX 開發(fā)者,但最起碼可以完成基本的功能。
我計劃再干 21 年。如果我們從 Web 開發(fā)轉(zhuǎn)向基于 D-ware 服務(wù)器的開發(fā),我或許會落后;如果函數(shù)式編程最終一統(tǒng)天下,我或許會落后。不過真到了那個時候,我仍然心存希望。
Roger Whitcomb,Actian 公司(Palo Alto,CA)的軟件架構(gòu)師和軟件工程師,60歲
專長:C、C++、Java
在我準(zhǔn)備成為一名律師的時候,我才開始學(xué)習(xí)計算機(jī)科學(xué)(如果你可以想象這是怎樣的一種情況)……現(xiàn)在,我通過編寫大量具有良好文檔化和功能性的 Java 代碼來獲得我的生活收入(起碼現(xiàn)階段是這樣的)。
在 Windows 3.0 時代(大約是在 1986 年前后,我也記不太清楚了)我就開始在 Windows 上做開發(fā)。大約是在 10 年前,我轉(zhuǎn)到 Mac 上,之后就沒有再回到 Windows 上。我感覺自己就是一個使用 MacBook Pro 工作的極客……使用 C、C++、Java 和 Swift 進(jìn)行開發(fā)……
我最近的一份工作需要從頭設(shè)計一整個系統(tǒng),這也是我第一次做這樣的事情。我現(xiàn)在要跟上 Web 和移動開發(fā)的速度有點(diǎn)吃力,但離 “垂暮” 還很遠(yuǎn),盡管我已經(jīng) 60 歲了。過去我也獲得一些 “管理者” 相關(guān)的工作,不過我都拒絕了,我還是更愿意選擇編程工作……
不過,我也知道,我的一些與我年紀(jì)相仿(或者年紀(jì)更大)但已下崗的同事在找工作時遇到了麻煩(“是因為經(jīng)驗太豐富了嗎”),所以我知道人們是怎么看待那些過了一把年紀(jì)的人,認(rèn)為他們沒有未來。但是,我認(rèn)為最關(guān)鍵的是,你要為你的雇主持續(xù)地創(chuàng)造價值。
我目前是 Apache 軟件基金會 Pivot 項目的 PMC 主席。作為一名 Java 開發(fā)人員(Java 相關(guān)項目的提交者),我希望 Java 會永生。最起碼不要出現(xiàn)更好的語言,要我把所有的代碼都移植過去……
Scott Gartner,Silverback Learning Solutions(Boise,ID)的高級軟件工程師,50多歲
專長:框架、解析器、建模、圖形、數(shù)據(jù)庫子系統(tǒng)的設(shè)計和實(shí)現(xiàn),數(shù)據(jù)庫設(shè)計(SQL、DML、DDL 和 LINQ)、xml 設(shè)計、單點(diǎn)登錄方案(SSO)、互聯(lián)網(wǎng)應(yīng)用、Windows 應(yīng)用和動畫。
我已經(jīng)做了 34 年的程序員,而我的簡歷只要一張紙就可以裝下。所有超過 5 年的技術(shù)在簡歷上都只是一筆帶過。我有第二張簡歷,上面列出了所有我用過的編程語言和開發(fā)工具、數(shù)據(jù)庫、動畫系統(tǒng),等等。這樣,大家可以更容易了解我。我只在被問到的時候才會拿出第二張簡歷。
在大公司里(至少對于我來說),老程序員一般都想轉(zhuǎn)到管理層,這也是很常見的一種現(xiàn)象。我一直面臨著類似的選擇,但我不擅長管理,我只喜歡成為一名程序員或架構(gòu)師。
我發(fā)現(xiàn)我的記憶力大不如前,也沒辦法記住大型系統(tǒng)的全部模型。不過,我發(fā)現(xiàn)我那些豐富的經(jīng)驗變得越來越有價值。
我們不得不承認(rèn)我們的整個職業(yè)生涯必須不斷地接收訓(xùn)練成長,世事變化得太快,如果止步不前,終將被淘汰。
每兩年我就會學(xué)習(xí)一種新的編程語言,有一些是我自己想學(xué)的,不過大部分是因為技術(shù)發(fā)展的需要(也有的是因為新工作的要求)。這樣很有趣。目前我在學(xué)習(xí)數(shù)據(jù)倉庫(OLAP)、ETL 處理、Star Schemas 和 Cubes。
Brian Bowman,SAS(Cary,NC)的首席軟件工程師,56歲
專長:專利文件系統(tǒng)或數(shù)據(jù)庫的內(nèi)部組件、持久化數(shù)據(jù)結(jié)構(gòu)、目錄和索引搜索技術(shù)、服務(wù)器管理、DASD IO 驅(qū)動、機(jī)器碼生成或跨架構(gòu)的代碼轉(zhuǎn)換、對象持久化、客戶端與服務(wù)器端的接口、多租戶、分布式緩存,以及大規(guī)模的授權(quán)系統(tǒng)(實(shí)施、管理和日志)。目前在 SAS Viya 平臺上做 Cloud Analytics Service 方面的研究、設(shè)計和編程工作。
我目前團(tuán)隊成員的平均年齡為 50 歲,而且每一位成員都有超過 20 年的系統(tǒng)軟件開發(fā)經(jīng)驗。
我和我的同事們花了很多時間在編碼、調(diào)試、測試和解答系統(tǒng)架構(gòu)問題上面。有些同事還涉及硬件技術(shù)評估、在大會上呈獻(xiàn)演講,以及為開源社區(qū)貢獻(xiàn)力量,等等。
在過去兩年,我一直是某軟件公司精英團(tuán)隊的成員之一,這個公司有很多非常出色的工程師,很多都有高級的計算機(jī)和應(yīng)用數(shù)學(xué)等專業(yè)的學(xué)位。在那之前,我在一個小型的團(tuán)隊里工作了超過 10 年的時間,我們從無到有設(shè)計開發(fā)了一個多線程的元數(shù)據(jù)對象集群服務(wù)器。
團(tuán)隊里與我的關(guān)系最為密切的同事比我大 5 到 6 歲。在那期間,我獲得了 4 項美國國家專利……那些都是在我 40 歲之后獲得的。
只要我還能做出有意義的貢獻(xiàn),我就會一直工作下去。我多次給我的職業(yè)生涯充電,從最早的學(xué)習(xí)和研究,到后來的工作崗位的需要。這是我的本性,也是激勵我持續(xù)進(jìn)步的動力。
我不認(rèn)為現(xiàn)今的技術(shù)只能讓我干到 70 歲。我的職業(yè)生涯從 1983 年開始,我通過四項主要的計算機(jī)技能生存下來。
匯編語言級別的大型機(jī)系統(tǒng)編程。
基于 C 語言的多主機(jī)平臺的可移植編程,包括桌面、中型 Unix 網(wǎng)絡(luò)、小型機(jī)的后續(xù)產(chǎn)品(如 VAX),以及大型機(jī)。
多層集群服務(wù)器環(huán)境,由后端的多線程 C 以及處于中間層滿足高可用要求的 Java 組成,主要面向 Windows 服務(wù)器和 Unix 環(huán)境,也包括 Linux。
基于多線程 C 的大規(guī)模并行網(wǎng)格計算,滿足虛擬的無限伸縮。
雖然我所擁有的這些技能可以干到退休,但在未來的幾年,我還會將我的專業(yè)知識領(lǐng)域擴(kuò)展到機(jī)器學(xué)習(xí)方面。
或許在 10 年之后,對普通程序員的需求會大幅下降。如果一個人真的喜歡計算機(jī)技術(shù),但是在編程方面達(dá)不到更高的水平,那么可以考慮成為一名經(jīng)驗豐富的系統(tǒng)管理員。他們總有很多工作要做,比如配置、部署和維護(hù)系統(tǒng)。
Alec Cawley,DisplayLink(Palo Alto,California)的首席軟件研究員,60多歲
專長:嵌入式、多線程、多進(jìn)程、驅(qū)動、通信棧、C/C++、Java、Python、硬件。軟件架構(gòu)師 / 工程師,特別是在與硬件緊密接觸的軟件系統(tǒng),與硬件工程師一起工作,最大化發(fā)揮軟件和硬件的效能。
在我 62 歲的時候,我已經(jīng)是公司里年紀(jì)最大的開發(fā)者了,其他人大都是 40 多歲或 50 出頭。
我最年輕的同事應(yīng)該是 20 多歲,他們與我有 35 年的年紀(jì)差別,不過這不是問題。
我們要擁抱技術(shù)?,F(xiàn)在的世界與我的職業(yè)生涯剛開始的時候(穿孔紙帶時期的 Fortran)已經(jīng)很不一樣了,而變化仍然在持續(xù)。但反過來說,需要解決的問題總是很相似的,無非就是如何將人類的需求轉(zhuǎn)成計算機(jī)可以做的事情,以及如何避免犯錯、如何找出不可避免所犯下的錯誤。編程語言、開發(fā)環(huán)境、工具套件、API 等東西只是解決問題的手段,我們只是在需要它們的時候才去學(xué)習(xí)如何使用它們。
我是從穿孔紙帶開始的。即使是到了磁盤文件時代,我仍然是最早從行式打印機(jī)里讀取程序的人。后來就有了普通文本編輯器?,F(xiàn)在我使用具有語法高亮功能的 IDE。
我認(rèn)為,在 10 到 20 年的時間里,仍然需要軟件開發(fā)人員。在我看來,軟件開發(fā)者的工作就是把客戶的需求轉(zhuǎn)換成計算機(jī)執(zhí)行的指令,而這樣的工作是不可或缺的。這個世界總是需要一些高手,他們在計算機(jī)方面比普通人懂得更多,并且掌握了大量與工具相關(guān)的知識(軟件包、API、接口,等等)。
在選擇公司方面,我是幸運(yùn)的。我的大部分時間都花在了軟件開發(fā)上,而且總能做一些以前沒有做過的事情。軟件開發(fā)里總有一些重復(fù)性的工作,我可以想象得出那樣做是很無聊的。不過,如果你總是在做新的東西,那就不會無聊了。
我所在的嵌入式領(lǐng)域似乎比應(yīng)用程序更加能夠扛住潮流的沖刷。應(yīng)用程序每幾年就會有新的東西出現(xiàn),有些幾乎是曇花一現(xiàn),有些會持續(xù)一段時間,經(jīng)歷巔峰,然后逝去。而嵌入式一直保持堅挺,以 C 語言為基礎(chǔ),再融合一點(diǎn) C++。另一方面,硬件也在持續(xù)發(fā)生變化,這讓事情變得更加有趣。
Victor Volkman,Proquest(Ann Arbor,MI)的高級軟件工程師,54歲
專長:編程方面擅長 Python、Linux、C/C++、.NET,數(shù)據(jù)庫方面精通 MS Access、MySQL 和所有基于 SQL 的環(huán)境,還有 TCP/IP、企業(yè)系統(tǒng)自動化和分布式計算方面的經(jīng)驗。
架構(gòu)與管理是兩道平行線。在超過 250 人的公司里,技術(shù)人員一般都會有這兩條路可以走。
你喜歡你正在做的事情嗎?如果是,那么就繼續(xù)做下去。為了一點(diǎn)薪水而放棄你所喜歡的事情,整天擺弄會議和郵件,這樣會讓你得不償失。
每過兩年,游戲規(guī)則就會發(fā)生變化。不過不用為此感到苦惱?;?3 到 4 天時間學(xué)習(xí)新的編程環(huán)境,然后用它們來支持業(yè)務(wù)。在過去的 30 年,我?guī)缀趺?4 年就要學(xué)習(xí)新的東西。我所在的團(tuán)隊有 6 個人,年齡從 48 歲到 56 歲。我們經(jīng)歷了 3 到 8 次的技術(shù)更新。
以下是我的職業(yè)概覽。
從使用 C 和匯編語言編寫 MS-DOS 代碼開始
學(xué)習(xí)使用 C++ 和 MFC 開發(fā) Windows 應(yīng)用程序
學(xué)習(xí)使用 Unix Perl 開發(fā)基于 CGI-BIN 的 Web 應(yīng)用
學(xué)習(xí) C#
學(xué)習(xí) Java 和 JSP
學(xué)習(xí)智能手機(jī)開發(fā):iOS/Android/Blackberry
回到 Unix,開始使用 Python
AWS 開發(fā)(EC2、RDS、SQS,等等)
Kurt Guntheroth,軟件工程師,50多歲
專長:Windows、Linux/Unix、嵌入式;算法設(shè)計、C++、C、多線程和分布式、電信、安全、套接字編程、標(biāo)準(zhǔn)委員會成員、產(chǎn)品計劃和概念落地;TQM、ISO 9000、敏捷開發(fā)和傳統(tǒng)開發(fā)方法論。
軟件開發(fā)仍然是一個年輕的領(lǐng)域,工具和技術(shù)仍然在發(fā)生快速的變化。如果軟件開發(fā)人員不能持續(xù)地更新他們的技能,在不到 20 年的時間里,他們就會過時。所以,一個 40 歲的老程序員很快就會發(fā)現(xiàn)自己已經(jīng)無法勝任工作,而且前途堪憂。
好的開發(fā)人員會持續(xù)學(xué)習(xí),直到他們退休,比如 Ken Thompsons 和 Bjarne Stroustrups。不過,我們大多數(shù)人(特別是 40 歲左右的)最終都會意識到,我們并不能成為行業(yè)的大神。
C++ 變化很大,每幾年就會有新版本出現(xiàn),并且包含了全新的特性,我從來沒有停止過學(xué)習(xí)。也就是說,我已經(jīng)成為了一個非常有經(jīng)驗的 C++ 開發(fā)者,擁有超過 20 年的全職系統(tǒng)編程經(jīng)驗。如果有人要我給自己的經(jīng)驗打分,從 1 分到 10 分,那么毫無疑問,我會給打自己 9 分,因為比我更了解 C++ 的人只有那些寫書的人。后來,我寫了一本有關(guān) C++ 優(yōu)化的書。
編程是一件很容易的事情。你告訴它們做什么,它們就做什么。它們是可以信賴的,也是可靠的。對于代碼來說,無所謂好日子,也無所謂糟糕的日子,它們存在的意義就是在你與它們發(fā)生交互的時候。代碼可能會是難啃的骨頭,它們要求對細(xì)節(jié)的重度關(guān)注和相當(dāng)程度的腦力付出。
人類與代碼完全不一樣,人類狡猾、變化多端,而且不可能充當(dāng)工具使用。你不能直接告訴他們做什么,你要去影響他們,這樣他們才會做你需要他們做的事情。他們不會直接對你的輸入做出響應(yīng),而是間接地對你的鼓勵或者你所提供的一些獎勵物品做出響應(yīng)。雖然人類對獎懲很敏感,但如果只是通過這種方式來管理人類并不會奏效。管理應(yīng)該要像與家人、朋友和同伴互動一樣。如果你喜歡與人打交道,那么你就會喜歡上管理。如果你不喜歡與人打交道,那么你就不會成為一個成功的管理者。
薪水高的管理者比薪水高的程序員賺得更多,不過他們需要有很多名校的學(xué)歷背景,擁有良好的人際網(wǎng)絡(luò)和政治同盟,也需要有一定程度的冷酷無情來震懾大部分人。而編程不需要這種冷酷無情,這也就是編程很好的一個方面。編程是關(guān)于創(chuàng)新,而不是操縱。
所以,你要問問自己,你更喜歡哪一種交互模式,是代碼的確定性和優(yōu)雅,還是人類的友情和領(lǐng)導(dǎo)力?喜歡代碼完全沒有問題,那些高級架構(gòu)師和 CTO 也能賺很多錢。
James Grenning,軟件顧問,60多歲
專長:面向?qū)ο筌浖O(shè)計、測試驅(qū)動開發(fā)(C、C++、Java、C#)、嵌入式軟件、重構(gòu)、極限編程、Scrum、敏捷開發(fā)、發(fā)布計劃、增量計劃。C 和 C++ 單元測試框架 CppUTest 的主要貢獻(xiàn)者之一。嵌入式系統(tǒng)大會和敏捷大會的演講人。Agile Manifesto 的初始作者之一。
保持學(xué)習(xí)。我 62 歲了還在編程,我喜歡編程。
我會花一些時間在管理上,這對我來說是很重要的。不過我還是決定把編程和軟件設(shè)計作為我的最愛。在我從管理上學(xué)了一些東西之后,我決定還是回到我最喜歡的軟件開發(fā)上。
為了保證你的價值,你要確保 40 年的經(jīng)驗是不重復(fù)的。我們生活在一個快速變化的世界,不僅僅是技術(shù),也包括我們?nèi)绾螛?gòu)建軟件。
把東西做出來固然是好,但那樣還遠(yuǎn)遠(yuǎn)不夠。你還要讓產(chǎn)品和代碼更有用,能存活更長的時間。你要知道如何成為團(tuán)隊的一員。要想讓職業(yè)生涯長久、成功,同時能賺到錢,只是把東西做出來是遠(yuǎn)遠(yuǎn)不夠的。