2020过半,程序员“跳槽”还是“卧槽”,你想好了吗?
圖片來自 Pexels
到了年中一般都要做總結,今天來說說心里話,從如下幾個方面和大家分享一下 IT 從業(yè)人員的心聲:
思維方式
學習與提升
職業(yè)發(fā)展路線
跳槽和臥槽
總結
思維方式
記得在稻盛和夫的《干法》一書中,對于人生和工作給出這樣一個公式:
人生(工作)的結果=思維方式*熱情*能力。
公式中的“熱情”可以理解為“努力”,分數(shù)從 0 到 100 分。“能力”可以理解為智商,情商,組織能力,表達能力,健康等等,分數(shù)從 0 到 100 分。
“思維方式”與其他兩個不同,它的分數(shù)是從 -100 到 100。這也就意味著“思維方式”有可能為負數(shù),如果它為負數(shù)的時候,付出的努力越大,擁有的能力越強,就越有可能得到相反的結果。
我常常在反思,在平時的工作和學習中,是否運用了正確的思維方式:
程序出現(xiàn) Bug,是找到原因并且進行總結,還是埋怨項目進度太緊,系統(tǒng)混亂。
遇到需求不清楚的時候,是努力整理問題列表,還是抱怨產品經理不專業(yè)。
當受到老板/客戶的非議時,是積極傾聽采取改進措施,還是怨天尤人。
有人說程序員只要專業(yè)知識過硬就夠了,其他的不用過多考慮。這種說法“正確”,也“不正確”。
專業(yè)能力是進入 IT 行業(yè)的門檻,在進入之后還需要在各個方面不斷的打磨和提升自己。
平時的工作就是在不斷發(fā)現(xiàn)和解決問題,能否在這個過程中受益,思考就顯得尤為重要。
職業(yè)生涯開始的幾年,我是在摸索中度過的,對工作的意義也不太清晰,感覺寫代碼就是一個賺錢的營生。每天想的是,快點把手上的任務完成,下班以后打打游戲,刷刷劇。
測試同事給我報 Bug,能推就推,說:“這是操作問題,不是程序的問題”。對于經理報上來的需求盡量,都會說:“難度太大,需要更多的時間”,各種理由搪塞。
久而久之,發(fā)現(xiàn)自己在原地踏步。于是,通過觀察身邊優(yōu)秀的人和通過閱讀書籍來找答案。
《終生成長》一書中提到了,人有兩種思維模式,一種是固定型思維,另一種是成長型思維。
擁有固定型思維的人認為自己不需要改變,保持原有處理問題的方式,需要改變的是外界。
而擁有成長型思維的人認為,需要不斷調整做事的方式,來滿足不斷變化的世界。
特別是當今是一個復雜,多變,不確定的時代。程序員更應該擁抱變化,迭代自己,專注思考。
學習與提升
學習提升的道路有很多條,基本上分為自我學習和向他人學習。
自我學習
很多時候為了學習專業(yè)的知識,我上網翻看 Blog,關注微信公眾號的推文。遇到工作上的問題,打開搜索引擎用最快的方式找到答案。
習慣了享受快餐知識帶來的愉悅感。甚至不清楚復制粘貼代碼所表達的意思,看過大神文章也不得要領,只有不明覺厲的感覺。
古人講究“觀,為,得”。大多數(shù)情況下,我們做了“觀”的事情,知道有這個知識,大致知道如何使用工具,但沒有形成自己的知識體系。
要在“觀”的基礎上,自己把知識的前后關系梳理一遍,在知道 What 和 How 的同時知道 Why。
將每個知識點做好筆記,保存下來,下次遇到有關聯(lián)的知識時,對照起來參考。這才做到了“為”。
最后,把每個知識點串聯(lián)起來,形成線,再將線變成面,講給別人聽,或者將其形成文章分享給大家,這樣才能做到“得”。
如果把每次遇到的問題都如此總結,周而復始技術/理解能力會有明顯的提高。
特別是有幾年工作經驗以后,需要針對基礎的計算機知識進行系統(tǒng)的學習。因為基本的編程技巧和工具都離不開這些基本原理的支持。
例如:數(shù)據(jù)結構,組成原理,數(shù)據(jù)庫設計,設計模式,算法。在這個過程中可以對知識進行重新梳理,分類,站在更高的位置審視所學知識。
向他人學習
記得在《易經》中有一卦叫做“比”卦,意思是要“親比”他人。在任何一個組織中都有領袖,也是需要大家輔佐的對象,比如:項目經理,技術組長,架構師等等。
“親比”的意思是圍繞在有能力的人周圍,輔助他們,同時從他們身上學習知識,技能和經驗。
你注意觀察你身邊的人,包括家庭,公司和學校都有你“親比”的對象。在他們身上有很多閃光點,是值得我們學習的,甚至我們會希望成為像他們一樣的人。
把他們作為自己的目標,結合自己發(fā)展的方向(Java 架構師,項目管理),列出學習條目(架構設計,項目管理)。
以半年為期限,定時去查看目標是否實現(xiàn),還有哪些需要彌補的。時刻提醒自己目標,能否成為你理想中的那個人。
之前項目組有一個程序員的 Bug 很少,于是我就學習并且模仿他的編碼風格,半年以后發(fā)現(xiàn)我的代碼質量有了明顯的改善。
除了學習人以外,GitHub 上面一些開源項目也是學習的對象,看看別人如何構架系統(tǒng),如何使用設計模式,對自己的工作也是啟發(fā)。
模仿是最好的老師,久而久之結合自身的特點就形成了自己的風格。
比卦示例圖
如何檢驗學到的知識
檢驗知識的方法有很多,例如:今天學到了編程方面的知識,應用到工作中就可以檢驗是否成功。
這些檢驗的方式是有特殊場景的,從問題到解決方案,是被動的驗證方式。
如果說在日常工作中沒有那么多的問題需要解決,而又需要檢驗學習的知識,那應該如何操作?
這里分享一種主動驗證方式,從學習知識到教授知識。在開始學習的時候,就要確定學習目的是:要教會別人也學會這個知識。
也就是,學習完成之后,你就是關于這個知識的專家了,有責任教會其他人搞懂這個知識。
如此這般,才能在學習過程中對知識精益求精。具體過程可以這樣:學完某種知識以后,用自己的話,對著鏡子復述一遍。剛開始的時候會結結巴巴找不到要領。
不過不要緊,針對不清楚的部分,回去查資料,再進行演講。直到演講的過程順暢為止。
此時,已經有點信心了,可以找三五個好友,對著他們演講,此時會有點緊張畢竟有了觀眾,可以準備簡單的 PPT 幫助梳理和回憶。
接下來,再找機會在公司內或者小組內做一次分享。逐步擴大分享的范圍,在每次分享完畢以后,做個總結,針對演講中不熟悉的地方,再進行補充。
這是一個不斷自我完善的過程,期間可以形成自己學習的體系和方法,鍛煉組織,演講能力。
同時,在不斷擴大范圍的過程中,會得到不少反饋,使你對知識的認知的程度不斷提高。
最后,在時機成熟的時候可以發(fā)表一篇文章,對其做一個總結。整個過程不但驗證了知識,還會成為某個垂直領域的專家,提高專業(yè)知名度。
職業(yè)發(fā)展路線
職業(yè)發(fā)展路線是經常被提到的話題,針對不同階段,職業(yè)規(guī)劃是不同的。剛剛進入 IT 業(yè)的同學,可以考慮掌握一門“安身立命”的技術。能夠養(yǎng)活自己,并且有成長的空間。
開始時候可以涉獵多一點技術,在其中選擇一個覺得“舒服”的技術堅持下去。前幾年讀過一本書叫做《逝去的武林》,講述的是一位老者 40 年學武的經歷。
其中有一段講到,他剛開始學武時,他的師傅教了他好幾招。然后問他:“哪一招,練起來最舒服。”他回答師傅以后,師傅就要他只練“覺得舒服”的那幾招。
一年以后,才教他其他招式。他問師傅為什么。師傅說:“招式雖然變化多端,但底層原理是不變的。如果有幾招已經精熟了,那么學習其他招數(shù)也就易如反掌了。
反觀,學習 IT 技術不也是這樣嗎?學習那么多的編程語言,他們之間的底層原理都是相通的。分布式架構,通訊方式,設計模式,在思考方式上也有互通互聯(lián)的地方。
所以,初進入職場的 3-5 年可以在一個垂直的技術領域深耕。精通以后,再選擇后面的路如何走。
除了技術能力,綜合能力也是必不可少的。例如:演講,寫作,溝通,管理。不管今后是往技術方向還是管理方向發(fā)展,這些技能都能夠幫到你。
所以,在適當?shù)臅r候需要鍛煉自己的綜合能力,比如:
定期可以進行技術演講,把技術干貨分享給同事。
將平時工作中遇到的問題,寫成文章分享到網絡。
讀幾本心理學書籍,學會如何和人溝通。
定期在網上學習管理視頻。
在學習專業(yè)知識的同時,也要獲取其他領域的知識,豐富自己的知識體系。
有了好的開始,那么具體的發(fā)展有哪些路可以走呢?下面列舉三條路線供各位參考。
技術路線
程序員→中級程序員→高級程序員→技術經理
這是一條技術發(fā)展路線。隨著開發(fā)經驗以及對架構的理解,可以先往中級工程師、高級工程師崗位方向發(fā)展。
剛開始的時候關心如何編寫出代碼,減少 Bug,實現(xiàn)功能,通過模塊測試;而中、高級程序員需要從整個項目出發(fā),考慮如何編寫模塊,算法。
之后,可向技術經理的方向發(fā)展。在擔任工程師階段,積累了大中型項目的經驗,也熟悉了技術標準、技術規(guī)范,學會編寫、審核各種技術方案和文檔。
同時具備編寫軟件核心代碼、處理軟件故障和領導團隊的能力,基本達到了技術經理的崗位要求。
技術經理之后,可以往技術總監(jiān)、CTO 等崗位發(fā)展,這些崗位的要求會更高,因此在編程過程中要注重其他方面的積累,如算法思維、測試方法、技術文檔、技術團隊管理等。
管理路線
程序員→中級工程師→系統(tǒng)架構師→項目經理
系統(tǒng)架構師是一個要求兼具溝通能力,設計能力和技術能力的崗位。技術是基于業(yè)務的,因此要對業(yè)務有深入的了解,需要與客戶、產品經理、技術人員、項目經理等都保持良好的溝通。
針對業(yè)務場景,設計規(guī)劃系統(tǒng)架構和應用場景、解決開發(fā)過程中遇到的疑難問題;還要提高開發(fā)質量,推進開發(fā)進度;也要協(xié)助管理技術團隊,做好技術文檔、說明文件等工作。
項目經理是軟件項目的組織者和領導者。對內要組織管理技術團隊,制定開發(fā)計劃、測試計劃、培訓計劃、量化任務等;解決開發(fā)過程中出現(xiàn)的問題,保證軟件按照進度推進;做好技術文檔、說明文件的存檔工作等。
對外要與客戶溝通,了解、完善、修改需求;要與公司溝通,及時匯報項目進度、工作情況和資源需求;要做好市場調研,及時調整技術方案等。
程序員如果具備很強的溝通、設計和團隊管理能力,可以考慮往管理路線發(fā)展。不具備這些方面能力的程序員,可以多考慮技術管理方向發(fā)展。
系統(tǒng)架構師和技術經理在工作內容上有一些區(qū)別。架構師對內負責技術架構,對外需要和業(yè)務溝通;技術經理多會專注于內部的技術規(guī)范,技術標準的制定和執(zhí)行。
產品路線
程序員→產品助理→產品設計師→產品經理
在日常工作中,你會發(fā)現(xiàn)有些程序員,對產品設計、產品管理有很好的想法。
那么他們已經具備了產品設計的基礎能力:對產品理解、功能邏輯有思路、有判斷。
程序員往產品方向發(fā)展,有自己的優(yōu)勢和劣勢:
優(yōu)勢是:程序員知道程序開發(fā)的過程,熟悉功能實現(xiàn)的方式。站在產品的角度能夠和開發(fā)人員有良好的溝通,對產品的開發(fā)周期、實現(xiàn)方式、故障判斷等都可以很好的把控,使產品在技術層面出現(xiàn)的問題盡快得到溝通解決。
劣勢是:程序員在客戶需求分析、市場調研、產品設計、產品管理、運營分析、用戶培訓等各方面要從零開始學習,這是需要一定時間的。
如果要往產品方向發(fā)展,大部分需要從產品助理開始,不僅要保持住自己優(yōu)勢的地方,還要一步一個腳印學習、積累,逐漸消除自己的劣勢,往產品設計師、產品經理,甚至是 CIO(首席信息官)方向努力。
跳槽還是臥槽
程序員由于職業(yè)特點決定了是一個跳槽比較頻繁的職業(yè)。特別是這幾年社會對 IT 技術的需求量逐漸增大,對程序員的需求也在增大,這也導致整體行業(yè)跳槽比率偏高。那么什么時候該跳什么時候不該跳呢?
我在網上找了很多文章,發(fā)現(xiàn)有好多原因可以被考慮,例如:自身發(fā)展,公司發(fā)展,行業(yè)發(fā)展,老板魅力。
其實,歸根到底說的都是,你現(xiàn)在的工作和你想要的工作之間的差異。新的工作是否給你帶來更多,包括薪水,發(fā)展,平臺,人脈等等。
這里介紹工作特征模型,通過這個模型可以針對不同職業(yè)階段進行打分,最后再做出判斷。
如果分數(shù)呈現(xiàn)上升或者平穩(wěn)趨勢,建議“臥槽“獲取更多能量。如果分數(shù)有下降的局勢,建議根據(jù)職業(yè)發(fā)展方向,找新的工作。
工作特征模型,需要定義幾個特征變量,每個變量定義 0-10 分,分數(shù)越高說明和特征越符合,將每項打分完畢以后帶入到一個公式中,得到最終的分數(shù)。
①技能多樣性(Skill Variety)。工作中使用的技能是否多樣,是否需要多種技能才能完成工作。
很多情況下,我們說的“搬磚”,是一種技能單一的表現(xiàn),利用現(xiàn)成的技術并且不斷重復類似“增刪改查”的操作,讓人感覺每天都在重復自己。
相反,如果工作中涉及到技術面比較廣,類似全棧工程師;又或者需要做橫向/縱向溝通以及管理協(xié)調的工作,就會讓人充滿了新鮮感,保持職場的活力。
②任務一致性(Task Identity)。需要完成的任務和實際完成的任務是否一致。
例如:領導給你布置系統(tǒng)架構的任務,在實施時你才發(fā)現(xiàn)做的都是一些“救火”的事,對系統(tǒng)的修修補補。
只有保持任務的一致性,才能讓你的目標和結果保持一致,增強獲得感,不斷提高工作能力。
③任務重要性(Task Significance)。這個不言而喻,如果你現(xiàn)在的工作非常重要,是公司盈利的核心或者是公司未來發(fā)展的方向。
那是非常好的事情,和公司的發(fā)展保持一致,會獲得更多的資源,更容易把事情做好,成長也是最快的 。
④自主性(Autonomy)。工作內容,工作形式是否能夠自己控制。例如:每天上班是否打卡,完成的工作都是別人指派給你的,還是你自己主動承擔工作的。
越是有自主性的工作,越能提高員工的工作動力,大家都盯著一個目標前進,會想盡辦法把事情做好。
⑤反饋性(Feedback)。你做的工作是否得到了正向的反饋,這種反饋可以來自同事,客戶,領導。
只有不斷的得到反饋,才能修正自己提高自身的能力。同時只有自己的工作成果得到反饋才能激發(fā)下次完成任務的動力,驅動自己不斷前進。
最后將上面的特征變量帶入下面的公式,就知道最終的得分了:
這個分數(shù)的計算是一個長期的過程,每隔一段時間(1-2 月),可以給自己進行一次評價,這樣一段時間下來會形成一個曲線,通過曲線的上升和下降就知道在當前的公司是否有利于自己的職業(yè)發(fā)展了,從而確定是跳槽還是臥槽。
總結
程序員的自身發(fā)展,需要有正確的思維方式。成長型的思維模式能夠幫助自身不斷迭代。在學習過程中需要注重自我學習和向他人學習。
自我學習,講究“觀,為,得”,知識不是知道就完了,還要去實踐,思考,最后才能夠掌握。
向他人學習,要找好你的學習目標,設置時間限制,用先“學習模仿“,后“自成一派“的方式推進。
職業(yè)發(fā)展,先找到突破口切入,深入以后再觸類旁通。可以根據(jù)自身條件,選擇技術,管理和產品的方向。
跳槽與否,不要憑感覺,用科學的方法論來指導。多樣性,一致性,重要性,自主性,反饋性是需要考慮的關鍵點。
作者:崔皓
簡介:十六年開發(fā)和架構經驗,曾擔任過惠普武漢交付中心技術專家,需求分析師,項目經理,后在創(chuàng)業(yè)公司擔任技術/產品經理。善于學習,樂于分享。目前專注于技術架構與研發(fā)管理。
編輯:陶家龍、孫淑娟
原文鏈接:51CTO技術棧
精彩文章推薦:
?
程序寫不好,總理當?shù)嚼?#xff01;
?
他,用了8年,從程序員到CTO再到天使投資人蝶變記
?
喬新亮:以贏為終,三個月打造一支硬核IT團隊
?
波波老師: 解決微服務的數(shù)據(jù)一致性分發(fā)問題?
? ?END ? ?? #接力技術,鏈接價值#總結
以上是生活随笔為你收集整理的2020过半,程序员“跳槽”还是“卧槽”,你想好了吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于异常捕获和Checked Excep
- 下一篇: LeetCode第一刷--leetcod