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