每位程式設計師都應該有危機感,高薪不會從天而降!
程式設計師的30歲現象
在官場上,曾經有一個59歲現象,就是官員們會在59歲時,會使勁撈上一把。很明顯嘛,權力過期作廢,再不撈就要退休了,沒有機會了。
在程式設計師的圈子裡,也有一個30歲現象。程式設計師幹到30歲,好不容易從碼奴混到了白領,卻再也幹不動了,還時時面臨失業的危險。30歲,是一個程式設計師傷不起的年齡。明天,何去何從?當然,如果你有鐵飯碗,比如在國企或政府機關,那你是無法理解底層勞動人民的感受的。同時也要恭喜你成為體制內的一員,可以一直幹到退休無憂。
30歲現象人人都明白,但要給出一個定義並不容易。列舉幾個表現,也許你會覺得心有慼慼焉。
面臨職業瓶頸,程式寫不動,上升又困難。
薪水較高,加班變少,後浪追前浪,面臨失業壓力;生活壓力劇增,不敢跳槽;
招聘程式設計師年齡限制在30歲以下成為行業潛規則,跳槽困難。
30 歲現象和59歲現象貌似不搭邊,其實都出於同樣的原因:價值貶值。官員老爺在任就像皇帝,一旦退休,就成為了平民百姓,貶值那是自然的。而程式設計師也一樣, 所謂三十而立,一旦到了30歲左右,由於面臨結婚生子,一方面需要高薪撫養家庭,另一方面卻無法像以前那樣全身心投入到工作,價效比急劇下降;與此同時, 大批廉價的新手湧入,他們往往還使用最新的技術,老一輩程式設計師只能慢慢的靠邊站了。
是否有不可替代性
30歲現象產生,只能程式設計師自身身上找原因。
當然我們也可以產業、從社會、從政府、從制度等多方面進行分析,發現不足,這些分析未必沒有道理,但是肯定沒有用,因為我們無法改變。所謂“命苦不能怪政府,命背不能怪社會”,從外部找原因,只會讓我們滿腹牢騷,整天覺得自己生不逢時,苦悶不堪。
從自身找原因,試著問自己幾個問題:“為什麼我的價效比以下降?老闆為什麼要請我,給我高工資呢?一個人有價值是由什麼決定的呢?”
你也許可以列出很長很長的答案,但我想應該都可以濃縮為一句話:“一個的價值是由他的不可替代性決定的”。不可替代性可以理解為,為了替代你老闆需要付出的代價。
因為你的可替代性高,所以價效比下降。反之,因為你不可替代性高,所以老闆會給你開高工資。不是這樣的嗎?
有一則小故事:
技師退休時告誡自己的徒弟:“少說話,多做事。”
十年後徒弟也成了技師,他找到師傅,苦著臉說:“師傅,我一直都按您的教導做,只知埋頭苦幹,可那些比我技術差的都升職了、加薪了,我還是拿著過去的工資。”
師傅想了想,說:“你請一次假吧。如果一盞燈一直亮著,那就沒人會注意到它……”
徒弟恍然大悟,真的請了一星期假,等他回去上班時,廠長找到他說要給他加薪。原來,在他請假時,廠長發現,工廠已經離不開他了。
徒弟很高興,以後他時不時就請幾天假,每次請假後廠長都會給他加薪。一天徒弟請假後準備去上班,廠長卻告訴他:“你不用來上班了。”
徒弟苦惱地去找師傅,師傅說:“那天我的話還沒說完呢。一盞燈偶爾可以熄滅一次,可如果它總是熄滅,性質就不一樣了,因為沒人會需要一盞時亮時熄的燈。”
故事中,因為徒弟的不可替代,所以廠長給他加薪;後來因為有其它的燈亮了,他被替代了,廠長不需要他了,所以被炒了魷魚。
所以我們歸根到底還是要提高自己的不可替代性。否則,一旦老闆覺得用較低的代價就可以替代你,那麼你就面臨可能失業的危險了。
出路在哪裡
那程式設計師到了30歲,怎樣提高自己的不可替代性呢?我們打算做一輩子程式設計師嗎?敢問路在何方?
作為一個過來人、一個資深程式設計師,我覺得有幾個方向可以選擇:
(1)成為技術大拿
其實,做一輩子程式設計師並沒有什麼問題,重要的是,你必須成為一個不可替代的程式設計師,也就是說,你要成為技術大拿,能夠解決普通程式設計師所不能解決的問題。技術大拿有兩個版本:
一 是程式設計師加強版。你仍然是一個程式設計師,但你是一個很牛的程式設計師,憑藉多年的積累,你在知識廣度和深度方面均已不是等閒之輩。從彙編到java,你樣樣精 通。你在意資料結構和演算法,對系統的優化有獨到見解,對設計模式如 數家珍,你還有完備的工具箱和自己的專用類庫。其實,加強版程式設計師有非常獨特的價值,可惜的是,在現實中卻很少見,因為對任何一個公司而言,人才總是很稀缺的。老闆的眼睛是雪亮的,他怎麼會對你這種技術大牛視而不見呢,在你還沒有成為真正的 大拿之前,早已經被任命為系統架構師、專案經理或者更高的職位了。因此,你想守住自己的一畝三分地,悠閒的做自己的大拿,往往是不可能的。
二 是程式設計師升級版。雖然你的內在仍然是一個程式設計師,但你的職位已經升級了,你成為了系統分析師或系統架構師。這是非常自然和現實的選擇。程式設計師與系統分析師或架構師之間並有鴻溝,只需一步而已,你就可以從崎嶇山路駛向寬闊的大馬路。但這一步卻並不容易,需要幾年時間不斷思考、學習、實踐,才能化蛹成蝶。
(2)成為行業專家
行業專家也是一個公司不可缺少的角色,他們對公司的行業知識、業務流程和細節瞭如指掌。行業專家一般並不是從外部招聘的一個只懂業務、不懂技術的超人,而往 往是從程式設計師經過多年的摸爬滾打成長起來的。作為從程式設計師成長起來的行業專家,你往往還肩負系統分析師之職。在公司裡,對業務有一般瞭解的人很多, 但專 家級別的往往很少,為了後30年的職業生涯,你必須成為專家。
(3)朝管理方向發展
向管理方向發展的第一步,一般是被任命為專案經理。在大部分IT公司裡, 專案經理是最小的管理崗位了,可能你不會覺得有太多驚喜,工資也沒有大的提升,但這個轉變,可以說會成為你一生中最重要的轉變之一。
不 要小看了專案經理。有人說,專案經理是一個古老的職業。也人有人說,21世紀是專案管理的世紀。事實上,從人類有組織以來,就一直有專案管理,以前的專案 經理可能是部落首領,一次集體打獵、一次攻城拔寨,都可以視為一個專案。專案管理的知識可以應用到我們生活的方方面面,大至登月計劃的實施,小至家庭聚會 的組織,都離不開專案管理。
一個優秀的專案經理,不僅需要高智商,還需要高情商。可以不誇張的說,如果你能勝任專案管理,你就可以勝任戰術層的所有管理崗位,甚至你有家庭生活質量,也會提高到新層次。
然而,要成為一名優秀的專案經理,並不是一件容易的事情。可以說,需要一定的天分,有些人無師自通,有些人卻永遠也學不會。程式設計師屬於高智商人群,情商卻往往存在不足,這注定了只有少數程式設計師能夠成長為專案經理,成為優秀的專案經理,則非常稀少了。
如何讓自己成為大牛
那麼知道了即將面臨的危機,也知道了出路,如何去完成呢?怎麼樣成為技術大牛?
這裡有幾個認知上的誤區:
拜大牛為師
知乎上有人認為想成為技術大牛最簡單直接、快速有效的方式是“拜團隊技術大牛為師”,讓他們平時給你開小灶,給你分配一些有難度的任務。我個人是反對這種方法的,主要的原因有幾個:
大牛很忙,不太可能單獨給你開小灶,更不可能每天都給你開1個小時的小灶;而且一個團隊裡面,如果大牛平時經常給你開小灶,難免會引起其他團隊成員的疑惑,我個人認為如果團隊裡的大牛如果真正有心的話,多給團隊培訓是最好的。然而做過培訓的都知道,準備一場培訓是很耗費時間的,課件和材料至少2個小時(還不能是碎片時間),講解1個小時,大牛們一個月做一次培訓已經是很高頻了。
因為第一個原因,所以一般要找大牛,都是帶著問題去請教或者探討。因為回答或者探討問題無需太多的時間,更多的是靠經驗和積累,這種情況下大牛們都是很樂意的,畢竟影響力是大牛的一個重要指標嘛。然而也要特別注意:如果經常問那些書本或者google能夠很容易查到的知識,大牛們也會很不耐煩的,畢竟時間寶貴。經常有網友問我諸如“jvm的-Xmn引數如何配置”這類問題,我都是直接回答“請直接去google”,因為這樣的問題實在是太多了,如果自己不去系統學習,每個都要問是非常浪費自己和別人的時間的。而且大牛不多,不太可能每個團隊都有技術大牛,只能說團隊裡面會有比你水平高的人,即使他每天給你開小灶,最終你也只能提升到他的水平。
業務程式碼一樣很牛逼
知乎上有的回答認為寫業務程式碼一樣可以很牛逼,理由是業務程式碼一樣可以有各種技巧,例如可以使用封裝和抽象使得業務程式碼更具可擴充套件性,可以通過和產品多交流以便更好的理解和實現業務,日誌記錄好了問題定位效率可以提升10倍……等等。
業務程式碼一樣有技術含量,這點是肯定的,業務程式碼中的技術是每個程式設計師的基礎,但只是掌握了這些技巧,並不能成為技術大牛,就像遊戲中升級打怪一樣,開始打小怪,經驗值很高,越到後面經驗值越少,打小怪已經不能提升經驗值了,這個時候就需要打一些更高階的怪,刷一些有挑戰的副本了,沒看到哪個遊戲只要一直打小怪就能升到頂級的。
成為技術大牛的路也是類似的,你要不斷的提升自己的水平,然後面臨更大的挑戰,通過應對這些挑戰從而使自己水平更上一級,然後如此往復,最終達到技術大牛甚至業界大牛的境界,寫業務程式碼只是這個打怪升級路上的一個挑戰而已,而且我認為是比較初級的一個挑戰。
所以我認為:業務程式碼都寫不好的程式設計師肯定無法成為技術大牛,但只把業務程式碼寫好的程式設計師也還不能成為技術大牛。
上班太忙沒時間自己學習
很多人認為自己沒有成為技術大牛並不是自己不聰明,也不是自己不努力,而是中國的這個環境下,技術人員加班都太多了,導致自己沒有額外的時間進行學習。
這個理由有一定的客觀性,畢竟和歐美相比,我們的加班確實要多一些,但這個因素只是一個需要克服的問題,並不是不可逾越的鴻溝,畢竟我們身邊還是有那麼多的大牛也是在中國這個環境成長起來的。
對於這種回答也是真的不知道該如何回答了,那些比你厲害的人難道不用上班?每天就很閒?
專案怎麼又延期,你說“沒有時間”;
怎麼不學習英語,你說“沒有時間”;
一起去操場跑步,你說“沒有時間”那你的時間都花在哪裡去了?你的收穫是什麼?
我只能說不要用你身體的勤奮,掩蓋你精神的懶惰,剛看完一本書,名字叫作:“《哪有沒時間這回事》”
你總是很忙,但是你忙來忙去的一點收穫也沒有,或者說忙的沒有效率,為什麼不想想自己的時間都忙去哪了?知道自己有很多的地方做的不好,但是總是不能抓住一個去改正?這本書,給了一個很重要的提示,也是時間管理過程中我們容易忽略的一個重要的點,那就是——早睡早起。
分享我的經驗
作為一名java程式設計師如何成為大牛、架構師呢?
第一階段:java基礎知識要牢固,java程式設計思想,設計模式,effective java這些都算是基礎知識。在這基礎上,要結合多種專案經驗,利用實踐來提高基礎能力。
第二階段:開闊眼光,借鑑優秀的專案或開原始碼。例如jstorm、hadoop等開源軟體,可以下載後利用業餘時間研讀,提升能力。
第三階段:結合業務進行架構設計和實踐,並多與行業高手交流,提升領域建模等能力
選一個方向,然後多閱讀一些高質量程式碼,站在前輩架構師的肩膀上,才能比較快速的進步,長時間的技術積累,業務專案的積累,合理的方案解決通用問題。多讀多寫多思考。多讀的目的是開拓自己的視野,讓自己具備舉一反三觸類旁通的能力。多寫是腳踏實地,避免誇誇其談紙上談兵。多思考是融會貫通所讀所寫。
架構師的學習之路也正式開始。
那麼我們應該學習哪些原始碼呢?那就要看哪些框架最常用了,希望下面的圖比較全:
再者,你在這這個階段已經不能侷限於滿足於講程式碼寫出來,此時此刻的你需要追求高質量高效能的程式碼了,你此時需要研究的知識就會如下圖所示:
是不是學習了上面做這些技術就夠了呢?相信看到這裡的碼友已經知道答案了,沒錯,你還需要知道分散式架構的知識
另外,目前企業有大小,平臺有限制,甚至對開放的方式方案都出現了獨立的方式,Facebook每個模組的功能從設計到開發再到維護,由後端到前端再到客戶端都是通過一程式設計師來進行的,這些就是所謂的全棧工程師,那麼java開發中,我們伺服器也有其自身的獨到性;那麼如何將龐大的後臺系統分部成為多個功能獨立,部署獨立,維護獨立,鬆耦合的獨立服務呢?從而減少企業的溝通成本和維護成本呢?毫無疑問,這就是微服務。
最後,如果說開發是一個戰場,那麼程式猿們就是勇猛的戰士,我們的戰鬥需要協調合作,統一排程,統一部署。那麼完美的配合自然需要優秀的開發工具,那就就是我們的團隊協作工具的學習。
團隊協作開發
Git
Maven
Jenkins
Sonar
如果不結合實戰,那麼說什麼都是空話,最後來看看B2C商城專案實戰。當你面對Hr的時候,是不是可以跟Ta說你有一個落地的大型網際網路B2C商城專案,你的商城專案是前後端分離的,用到了ZooKeep,Redis,Monggodb等等一些熱門的技術,這樣子是否會顯得更有逼格呢?
系統設計
使用者管理子系統
商品管理子系統
搜尋子系統
訂單子系統
支付系統
分散式排程系統
後臺系統
歡迎工作一到五年想成為Java工程師的朋友們加入Java架構開發:744677563
群內提供免費的Java架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!