1. 程式人生 > >如果我告訴你,程序員這條路很難走,你還要堅持走下去嗎

如果我告訴你,程序員這條路很難走,你還要堅持走下去嗎

程序員 職場

技術分享圖片

可能很多人都覺得程序員是個高薪行業,動不動就聽見誰月薪幾萬幾萬,心裏羨慕不已。回頭看自己每個月手裏可憐的工資條,心裏更是煩躁不已,於是乎下定決心一定要像人家一樣,月薪幾萬。但是實際上,高薪程序員並不像人們想象中的那麽輕松。

許多程序員自稱碼農,因為每天事情總也做不完,而這些工作也沒有給自己帶來職業上的提升,總在原地打轉,自己的工作似乎隨時可被新人替換,可有可無。於是,年輕些的考慮著轉管理或者轉行,年紀大些的則被所謂的40歲危機困擾焦慮著。

有些程序員工作高效,能力出眾,每當機會來臨時總能獲得職位上升,收入迅速的提高,個人價值的提升又從精神上給自己帶來滿足感,常常鬥誌昂揚,而這樣能解決復雜問題的程序員才叫高薪程序員,也叫工程師。


一、職場軟技能

事實上,互聯網行業的項目需求從來不是靜態的,項目是動態的、永遠在不停叠代,所以即使你能力再好效率再高,也不可能讓你處在空檔期,所以,相比其他行業程序員們總是很容易處於忙忙碌碌的狀態中。另一方面,項目裏哪怕沒有新功能了程序員自身也有很大的欲望去優化、重構代碼,還是忙忙碌碌。但是,到底客戶的問題、行業的痛點有沒有真正解決?項目給公司帶來多少收益?我手頭的工作對公司下一步的發展有何意義?這些通常不在程序員們的思考範圍:這與我何幹?我是專業寫代碼的,這些應該由老板、產品經理、運營、銷售、其他業務部門去考慮,我只需要精益求精把代碼寫好寫穩定就可以了,我預留了許多擴展接口,到時公司需要的話去擴展模塊就行了,我何必要知道與我工作無關的事?這個想法其實是讓許多程序員始終停留在碼農階段,與那些卓越的工程師同等辛苦,但待遇層次總是相差甚遠的罪魁禍首。


吳軍老師在《見識》一書中把工程師定義為5個等級,相鄰的等級間會有10倍的差距,而第五級工程師以下其實就是碼農。

技術分享圖片

實際上,能夠到達第五級,就已經從碼農提升為工程師了。比如,現在有一個任務需要實現一個功能子系統,一個第五級工程師能夠與產品經理深入挖掘需求及其到底是否解決了問題,能夠用算法建模解決現實中的問題,能夠獨立跨部門溝通獲取所需的資源及協調其他工程師的幫助,能夠正確的使用各種開源組件保質保量不重復造輪子,能夠解決開發過程中出現的各種坑,按時交付出高質量的產品,這才是一個合格的第五級工程師了。碼農離第五級工程師到底有多遠呢?大家可以觀察下身周,碼農往往溝通技巧欠缺,不願深入理解需求的意義,不願深入研究某個技術或者框架的意義,或者只是深入研究某些語法糖卻不考慮維護代價,喜歡造輪子,只要接手別人的工作先不願精讀代碼而是想著按自己最熟悉的方式重構,做到一半時各種困難下開始退縮求助,於是交付時不斷的延期再延期。。。

成為一個合格的第五級工程師,需要哪些條件呢?

1、要有欲望成為高階工程師!

無欲則剛,如果內心就不大想成為一個高級工程師,那麽肯定不願付出更多的努力,肯定不會主動的加班,也不會在不加班的時候腦袋裏還在想著問題和項目上的事,而加班或者正常上班時敷衍的時間比例很高。從低一級邁向高一級時,若不願意付出比同級人更多的努力,又談何升級呢?在任何領域,努力一定是成功的必要條件。

2、懂得做減法的學問。

