為什么高級程序員不必?fù)?dān)心自己的技術(shù)過時(shí)?
Jacob Comer |?https://sourl.cn/cY6ny5
程序員是吃青春飯的嗎?等我們老了,技術(shù)過時(shí)了,公司有什么理由不裁掉我們,去雇一些既有活力、薪資要求又低的年輕人呢?這個(gè)老生常談的問題困擾著諸多漸入中年的程序員。本文告訴你如何增強(qiáng)自己的核心競爭力,在知識飛速更新的行業(yè)中站穩(wěn)腳跟,跨過“初級工程師”和“高級工程師”之間的鴻溝。
我曾在 CS 職業(yè)論壇/r/cscareerquestions 上回答了一個(gè)問題,該回答描述了我在程序員職業(yè)道路早期必須要涉足的幾個(gè)領(lǐng)域,并就此引申出我為什么認(rèn)為高級程序員不必?fù)?dān)心自己的技術(shù)會(huì)過時(shí)。
我認(rèn)為社區(qū)中有很多我們不太重視的軟技能,這些軟技能都有可能成倍地增加我們工作的影響力(作為個(gè)人貢獻(xiàn)者和技術(shù)負(fù)責(zé)人)。這些軟技能包括:
代碼審查禮節(jié);
如何優(yōu)雅地遏制范圍蔓延;
如何向其他部門直觀的方式解釋高科技問題;
如何在生產(chǎn)任務(wù)爆滿和日以繼夜的比賽中保持鎮(zhèn)定自若等。
我的這一回答獲得了很高的熱度,論壇中也有一些讀者請求我將其中的內(nèi)容整理成可永久保存的版本以便于打印出來閱讀,因此我決定將該回答總結(jié)成文章發(fā)到Medium 上。
/r/cscareerquestions 論壇上的原問題:
我喜歡編程,甚至在業(yè)余時(shí)間都喜歡學(xué)習(xí),但是我仍然覺得自己要學(xué)的東西太多了,就像在跑步機(jī)上一樣,永遠(yuǎn)在被迫追趕,永遠(yuǎn)學(xué)不完。
我腦海里有個(gè)嘮嘮叨叨的聲音告訴我,在這樣一個(gè)瞬息萬變的行業(yè)中呆著是很糟糕的。因?yàn)榈任夷昙o(jì)大了,自己使用的工具就舊了、過時(shí)了,年輕時(shí)候?qū)W到的經(jīng)驗(yàn)就沒價(jià)值了。而且我還有其他業(yè)務(wù)上的事要忙活,學(xué)習(xí)新技術(shù)就更困難了。
回到一個(gè)老生常談的問題上:公司有什么理由為我在舊技術(shù)方面的經(jīng)驗(yàn)付錢?他們完全可以聘請更有活力的孩子。年輕人熟悉最新的技術(shù),薪水卻只用付我的1/3(并且他們愿意工作到很晚)。
我覺得我可能應(yīng)該嘗試轉(zhuǎn)型當(dāng)個(gè)業(yè)務(wù)需求分析師、產(chǎn)品經(jīng)理或者某種商業(yè)領(lǐng)域的人,因?yàn)檫@些類型的角色通常不會(huì)像程序員那么吃青春飯。
雖然我并不想這樣,因?yàn)槲蚁矚g寫代碼,但我覺得自己好像別無選擇。畢竟我也只是一個(gè)普通的程序員,不是什么天才大牛。
作為一名程序員 ,編碼硬實(shí)力固然很重要。而題主如果想不明白公司為何在花點(diǎn)小錢就能打發(fā)剛?cè)胄械男氯说那闆r下,仍然樂于向我們這些“老年人”支付大筆工資,可以拿下面的問題問問自己:
你的代碼的可維護(hù)性如何?是否有其他工程師不停地輕敲你的肩膀,讓你解釋你代碼的每一行都是如何工作的?你的變量名具有描述性嗎?你的方法是直觀、易理解的嗎?當(dāng)你發(fā)現(xiàn)自己在復(fù)制粘貼很多行代碼時(shí),你是否能將這些代碼的功能寫入可重用的服務(wù)中?
別人能夠從你在拉取請求中留下的評論中受益嗎?你的反饋意見是有建設(shè)性,還是太過粗糙?當(dāng)你發(fā)現(xiàn)別人的知識存在缺口時(shí),你只是告訴他們“把這條線從ABC更改為XYZ”,還是有能力引導(dǎo)他們認(rèn)識到自己的方法可能不是最佳方法,讓他們成長為更優(yōu)秀的開發(fā)者?畢竟,同樣是學(xué)習(xí)新東西,授人以魚不如授之以漁。
如果今天有100,000個(gè)用戶創(chuàng)建帳戶,你的代碼是否會(huì)開始引發(fā)大量超時(shí)和500個(gè)錯(cuò)誤?你能保證公關(guān)能把這事兒兜住嗎?你知道如何基準(zhǔn)化你的更改并進(jìn)行證明嗎?
你如何將非常技術(shù)的問題分解為公司其他部門可以理解的簡單語言?向市場解釋為什么一個(gè)功能實(shí)際上不可行時(shí),你是否會(huì)讓大量的工程術(shù)語從嘴里溜出來?
你對面向?qū)ο蟮木幊逃猩羁痰牧私鈫??你提出的系統(tǒng)架構(gòu)是不是“頂多算說得通”?
你的寫作能力如何?在回復(fù)電子郵件時(shí),你是能把自己的意思表達(dá)清楚,還是發(fā)完郵件后同事仍然需要走到你的辦公桌旁,來詢問你更多的背景信息?
你是否會(huì)主動(dòng)提出想法,使你的團(tuán)隊(duì)效率更高?當(dāng)需要改動(dòng)現(xiàn)有進(jìn)程時(shí),你是否能夠向所有參與方說明收益?你能使所有人都對這一變化感到興奮嗎?你是否可以持續(xù)跟進(jìn),并確保新流程確實(shí)有效?
你尊重別人的時(shí)間嗎?當(dāng)你要求別人幫助你解決問題時(shí),你能否準(zhǔn)確描述你遇到問題的代碼庫的確切定位(如拋出異常的行號、你在問別人之前已經(jīng)嘗試過的debug方法,免得別人再浪費(fèi)時(shí)間重復(fù)你已經(jīng)做過的工作)?別人是否必須反復(fù)問你,才能從你嘴里撬出這些信息?在別人走到你辦公桌前,你已經(jīng)整理好要問的問題并在MacBook上打開了嗎?
在與其他部門一起確定大型項(xiàng)目的范圍時(shí),你對要開發(fā)的新功能的問題了解得有多深入?在開始編碼之前,你是否能夠考慮到每個(gè)邊緣情況?你是否能夠及早識別范圍蔓延并盡早制止,從而使團(tuán)隊(duì)免于周六加班?
你的多任務(wù)處理能力如何?你的大腦會(huì)超負(fù)荷嗎?同樣,在處理大型功能時(shí),比如涉及50個(gè)文件的功能……你可以一次將它們?nèi)勘4嬖谀X海中嗎?你有養(yǎng)成扎實(shí)的記筆記習(xí)慣嗎?你打算如何計(jì)劃跟蹤今天下班前彈出的500萬件事?
當(dāng)你編寫的一段代碼導(dǎo)致帳單頁面出錯(cuò),搞得團(tuán)隊(duì)首席工程師不得不取消他們的晚餐計(jì)劃、熬夜幫你解決問題時(shí),你會(huì)如何應(yīng)對?你會(huì)情緒激動(dòng)嗎?你還能理性思考嗎?你是否能夠擺脫這種情緒,并提醒自己,地球上的每個(gè)開發(fā)人員每兩天就會(huì)發(fā)布錯(cuò)誤代碼?
你了解業(yè)務(wù)運(yùn)作方式嗎?你了解為什么即使失業(yè)人數(shù)達(dá)到兩位數(shù),軟件工程師也可以要求如此瘋狂的薪水嗎?為什么編程是如此寶貴的技能?為什么客戶愿意為某些超級基本的Web表單向你的公司每年支付50,000美元?你是否覺得他們被騙了?
領(lǐng)導(dǎo)可以放心地讓你去負(fù)責(zé)面試候選人嗎?你是否擅長通過有限的信息來對人員進(jìn)行分類,并可視化他們和團(tuán)隊(duì)的適合程度?你能識別出在什么情況下,在工程方面優(yōu)秀的候選人卻不能很好地融入公司文化嗎?這種候選人你會(huì)建議錄取嗎?同樣,即使你和候選人在Zoom里聊了5分鐘就知道他不可能被錄取,你是否還可以確保他仍然可以從你們的聊天中學(xué)到東西?畢竟,語言在網(wǎng)絡(luò)上的傳播速度是很快的。
假如今天是12月28日,你被困在辦公室。你今年有點(diǎn)瘋狂,在9月中旬就把今年所有的帶薪休假糟蹋完了。此時(shí)此刻,同事們都休假出去high了。你還能按時(shí)上班嗎?領(lǐng)導(dǎo)不在身邊懲罰你,你是否打算半途而廢?這種情形下,是否需要領(lǐng)導(dǎo)強(qiáng)迫你你才能盡全力工作?
機(jī)會(huì)成本是一件必須考慮的事。你在平衡技術(shù)債務(wù)和推動(dòng)業(yè)務(wù)發(fā)展方面做得如何?你是否會(huì)重構(gòu)發(fā)現(xiàn)的每個(gè)微小的編碼樣式問題?畢竟大家都很難承認(rèn)“這段代碼很煩人,但它確實(shí)有效,需要花費(fèi)四個(gè)小時(shí)的清理時(shí)間,這段時(shí)間可以花在構(gòu)建其他功能上,而這是很多客戶都在請求的”。
你知道如何向你的下屬反饋他們的績效嗎?你和他們有良好的工作關(guān)系嗎?你是否將他們視為敵人?你是否正在積極嘗試減輕他們的壓力,使他們的生活更輕松?你是否曾經(jīng)說過“你們那邊有什么煩人的任務(wù)我可以幫忙削減嗎”?公司雇人都是有原因的,你的下屬可能比你想象的更有經(jīng)驗(yàn)和資格。
你有能力撲滅生產(chǎn)大火嗎?你是否會(huì)在遇到大麻煩時(shí)驚慌、不知所措(比如AWS中斷使網(wǎng)站癱瘓、不小心搞丟了customer_invoices表單、某些錯(cuò)誤導(dǎo)致了不同用戶帳戶之間的數(shù)據(jù)泄漏等)?你是會(huì)在壓力之下崩潰,還是會(huì)在解決問題的同時(shí)保持鎮(zhèn)靜,并與其他部門進(jìn)行有效的溝通?
雖然我說的話不能代表所有的初級工程師,但我確實(shí)知道自己八年前開始在該領(lǐng)域工作時(shí),在情緒方面的處理是非常糟糕的。
那時(shí)的我極度自信,與人溝通很糟糕,不能毫不猶豫地處理建設(shè)性批評,為無關(guān)的小事與我的老板激烈爭論,浪費(fèi)無數(shù)寶貴時(shí)間來解決根本不重要的問題,總是覺得自己應(yīng)該得到大幅度的加薪(卻不付出額外的努力來賺錢)并為之苦惱和抱怨,天天花 45 分鐘打乒乓球、玩游戲(在慢悠悠吃了一個(gè)小時(shí)午餐后)……
我為我的老板帶來價(jià)值了嗎?
是有的。
你能把當(dāng)時(shí)的我放心地關(guān) 30 分鐘,讓我在此期間獨(dú)立工作、不出幺蛾子、不拿頭撞墻嗎?
絕對不可能。
而高級開發(fā)者,就會(huì)在工作中解決問題,而非制造問題。
他們減少壓力。他們按時(shí)完成任務(wù)。他們知道如何編寫經(jīng)得起時(shí)間考驗(yàn)、可維護(hù)的代碼。他們值得更高的工資。他們對項(xiàng)目的方向可以有準(zhǔn)確的把控。他們可以發(fā)現(xiàn)當(dāng)前流程中的缺陷,并使每個(gè)人都接受他們的想法以進(jìn)行改進(jìn)。他們可以指導(dǎo)應(yīng)屆畢業(yè)生。他們處事冷靜,不會(huì)在周二與你的最大客戶的電話會(huì)議上情緒崩潰、破口大罵。
很多人想踏實(shí)當(dāng)個(gè)技術(shù)人員,并不想一直向上升去當(dāng)領(lǐng)導(dǎo)當(dāng)主管,我認(rèn)為這種想法沒什么問題。編程是目前最令人鼓舞的職業(yè)之一,許多企業(yè)愿意給經(jīng)驗(yàn)豐富的“老兵”開很多很多工資,來保證業(yè)務(wù)進(jìn)行順利。
話雖這么說,總會(huì)有少數(shù)工程師最終決定有一天掛斷 IDE,并開始過渡到管理層。
挺惡心的。
太長不看版:反正現(xiàn)在就我來說,轉(zhuǎn)管理層這條路是可選的,但絕對不是適合所有人的。
如果你具有扎實(shí)的溝通技巧,并且確實(shí)愿意開會(huì)開一整天(這樣你可以消除干擾、幫助隊(duì)友爭取更多時(shí)間來高效完成工作),那么你進(jìn)入管理層就是非常有意義的。
如果你由于其他任何原因轉(zhuǎn)行管理層(即使剛讀了我的博客文章,也因?yàn)槭艿焦椭鞯膲毫?、較高的薪水、害怕技術(shù)技能過時(shí)的焦慮等等),那你的日子可能就難過了。
回顧我的旅程,能從初級開發(fā)者過渡到高級開發(fā)者,歸功于我每周(在繁重的編碼任務(wù)之間)都試著花幾個(gè)小時(shí)專注于以下事件:
改進(jìn)我們進(jìn)行技術(shù)面試的方式,保證我們與候選人之間的溝通信噪比更高(如改善我們的面試問題、重新考慮我們的電子郵件模板、考慮是否要給面試者布置線下筆試題、反思我們對工作的描述是否準(zhǔn)確、我們向哪里投放招聘廣告、換位思考如果我正在尋找工作會(huì)如何回復(fù)該招聘信息、如何在候選人做出決定之前使其更深入地了解我們的公司文化和發(fā)展歷程等等)。
與產(chǎn)品團(tuán)隊(duì)合作,以更細(xì)致的方式對即將開展的工作進(jìn)行分類,從而使產(chǎn)品團(tuán)隊(duì)和最終要去接收J(rèn)IRA tickets的工程師之間的溝通更加順暢,而不需要磨嘰好幾個(gè)來回。
組織團(tuán)建活動(dòng)和團(tuán)隊(duì)聚餐。
當(dāng)CEO/CTO為即將到來的季度制定的目標(biāo)聽起來有點(diǎn)過于樂觀時(shí),向他們提出提醒和意見,以免團(tuán)隊(duì)其他成員受不了過分辛苦的工作而逃離你們公司。
最好能每周與所有大的客戶進(jìn)行一次確認(rèn)電話(親自回答他們所有的技術(shù)問題,并確保雙方之間的關(guān)系保持健康)。
用6個(gè)月的時(shí)間進(jìn)行積極的安全審核,不斷提醒客戶我們會(huì)認(rèn)真對待他們的隱私,并在公司發(fā)展的每個(gè)檢查點(diǎn)努力完善我們的流程。
找出其他開發(fā)人員在知識上的不足之處,然后讓他們查缺補(bǔ)漏(使用能激發(fā)他們學(xué)習(xí)興趣的方式):如使用vim宏處理CSV文件、Linux終端中實(shí)用的短命令、高級SQL命令、如何使PR描述更具描述性、解釋負(fù)載平衡器如何工作、討論合并和重新定基之間的區(qū)別等。
幫助設(shè)計(jì)團(tuán)隊(duì)在花數(shù)小時(shí)將線框轉(zhuǎn)換為高保真模型之前,先弄清楚哪些功能易于開發(fā)。
改進(jìn)我們的流程,讓其他部門知道何時(shí)會(huì)增加新功能(編寫更好的發(fā)行說明、在每周的內(nèi)部產(chǎn)品演示中回答他們的問題、幫助他們編寫客戶能理解的外部文檔),因?yàn)闆]人知道的功能不會(huì)解決任何實(shí)際問題。
上面的列表還可以一直一直往下寫,而其中大部分條目不需要用到 Visual Studio。
幾年后,許多高級工程師走的路都是類似的。你可能在不知不覺中就變成了小領(lǐng)導(dǎo),每天有 6 個(gè)人向你匯報(bào)工作。
推薦?:?Github掘金計(jì)劃:Github上的一些優(yōu)質(zhì)項(xiàng)目搜羅
推薦?:?Github 2020 年度報(bào)告,值得一看 -「編程雜感」第 5 期
我是Guide哥,Java后端開發(fā),擁抱開源,喜歡烹飪,自由的少年。一個(gè)三觀比主角還正的技術(shù)人。我們下期再見!
