簡評:程序員的工做不是寫代碼,而是解決問題。成爲高級工程師後,若是不作管理者,你還能作什麼呢?html
你作程序員已經有好幾年而且已經晉升過一兩次,最終升任了高級工程師或一些其餘的同等職位,在此以前,你的職業道路簡單明瞭:你學會如何獨立工做,而後一步步升任爲高級工程師。程序員
如今的你開始思考本身職業生涯的下一步是什麼,若是你尚未明確的規劃,問本身幾個問題:web
- 你是否成爲了一個管理者且再也不編程?
- 僅僅學習新技術,你是否以爲不夠?
- 你的目標是什麼?
本文我想提出一個職業發展的替代方案,一個能給你更多自主權和討價還價能力的替代方案。與成爲管理者不一樣的是,它仍然容許你編程。編程
從寫代碼到解決問題
做爲程序員的工做到最後是解決問題,而不是編寫代碼,解決問題須要這些步驟:架構
- 發現和確認問題
- 提出解決方案
- 實施解決方案
這裏面的每個均可以被認爲是一種技能樹:一組能夠單獨和並行開發的相關技能。可是在實踐中,你一般會從使用第三個技能樹開始,在變得更有經驗的時候,才逐個添加其餘技能。學習
Randall Koutnik 把這些描述爲一種職業頭銜,一個職業發展走向:實施者、解決者和發現者。網站
做爲實施者,你是一名沒有經驗的程序員,你的任務由其餘人定義:你只需實現小的、明確指定的代碼塊。設計
假設一下,你在一家爲養寵物的人搭建網站的公司工做。你在上班的時候會接收到一個任務:「在這裏添加一個下拉菜單,列出全部的鬣蜥疾病,你能夠從 IGUANA_DISEASE 表中獲取這些疾病。選擇一個菜單項應重定向到適當的頁面。」code
你不知道用戶爲何會須要列出鬣蜥疾病,也沒必要花費太多時間來弄清楚如何實現它,照吩咐去作就好了。htm
當你變得更有經驗時,你就成了一個解決者:你可以爲不太明確的問題想出解決方案。
當你遇到一個問題:「咱們須要在網站上添加一個部分,讓寵物主人知道本身的寵物是否生病了。」你先獲悉本身擁有什麼數據,可使用哪些 API,而後與設計師一塊兒設計 UI,建立一個實現計劃,最後編寫代碼。
最終你會成爲一個發現者:你開始本身發現問題並找出其根本緣由。
你會去和你的經理談鬣蜥:幾乎沒人擁有鬣蜥,爲何它們在頁面上和貓狗有同樣的空間?更不用說給鬣蜥編寫特定的代碼,這徹底是在浪費時間,難道不是應該編寫適用於全部動物的通用代碼嗎?
通過一番討論,你發現必須重作網站架構、業務邏輯和設計,這樣就沒必要在每次添加新動物的時候都編寫新代碼。若是你提出正確的架構,使得添加一個新的動物只須要花一個小時,公司就能夠以低成本服務於許多動物利基市場。你將與整個團隊一塊兒合做完成解決方案的設計和實施。
成爲發現者的好處
許多程序員最終停留在解決者這個角色,不知道下一步該作什麼。若是你不作管理,那麼成爲一個發現者是一個很好的選擇,緣由有兩點:自主性和生產力。
Kutnk 的主要觀點是,這三個階段每走向下一步都會給你更多的自主權。做爲實現者,幾乎沒有自主權,做爲解決者,會擁有稍多的自主權,做爲發現者,你擁有很是多的自主權:你被賦予一些模糊的目標和約束,由你本身來決定作什麼。這會帶來不少樂趣。
除此以外,還有一個好處:從 Implementer 到 Solver 再到 Finder,你將變得更有生產力,由於你所作的沒必要要的工做變得更少。
- 若是你只是在執行別人指定的解決方案,可能會陷入低效的工做。
- 若是你只看到問題的表面就提出一個解決方案,那最終解決的可能不是真正的問題。
你越擅長診斷和發現潛在的問題,提出解決方案,並與他人一塊兒工做,你就越少作沒必要要的工做,你就會更有效率。
利用你的生產力
若是你是一個發現者,你的工做效率就會大大提升,這會讓你成爲一個更有價值的員工。擅長挖掘高價值問題的人能發現那些無人知曉的障礙,發現客戶真正想要的東西,你會成爲他們中的一員。
這意味着你有更多的談判優點:
- 協商加薪更容易成功。
- 能夠找到更好的工做,即便這個工做涉及到你不瞭解的技術。
- 甚至能夠申請爲期三天的週末。
所以,若是你想在繼續編程的同時事業上也取得進步,就從如今開始去尋找問題吧。一旦專門去注意這件事情,你會發現問題無處不在。
英文原文:The next career step for Senior Software Engineers (that isn’t management)