事務性的工作總是非常多的,同時也會接到很多需求功能以及測試提交的bug,還有興趣愛好呢?!很多想看的演唱會、連續劇、電影等著你,還有許多朋友聚會應酬要參加,還有朋友圈要刷刷,微博大V們的文章要讀讀,股票要炒炒,理財要學學,遊戲要玩玩,所以,忙忙碌碌裏職業技能沒有得到一點增長。

或者你效率奇高,但你要做的事太多了,效率不等於效能,效能是指完成的事情*事情的意義。事情要做到100%完成,而且必須是重要的事。既然你想成為高階工程師,那麽請把不重要的事從你一天的計劃中移除吧。就像上圖中吳軍老師所說的,每升級到下一級,你的收入都將呈現10倍上漲的趨勢,這收益遠遠大於你去做自己並不擅長的炒股所獲取的收益(長期來看)。而所謂的應酬、各類資訊、個人愛好,並不是只要清楚的認識到自己想要什麽就能夠正確的做減法,這需要你的認知升級。

而在leader分配下來的任務裏,也需要你準確的判斷出優先級,一定要先把最重要的事百分百的完成。這需要你與leader間密切溝通,因為技術管理者所掌握的信息量遠大於你,而且信息在時刻變化著,他那裏的信息及時度也超過你,唯有從你的上級那裏才能快速的了解到工作的優先級。這也需要與產品經理、上下遊部門間密切溝通,這樣你才能準確的了解到你的工作對別人的意義,這也有助於你判斷優先級。

總之,做減法是一門學問。

3、有效的做到10000小時定律。

一萬小時定律是作家格拉德威爾在《異類》一書中指出的定律。“人們眼中的天才之所以卓越非凡,並非天資超人一等,而是付出了持續不斷的努力。1萬小時的錘煉是任何人從平凡變成世界級大師的必要條件。”他將此稱為“一萬小時定律”。要成為某個領域的專家,需要10000小時,按比例計算就是:如果每天工作八個小時,一周工作五天,那麽成為一個領域的專家至少需要五年。這就是一萬小時定律。

顯然,並不是任何人在一個領域工作五年就能成為大師的。有效的做到這一萬小時的關鍵是,這一次的努力請最大程度的復用上一次努力的結果!例如當下許多互聯網從業者一年就跳槽一次,先不談是不是應該跳槽(如果只是想通過跳槽漲薪,而不是原公司沒有新的位置帶給自己職業發展,那就有問題了),首先你能感覺到跳槽之後是在最大程度的復用上一家公司裏自己的努力嗎?如果一切是在從頭開始,包括新的開發工具、新的技術棧、新的業務場景、新的產業鏈、新的合作關系、新的同事圈子等,那麽很顯然十萬小時也不夠成為專家的。

或者從另一個角度,有些人經常換工具、框架、編程語言,如果你能夠在學新技術時,始終感覺到與自己熟悉的技術一一對應,基於此能夠輕易的舉一反三,那麽這就是在高效的復用上一次的努力。反之,或者你上一個技術還學得不到家,換了新技術後很難敏感的發現共通性,這就很糟糕。

4、抓住關鍵節點。

當我們手頭有許多小功能,或者與許多團隊有交互時,往往經常被開會、被溝通,事情也又雜又多。此時,務必把手頭上的事在分好優先級的基礎上,確認每件工作的幾個關鍵節點:完成時間點,中期交付或者需要他人交付產品、文檔給你的時間點,需要協調其他人啟動的時間點等等。抓住了這些時間點,往往一頭亂麻的事就自然理清了。當我們的時間非常碎片化時,一定要盡力抽出大塊整塊的時間,這能讓我們有時間思考,而且減少了任務切換的成本,而這依賴於很好的抓住關鍵節點。

5、常識的重要性。

一個有誌向的農民和一個航空航天專業的畢業生都在做飛機,其最大的不同在於常識。對於不同的程序員來說,常識並不相同。我有一些同事本不是計算機專業,有些還是先做了幾年其他行業再轉過來做前端程序員。這樣,如算法復雜度、網絡模型等計算機科學體系裏的基礎知識對於他們就不再是常識,而常識通常是將事情做到50%程度的關鍵。常識的缺失會導致與同級程序員相比做事情事倍功半,這從長期來看一定會讓你早早的觸及職業天花板,而補足常識的缺失相較起來還是比較容易的(畢竟這本不是什麽尖端知識),但許多人長年不願在此下功夫。

