大家好,我是若川。最近組織了源碼共讀活動《1個月,200+人,一起讀了4周源碼》,已經有超50+人提交了筆記,群里已經有超1500人,感興趣的可以點此鏈接掃碼加我微信?ruochuan12
你好,我是黃老師。
最近經常在知乎刷到一些類似的問題——《普通程序員真的無法度過 35 歲危機嗎?》。一般問這類問題的題主年齡都超過 30 歲,希望有人來分享他們的經驗。
我今年 33 歲,從畢業到現在工作也有九年多的時間了,即將到 35 歲這個年紀,那么我就從自身的工作經歷,結合行業中的一些現象,來談談我對這個問題的看法。
為什么是 35 歲
有沒有想過,為什么是 35 歲開始出現危機呢,其實 35 只是一個大概的數字,通常這個年紀左右的人都已成家,大部分人背負著房貸車貸,會一定的經濟壓力。
另外,隨著自身年齡的增加,身體素質也大不如前,不能像年輕人那樣去加班,甚至是熬夜。再加上上有老下有小,也需要分出一部分的精力去照顧家庭。
很多人就開始擔心,真的到了這個年齡,如果公司裁員,會不會首先把自己裁了?如果再出去找工作,會不會四處碰壁?
以上就是大部分人焦慮的原因,但仔細想想,這個難道不是普遍存在的問題嗎,似乎和程序員這個職業并不是完全綁定的,大部分行業其實都有這個問題。
那么為啥程序員貌似更加敏感,企業真的排斥大齡程序員嗎?
企業真的排斥大齡程序員嗎
在我看來,企業并不是排斥大齡程序員,而是排斥能力與自己工齡不匹配的大齡程序員。換位思考,如果你是企業老板,你會招一個工作十年以上,但能力只有工作兩三年經驗水平的大齡程序員嗎?
有人說醫生這個行業是越老越香,因為隨著工齡的增加,他們的經驗也越來越豐富。那么程序員難道不是嗎,在我看來是也應該是一樣的,工作越久的程序員,它的技術基礎更加扎實,工作經驗更加豐富,技術視野也更加廣闊。
程序員群體是一個金字塔的結構,目前的現狀是塔底的人很多,因為這行的門檻低,收入高,很多人涌進來。而在金字塔上層的人卻不多,實際上整個行業是非常缺技術能力強的程序員的。
所以優秀的企業對于那些厲害的大齡程序員,不僅不會排斥,反而非常渴求。企業在招聘一些架構師、技術專家的崗位的時候,也明確的寫到工作經驗 xx 年以上,這就充分的說明了不僅要技術能力強,豐富的工作經驗也同樣重要。工齡應該是你找工作的優勢,而不應該是劣勢。
但是如果你工作了很多年,仍然在金字塔塔底,那么被淘汰是必然的趨勢。如何讓自己爬上金字塔的上層,度過 35 歲危機呢?不要著急,我想先和你分享一下我個人的成長經歷。
我的經歷
我于 2012 年畢業于北京科技大學, 計算機科學與技術專業的碩士。我本科成績還可以,順利保送了本校研究生。研究生期間由于被導師派出去實習,很多課翹了,所以綜合成績不理想,但是我的專業成績還不錯,只要有那種編程的大作業課程,我的作業經常被同學作為參考的對象。
在校期間我并沒有學習過前端,而是自學的 C#。和現在的學生不同,那時我們并沒有多少學習的資料和途徑,不像現在網課非常多,我學習的途徑就是看書 + 寫代碼,當然在校期間我也在一些小企業做過實習和兼職。
直到快畢業我才尷尬地發現,一線互聯網公司都沒有 C# 的崗位,為了進大公司,我選擇了 Web 前端開發。雖然沒有前端經驗,好在我上學期間寫代碼比較多,參加過競賽也獲過獎,我在百度的導師還是讓我通過了,于是我就以一個前端小白的身份加入了百度。
百度的第一年,主要以業務開發為主。由于剛入門前端,前期主要做一些簡單的頁面功能開發,漸漸地接觸到一些動畫的開發和稍微復雜的交互邏輯。
記得當時我們節日經常會有一些運營抽獎活動,后端同學為此寫了一套通用抽獎程序。其實這些所謂的 Web 抽獎活動,無非都是前端發起一個抽獎請求,后端根據一系列處理返回抽獎結果,前端再通過某種動畫或者游戲的方式展示結果。
抽獎的流程都是類似的,因此在前端也是可以復用的。我和導師討論一番后,決定做一套通用的抽獎 JSSDK,使用方可以配置抽獎的游戲類型(轉盤、老虎機),通過這種配置的方式,讓使用方可以幾行代碼就實現了一套抽獎系統。
這一次經歷讓我學會主動發現業務中的痛點,用技術的手段提升研發效率。
工作第二年,我跟隨我的導師做了我們首頁的前端性能優化項目,并且這次的性能優化是從工程的角度來實現的,對寫業務代碼的人并無感知。
當時我們參考的是 facebook 的 BigPipe
的技術方案,把頁面分成了多個區塊 Pagelet
,每個區塊用前端 JS 的方式去渲染。因為當時使用的是 PHP 的 Smarty 模板開發的頁面,每個區塊就會用一個 Pagelet
標簽去標識,然后在 PHP 運行時動態分析和收集每個區塊的 JS、CSS、和 HTML,然后在渲染區塊的時候會先去加載 CSS,加載成功后渲染 HTML,最后執行 JS。
那個時候我們就已經實現了前端模塊化,每個 JS 模塊可以通過 require
關鍵字去加載其它的 JS 模塊,也支持 require.async
去加載異步模塊,這部分代碼是交給我來寫的。起初我對這塊并不是很了解,于是我就研究了業內的一些成熟方案比如 require.js
和 sea.js
的實現,最終配合我們框架的特點實現了一套完整的前端模塊化方案。
這個性能優化框架落地后,通過性能監控我們發現首屏性能優化效果并不明顯,雖然我們采用分塊渲染的方案,但還是在首次渲染就把所有區塊的資源都加載并且渲染了。
于是這個繼續優化的任務就又交給了我,我當時搜索了一些首屏優化的文章,其中一篇淘寶首頁的首屏優化文章給了我很大的啟發,文章中提到讓瀏覽器盡快渲染前提是讓首屏渲染的 DOM 盡量少。
而我們的首頁有好幾屏,確實非首屏的內容首次渲染是沒有必要的。于是我在之前實現的前端框架的基礎上,實現了延遲渲染 BigRender
:對于不可見區塊可以先不渲染,當用戶滾動頁面的時候再渲染相應區塊。這樣不僅僅減少了首屏渲染的 DOM 數,還減少不可見模塊的圖片和數據接口請求等。
通過 BigRender
的優化,我們頁面的首屏性能大幅提升,而且不論后面的業務寫的再復雜,也基本上不會影響首屏性能。
這一次經歷讓我學會遇到問題可以參考業界的主流解決方案,并學習它們的文章或者是源碼。
我們開發的這一套前端框架,構建和打包部分還是用 PHP 實現的,我使用 PHP 實現了一個在線點選打包的工具,在上線前需要通過這個工具來實現 split chunks,但這是一個需要人工參與的過程,并沒有實現全自動化構建流程。
當時百度內部在推一個前端構建工具 FIS,并且他們也有一套基于 FIS 搞的 PHP + Smarty 的前端解決方案。但是這套方案相比于我們實現的前端框架,僅僅是實現了前端模塊化開發,并沒有任何性能優化方面的提升。
實際上 FIS 本身的實現還是很靈活的,支持插件化,有點 webpack plugin 的意思。于是我決定研究 FIS 的構建機制,并參考它現有插件的實現,然后編寫相關的 FIS 插件來配合我們的運行時框架,最終這套東西被我搞出來了,實現了前端的自動化構建方案。
當初做完 FIS 這一套東西,我覺得還不夠,非常想把自己這套前端框架推到業內。因為當時 FIS 主要還是百度內部在用,業界比較火的構建工具是 gulp,于是我就研究了一波 gulp 并開發了一整套 gulp 的插件來模擬 FIS 的構建行為。雖然 gulp 這套方案做成功了,但是距離我想推廣出去還差的很遠,還是太年輕了。
這一次經歷拓展了我的廣度知識,我學會了如何使用 Node.js 去編寫前端構建工具。
后來由于做的業務對技術的要求也并不高,在百度的成長不大,于是在百度工作三年后,我選擇了離開,加入當時高速發展的獨角獸公司——滴滴。
當時面試滴滴公共部門的時候和滴滴一位技術大牛相談甚歡,雖然我只有三年工作經驗,但他對我還是很認可的,并給我發了一個難以拒絕的 offer。
來到滴滴的公共部門,讓我體驗到在大公司里創業的感覺。作為這個部門的第一個前端,這里的基建幾乎是零,部門經理第一次找我聊天,跟我說的也就是我們大概要做什么樣的東西,你看著搞吧。
百度的基礎設施是相當完善的,從項目的開發到最終上線,都有成熟的系統。而來到滴滴這邊,幾乎什么都沒有,連前端靜態資源的回源機器,都是我去找 op 申請的。
來滴滴后,我的開發方向從 PC 端轉到了移動端,在百度做的前端框架也不再適用。當時前端工程化在國內興起也沒多久,這方面的布道者張云龍老師發表了多篇博客,我讀了后深受啟發。
張云龍在 UC 搞了一套基于 FIS 二次開發的 WebApp 模塊化開發框架 Scrat。我看了后覺得在滴滴也很適用,于是我向他詳細了解了一下,就在滴滴把 Scrat 搞起來了,前后端分離的開發模式,且用 zepto 作為運行時增強的庫。
這一次經歷讓我體會了自己一個人把整個前端工程化的方案搭起來的過程。
由于我加入的是滴滴公共部門,需要編寫很多公司級別的 JSSDK,比如 H5 統一登錄 JSSDK,打通移動端各個頁面的登錄態;統一地圖 JSSDK,對高德地圖和騰訊地圖做了封裝;JSBridge SDK,抹平了 Web 與 iOS、Android 端通訊交互差異。
這些 JSSDK 的使用者也是開發人員,因此除了功能完善,靈活好用也是非常重要的。在開發這些 JSSDK 的過程中,我也參考了一些曾經看過的源碼中好的設計思想。
這些經歷不僅讓我學會如何開發好用的 JSSDK,也提升了我在公司內部的影響力。
我在滴滴的主要業務是開發 WebApp 的主頁,做的事情就是集合各個業務線,保證它們的順利集成和獨立上線,其中的難度和挑戰我幾年前在《滴滴 webapp 5.0 Vue 2.0 重構經驗分享》中說過,整體的架構設計有一點“微前端”的味道。
這一次經歷鍛煉了我在架構設計方面的能力,以及對外溝通的能力。
由于想回老家發展,18 年我從滴滴離職加入了現在的公司 Zoom。
其實從 12 年畢業的時候,我就一直在關注老家的就業機會,但合肥這個二線城市并沒有好的互聯網公司,直到后面聽說 Zoom 這家公司還不錯,我就在朋友的推薦下面試入職了 Zoom。
說到回老家發展,這里要多說一句,除了一直關注老家的就業機會,我給自己定的目標也是以一個技術專家的身份回去。
在 18 年左右的時候,我就有一種感覺,至少在前端這個領域我不太需要別人的指導了,我靠自己就可以持續學習新的技術為我所用。直白一點說就是在北京技術已經學夠了,可以回去建設家鄉了。
來到 Zoom 后,我對 Zoom Web 項目的前端開發現狀做了充分的研究,分析其中的痛點和問題,然后結合 Zoom Web 產品的特點我設計了一整套前后端分離的架構設計方案,包括了項目初始化、本地開發、聯調、測試、上線等各個環節,并在多個項目中落地。
在這個過程中,我還產出了很多工具和插件。通過新的架構方案,前端可以擁有最先進的的開發體驗,極大提升了開發工作效率;從項目部署角度,前端可以獨立發布部署項目,從龐大的 Web 工程中解耦,可以支撐項目的快速迭代、灰度發布等。
同時,我還基于 ElementUI fork 出 ZoomUI,并致力解決 Accessibility 問題和性能優化,另外除了基礎組件之外,我們還針對一些業務場景設計了業務組件,極大提升開發效率。
除了做前端架構和公共組件,我也獨立負責了一些復雜的業務開發,也經常幫助同事解決各種技術方面的疑難雜癥。雖然我已經工作多年,但仍然堅持在一線寫碼,并樂此不疲。
其實回顧我這些年的工作,不難發現,除了日常業務開發,我還做了很多不一樣的活,嘗試了不同的方向,每一年我都很有收獲。
但實際上我也并不是一路順風順水的,因為很多時候做的事情對當時的自己都是有一定挑戰的,也會遇到很多困難,有些時候也是很痛苦的,甚至需要摸著石頭過河。不過一旦克服了這些困難,我會有一種開竅的感覺,也會非常有成就感,技術也得到了提升。
除了工作之外,業余時間我也發揮余熱,比如做課程、寫書和寫文章,它們在給我帶來額外收入同時,也提升了我的能力。
在做這些事情的過程中,我把 Vue.js 源碼都翻爛了,也反哺了我的工作。比如為了支持 CSP,我把 Vue.js 2.6.11 版本魔改并支持了 CSP;我還研究了 Vue.js 源碼的一些性能優化技巧,應用到我的開發工作中。
我的理念是掙外快可以,但掙外快的過程中一定要提升自己,否則就是在浪費時間。當然,做這些事情前提是你的技術能力已經達到一定程度了,如果你還處于初中級的水平,且自學能力不強的話,我非常推薦去買一些付費課程學習。
對于我而言,是不存在 35 歲危機了,因為我能夠持續為公司帶來價值,反過來我的公司也是非常需要前端領域的技術專家。而且我加入的是一家快速發展的公司,公司的業務在行業內領先,現金流也非常充裕,我不用擔心公司會出現什么問題。此外,公司的工程師文化氛圍我也非常喜歡,WLB 的節奏也舒服,我在公司繼續工作十幾年也沒啥問題。
即使我真的因為某些的原因不得不離開現在這家公司,以我的經驗和技術能力相信很多優秀的公司也會向我拋出橄欖枝。
普通人的成長
可能一些人看到這里會說:老黃你也太凡爾賽了,又不是人人都像你一樣畢業就能進大公司。沒錯,可能我的讀者有部分還沒進過大公司,學歷也很一般,那么這些人想要成長,想度過 35 歲危機,該怎么辦?
如果你恰好是這些人中的一員,在我回答這個問題之前,你先想清楚兩件事情:你是否真的熱愛寫代碼?你愿意付出更多的努力嗎?如果你做不到這兩點,那么大概率到 35 歲還是一個平庸的代碼熟練工。
很殘酷吧,但現實就是如此。首先為什么要熱愛寫碼,因為興趣驅動還是很重要的,它能驅使著你主動學習,也能讓你在遇到困難和挑戰時堅持下去。
其次為什么需要付出更多的努力,因為相比于那些 985、211 畢業的應屆生,你的起點已經落后了。他們在學生階段已經足夠努力,而且很可能已經養成了好的學習習慣,如果你想追趕他們,不付出比他們更多的努力幾乎是不可能的。
我這并不是在制造焦慮,而是讓你們明白一個道理,沒有人能隨隨便便的成功,各行各業都是如此,那些你眼中的大佬、成功人士背后付出的辛苦只有他們自己能體會到。
那么具體該怎么做呢,我在《解密初、中、高級程序員的進化之路(前端)》《如何成為公司獨當一面的工程師》
知道自己該怎么做后,最好還要列一個計劃,在什么時間內要達成一個什么樣的成長目標。隨著年齡的增長,特別是成家后,一些瑣事確實會分散我們一部分精力,所以你最好要在 30 歲之前成為一個資深及以上級別的研發的工程師。
大公司需要什么樣的人才
如果你沒有在大公司待過,我的建議還是最好能加入一家大公司工作幾年。相比于小公司,大公司往往在薪資待遇、人才培養、晉升機制等方面都更勝一籌。而且大公司有很多厲害的人,跟他們一起共事,你會學的更多,成長更快。
那么大公司希望招什么樣的人才呢?
對于應屆生而言,喜歡招學歷背景好的,有實習經驗的,技術扎實的,學習能力強的,主觀能動性高的。
對于社招而言,喜歡招有大公司背景的,工作經驗豐富的,技術扎實的,學習能力強的,主觀能動性高的。
可以看到,技術扎實,學習能力強,主觀能動性高這三個素質,無論校招還是社招,都是大公司看重的。
技術扎實
所謂技術扎實就是你熟練掌握了你的專業領域內的技術知識。想要做到技術扎實,就需要不斷地理論學習和實踐論證。
你可以通過看書、看視頻等方式學習,然后在工作中去應用你學習到的知識。因此我們學習的技術知識,也應該和工作內容相關。
顯然,如果想要技術全面,你可能需要嘗試不同的工作內容,然后通過反復的學習和工作論證去強化你的技術。
學習能力強
對于應屆生來說,好的學歷背景和在校成績就是學歷能力強的一種體現;對于有工作經驗的來說,能夠快速學習并掌握一門新技術是學習能力強的表現。
那么,如何提升學習能力呢?我的經驗就是多思考,多總結,刨根問底。這就是為什么我喜歡看各種源碼的原因,從源碼中我不但能了解各種技術背后的實現原理,還能學習到很多好的編程思想和開發技巧,并總結為我所用。
不同技術棧之間也會有一些相通或者是借鑒的地方,因此精通一門技術棧,你再學習其它的技術會容易的多。
主觀能動性高
主觀能動性高體現在會主動承擔一些有技術挑戰性的工作,以及主動去學習和研究一些新技術。
主觀能動性高的人通常有一個特點,就是對技術感興趣,他們樂于并崇尚用技術的手段去解決問題。他們要么活躍在開源社區,要么經常發表高質量的技術博文。
這類人基本上把職業當做了愛好,所以在工作上的產出有些時候會超出預期,這樣的人才企業怎能不愛呢?
這些事情最好別做
前面都在跟你聊應該怎么做,接下來我想跟你分享哪些事情最好別做。
上班摸魚
很多人抱怨活干不完,需要經常加班,實際上大部分都是因為工作效率低。工作效率低通常有兩個原因,一是自身技術能力不夠,導致開發效率低下,還會經常花時間修 bug;另一個就是上班摸魚,摸魚不僅僅浪費大量時間,還會導致工作不夠專注,影響工作效率。
技術能力是需要花時間提升的,你沒有辦法突然就變成一個技術大牛,但是上班摸魚是可以杜絕的,最好給自己設置一個免打擾時間專心 coding,提升自己的工作效率。
一旦你的工作效率提升了,那么你幾乎是不用加班的。我的九年工作經歷就很少加班,而且我只接受偶爾加班,比如突擊做某個緊急項目,但這不能成為常態。如果加班成為常態,你就應該思考是自身的問題還是公司的問題,如果是公司問題,果斷換個工作吧。
炒股
最近幾年 A 股行情不錯,很多人都開始炒股。股市的 721 規律,也就是 7 虧 2 平 1 盈,大部分散戶都有一個錯覺,覺得自己就是那個盈利的。
但現實是很殘酷的,就算行情最好的 2015 年牛市,大部分散戶都是虧錢的。不論從消息面、資金、專業程度,散戶都完全不是主力資金的對手,還喜歡往里面沖,這不是在給主力送錢嗎?
我自己也有炒,但是我對股市研究不深,個人感覺我的行為和賭博沒啥區別。雖然我炒股是賺錢了的,但是我非常清楚自己之所以賺錢完全都是靠運氣,憑運氣賺的錢最后還會憑實力虧掉的,所以我賺了一波后果斷清倉不玩了。
如果你只是那種要代碼的非專業選手,我是非常不建議炒股的。一是因為不專業,不是主力的對手,就好比你只是一個拳擊愛好者,但會站在擂臺和一個專業拳手打拳嗎?另一個原因是炒股非常分散精力,你會經常忍不住去盯盤,浪費時間。
炒股波動太大了,你賺錢了,有些時候比自己上班的收入還高,就會產生一種上班不如炒股的錯覺,但稍微多想一想就知道,國家怎么可能允許散戶隨隨便便炒股就能賺錢,那樣的話誰還上班?事實上股市大部分時間都是在跌,你看著資金的賬戶一點點地變少,還是非常影響心情的。
你可能會說,那我多花點時間研究炒股唄。如果你資金不足 20w,你花時間研究炒股帶來的收益是遠不如你花時間投資自己成長帶來的收益多的。
我并不反對投資理財,我的建議是專業的事情交給專業人士做,你可以利用閑錢去定投一些基金,買一些理財產品,并不需要花多少時間在上面。
過度娛樂
工作勞累了一天,你回到家放松放松,勞逸結合是一件很好的事情,但是一定要注意一個度。如果回到家,刷一晚上短視頻,或者是打一晚上游戲,這就都屬于過度娛樂。
我的建議是分配一些時間來學習充充電,并做些運動鍛煉身體,這才是健康的生活方式。
其它出路
我本人偏愛寫碼,因此我會選擇技術專家的發展路線。除此之外,做技術管理,自主創業也是程序員的一個出路。
但是不管是做技術管理,還是自主創業,都是建立在你在技術這個方向已經做的足夠久,且有不錯的技術能力的基礎上的。
對于技術管理來說,管理者的技術能力越強,底下的人就會對管理者越認可;對于自主創業來說,對技術的要求會更高和更全面。
當然,由于我對這兩部分的認知有限,就不展開講了。但是要記住,程序員的三大發展方向:技術專家、技術管理、自主創業,前期都需要足夠多的技術積累。
寫在最后
通篇下來,核心思想就是只要技術足夠強,就不會有 35 歲危機,畢竟程序員就是吃技術這碗飯的,技術強的人怎么會丟飯碗呢?所以趁著自己還年輕,應該多努力花時間去提升自己的技術,這樣等到你 35 歲的時候,不僅不用擔心工作的問題,還可以有時間陪陪家人,享受生活。
當然想要提升技術并非易事,要敢于跳出自己的舒適區追求進步,要能熬得住突破瓶頸長時間的寂寞,要多年如一日的堅持。
此外,加入一家好的企業也很重要,比如我司(有想來的歡迎私信留言)。但是加入的前提是你的技術能達到企業用人的標準。因此工作中的技術積累非常重要,不要等機會來了,你卻抓不住。
相關閱讀
《滴滴 webapp 5.0 Vue 2.0 重構經驗分享》:https://github.com/DDFE/DDFE-blog/issues/13
《解密初、中、高級程序員的進化之路(前端)》
《如何成為公司獨當一面的工程師》
最近組建了一個江西人的前端交流群,如果你是江西人可以加我微信?ruochuan12?私信?江西?拉你進群。
推薦閱讀
1個月,200+人,一起讀了4周源碼
我歷時3年才寫了10余篇源碼文章,但收獲了100w+閱讀
老姚淺談:怎么學JavaScript?
我在阿里招前端,該怎么幫你(可進面試群)
·················?若川簡介?·················
你好,我是若川,畢業于江西高校。現在是一名前端開發“工程師”。寫有《學習源碼整體架構系列
從2014年起,每年都會寫一篇年度總結,已經寫了7篇,點擊查看年度總結。
同時,最近組織了源碼共讀活動
識別上方二維碼加我微信、拉你進源碼共讀群
今日話題
略。歡迎分享、收藏、點贊、在看我的公眾號文章~