6、有後勁兒。

有些人工作年限越久,競爭力越強,職業上升空間很大,反例其實更多,而這種有無“後勁”在我看來其實關鍵在於有沒有科學的職場做事方法。比如習慣做乙方的外包程序員,轉到甲方開始做產品時,還是習慣於把產品當成別人家的孩子,缺乏一種主人翁的精神,而在任何公司做任何產品,如果沒有一種把自己的產品當孩子的感覺,就很容易向其他人表現出喜歡推諉、不肯擔責任的特點,而缺乏主動精神往往導致項目前期準備工作不足,後期疲於奔命。沒有主人翁精神,往往對整個研發鏈條自己這塊以外的部分不願意了解,這樣沒有辦法管理好你的上遊和下遊,最終導致自己的工作困難重重,難出成績。

對自己的產品有主人翁精神,會讓自己保有一種使命感,進而相對更敬業、更有激情,而這對團隊是有正向激勵作用的。而且,有這種精神後,往往會想辦法把工作流程標準化,把知識分享給團隊同事以提升團隊的作戰能力,進而讓產品更優秀。自己的工作有一點提升,與同時帶動其他同事有一點提升,這是有量級差別的。當有晉升機會時,主管們自然更偏愛把機會給這樣的同事。

7、如何提升

關於這個問題,身邊的很多朋友都有問過我,心理學上有這樣一個詞,叫“花盆效應”,指的是人如果在舒適的“花盆”中待久了,就會不思進取、安於現狀。當你對現狀心滿意足,日復一日地去做著同樣的事情,不再將時間花在提升自己,那麽你的成長見識,將永遠停留在原來的那塊區域裏。
曾看到這樣一句話:一個人老去的標誌,絕不是老成穩重、沈默寡言,而是不肯再嘗試,不肯再容許自己置身不熟悉的境地。當你停止了學習、固步自封,將自己囚禁在得過且過的牢籠中,那麽你已經朝平庸邁進了一大步。

說到這裏,也給大家推薦一個架構交流學習群:650385180,裏面會分享一些資深架構師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高並發、高性能、分布式、微服務架構的原理,JVM性能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,相信對於已經工作和遇到技術瓶頸的碼友,在這個群裏會有你需要的內容。

技術分享圖片

二、對於年齡問題的思考


關於大齡程序員的發展問題絕對是程序員話題討論榜單上的「定海神針」之一,無論是剛工作的程序員還是比較資深的程序員,對於所謂的「中年危機」十分警惕和關心。

最近看到有人在論壇上抱怨,給他推薦機會的獵頭同學告知他,大部分的互聯網公司不會招聘 32 歲以上的純開發。關於這個問題,offer 君有些市場洞察忍不住分享給大家:

首先,公司是不是不招大齡純開發?

是,大齡程序員找純技術方向的工作挺難的,但並不是沒有。

那麽,為什麽?

我們從目標倒推,不難理解背後公司的本質,公司認為我們給了你 P7 及以上的評級,公司希望你能夠提供更多的價值。的確,純技術的進步也是這種價值的一種體現;但但凡經歷過晉升的工程師都知道,在大部分以業務為導向的公司裏,你從 P7 及以上往上升他們更看重的是你能夠為業務提供什麽樣顯著的增量價值。

說白了就是,32+ 歲以上的程序員,如果不能在 title 上有所進步,比如從資深程序員進階到架構師,那麽市場會直白的告訴你,你想要追逐更高薪的工作很難。

說到這裏,基本回答了問題:為什麽很多公司都不招大齡碼農。

回到開頭,我們有提到,這些工作並不是沒有,那麽這些工作都給了什麽樣的「大齡碼農」呢?

追求技術導向的大齡碼農有哪些選擇?

尋找技術導向公司、GEEK 一點的崗位,並且成功入職的,工作5年及以上的碼農中,大部分有兩種選擇:

1)降薪、平薪跳槽加入下一家公司;

2)進階成為架構師、首席架構師。

技術分享圖片

三、程序員要考慮的那些事


1、價值論

在公司內你的收入可能和你牛不牛沒關系,而和你能為雇主提供多少價值有關。如果你在一家建做網站的公司上班,精通機器學習和編譯原理的你可能沒有會JS寫出完美動畫的同學收入高。

所以選擇適合你能力的最有價值賽道很重要,不僅有利於你能力的發揮,也能讓你獲取豐厚的收入匯報。正如古典老師說的職場賽道理論,選擇不同的賽道你最終的成就也不同,選擇做汽車還是飛機,你在單位時間內能達到的距離也大不相同。

2、供需

註意培養自己技能的稀缺性。

3、跳槽到底是為了什麽

永遠不要因為「現在很差」而跳槽,要因為「未來更好」而跳槽。只有這樣才能保證你一直往上走。

如果你工作最重要的目的是掙錢,那你要知道掙錢這件事,至少有四種形式:幫別人掙錢(打工);為自己掙錢(SOHO);雇別人掙錢(企業主);讓錢自己掙錢(投資)。

你需要知道衡量掙錢與否不應該只看年薪而要看時薪,一個人的時間有限,想辦法提高自己的時薪才是硬道理。

4、開始你的開源項目

比起技術能力,做好開源項目更多的是要【來自真實的需求】和【持續更新的能力】。

找自己項目中遇到的費時小細節做好,然後開源就可以了。比如iScroll這個項目,它其實只是處理滾動條的小Tip而已,技術上沒特別的難度,代碼量也不大,但由於大家都不想在這種細節上花太多時間,反而讓iScroll大規模流行,最後蘋果和微軟甚至雇傭過它的作者做兼職。

5、提升架構能力

DRY不做重復的事,把常用的功能抽象成庫,把重復的代碼重構為可重用的框架模塊,堅持這樣做,你會發現自己抽象和架構能力飆升。

保持功能正交性,【功能和功能之間盡可能的不相互幹擾】,盡可能的減少功能間的依賴,如果有,規則一定要明確。

總之,個人職業規劃是每個程序員都要經常考慮、認真對待的事。尤其是哪些長期得不到發展、迷茫焦慮的程序員更需要做好這些事。因為你的未來你做主,你的未來你負責!


四、一些感悟

最後說一下作為大齡程序員的感悟,在這裏我想對比我年輕一些的程序員分享一下幾點,不一定對,但我是說的實話。

1,永遠不要在×××逸的環境下呆太久,就算沒事做,也要找點事情做,要知道機器不動也會銹的。

2,程序員,能單靠技術,並且最後過的很牛逼的,少之又少,因為你並不比別人聰明多少,也不比別人努力多少,技術又能牛逼到哪裏去?所以,除了開發,多關心下開發之外的東西。但是,不代表可以放棄技術,你可以不太追求技術的深度,但一定要追求技術的廣度,不然就算到了一定的位置,吹牛逼都不知道吹什麽!

3,一定要有自己的想法,不管你在什麽樣的環境。雖然由於歷史等諸多原因,你並不一定有能力改變它,但至少分得清對錯。一個沒有自己想法的人,只能算是一個普通勞動力而已,隨著科技的進步,最終可能會被人工智能所代替。

4,每個人都有缺點,一定要分得清哪些是性格缺陷,哪些是人格缺陷。可以做缺性格的事,但絕對不要做缺人格的事,不然你在職場中,不會有交心的朋友。

5,不要整天想著IT做不了多久了,幹兩年賣燒餅賺錢去,在你沒有一個完整的計劃之前,做本行是你唯一能做相對體面的工作。家裏有錢有背景的除外。

6,人要有夢想,就算沒有大的夢想,先實現一個小目標也行,看看人家王健林。建議是能量化的目標,舉個栗子,“我明天要早起”,這不算個目標,頂多算是夢想。“我明天早上5點起床”,這才是個目標。

7。如果說青春是你挽不回的水的話,時間也是。


如果我告訴你,程序員這條路很難走,你還要堅持走下去嗎