Pages

搜尋此網誌

2015年6月7日 星期日

工程師邁向管理者,專業養成指南

工程師邁向管理者,專業養成指南

enter image description here

工程師,通常是被保護的一群,在良好的開發環下,工程師通常只要根據規格,好好的功能開發出來,理想上就會像工廠的生產線一樣,專心一致的進行開發。

當然寫程式不像工廠生產那樣的簡單,這是不可質疑的事實,生產產品步驟確定後大致上來幾次都是一樣,但程式開發是複雜多的工作,程式寫得好不好每個人都有不同的造詣,一旦程式開發熟悉到一定程度時,大致上會有幾個階段:

  1. 工程師:見山是山,做好本份
  2. 資深工程師到管理者:見山不是山,兩難,困惑
  3. 管理者:見山又是山:看得更遠更廣

工程師轉資深工程師通常不怎麼痛苦,畢竟是同性質的事,就是必須在專研技術,瞭解更多細解以及理論基礎,就看你的技術深度。

比較難適應得就是開發者轉管理者了,因為很難適應,基本上也不是自願的,那又為什麼要呢?

enter image description here

Die Hard 4.0 有一段對白我很喜歡:

「你以為當英雄很好嗎 ?? 沒什麼好的,別人對著你開槍,偶爾被稱讚一下什麼的,然後離婚,老婆不記得你姓什麼,孩子不想跟你講話,你一個對著空桌子吃著飯,所以沒人想當那種人。」

「那你為什麼要當那樣的人!? 」

「因為沒有其他人肯做,相信我,如果有其他人願意做,我會讓給他們做,但現在沒有。所以我得做。」

是不是吃力不討好的苦差事?但際遇總是累積來的,你揀了別人不想做的事,也因此你跟別人就不一樣了。

當然現實世界不像電影一樣,歷練往往需要累積,就從一開始的工程師階段看起。

工程師,專注於一點,見山是山:「 Zoom In」

作為工程師,所專注於的就單一問題解決,所要面對的問題,都是電腦的問題,那是非零即一的問題。

所以,當工程師是很快樂的,不用管太多,只要專注於把問題解決。

在這個階段,若你做得不錯,將會有機會再往下一個階段邁進:成為管理者,但在這之前,你需要做到什麼呢?

  1. 管理好自己
  2. 尊重自己的專業
  3. 實事求是
  4. 相信自己
  5. 令別人安心
  6. 做好自我時間管理
  7. 好好的把一個語言學好

特別是第七點,學好一個語言並且夠深入,將有助於之後學習其他語言學的又快又好。

如此,機會來的時後,你才有選擇的權利。

而你所要訓練的就是你的專業,這段時間你看的書,都會是跟技術相關,比如:

  • 你所學習語言的 觀念 書:找到一本經典,勝過讀一堆。
  • clean code:乾淨的程式碼有哪些特性,從日常開始要求。
  • Specification by Example - 團隊如何交付正確的軟體:測試寫得好,除了累積測試能量,也可以加速開發。
  • 學徒模式。
  • design patten。

上述書籍,除了第一項,其他都是觀念書,也就是說,不管你寫哪個語言將會受用無窮,就像天下武功,為快不破一樣。

或許你會覺得資質不夠不一定看得懂,但人腦是很神奇的,或許當下你不了解,但你讀過之後,經過一段時間發酵,總有一天你會突然領悟,因為你已經種下一個觀念的種子,一旦你的經驗有了發了芽,總會有結果的那一天。

離開舒適圈總是痛苦,見山不是山,失焦: 從 Zoom In 到 Zoom Out 的「過程」

如果你願意接受轉換的機會,那狀況就會變成:原本你只要管好自己,現在你還要管好別人。

還記得有一個廣告詞是這樣說的:

要刮別人的鬍子之前,要先把自己的刮乾淨。

說的正是這件事,就像爸爸帶小孩需要以身作則,才能給小朋友當一個好榜樣,帶團隊當一個管理者也不外乎是。

剛轉換時候,基本上你是不只要開發,你還要管理,比如排進度,分工,還要解 bug。

所以你會非常非常忙…. 但這就是一個學習成長機會,你將經歷:

  1. 區分事情的輕重緩急
  2. 區分 team member 的特性
  3. 學習如何讓上下安心
  4. 學習冷靜面對問題
  5. 學習如何避免同樣的問題重覆發生
  6. 學習溝通
  7. 學習表達
  8. 學習分工
  9. 學習更有效率的處理事情
  10. 學習承擔
  11. 學習下決定
  12. 學習拒絕
  13. 對自己專業的要求(因為要當 team member 的靠山)
  14. 學習信任
  15. 學習建立原則
  16. 學習建立有效率且標準的流程
  17. 學習少抱怨,多正面思考

沒錯,可以看到你不只是面對電腦,還要面對 ,這時候你會覺得很煩,因為 比電腦複雜太多了,除此之外,你的目標會開始從寫好程式,變為:如何協助團隊變得更好,過程中你會很掙扎,因為當問題來的時候你的工程師的一面會想要趕快解決問題,但一旦你去做了,底下的人就沒有學習的機會,這樣一來,所有的重擔就會在你身上,你就會成為團隊的瓶頸…

而你所需要閱讀的知識,會從技術書轉換到管理相關的書籍:

  • 人月神話
  • people ware
  • 少但是更好
  • rework
  • TDD 開發方式
  • 版本控制流程
  • 自動化流程(CI: 持續整合)
  • scrum
  • 豐田式生產方式

作為管理者,團隊如何越來越有效率,讓每一次瓶頸都被改善,就是最重要的課題。

並且,團隊內資訊的通透度,團隊的份圍,member 之間的信任感,都是管理者所要營造的。

而你漸漸的就會像母雞帶小雞一樣,作為母雞,抵律老鷹的攻擊,讓小雞好好的工作。

最終,你將看得更遠更廣,見山又是山: 「Zoom Out」

你將少了很多開發上的學習,但並不是說就放棄了本業,你所要面對的問題將會用上之前所學:

  1. 處理更有挑戰性的程式問題。
  2. 解決開發流程上的問題。
  3. 設計避免犯錯的機制。
  4. 思考自動化機制。
  5. 思考架構上的缺陷並改進。
  6. 有機會進行你想要做的改變。

作為管理者,需要讓 member 值得信服,原則很重要,
所有決定都要保留彈性,這樣才能不怕下決定,才有機會在過程中進行調整。

如果有幸,有個人願意帶著你學習,讓你可以有犯錯的機會,願意給你空間,別忘了,也給你底下的同樣的待遇。

所以當你成為一個真正管理者後,你的職責將有:

  1. 將你的經驗引領更多人
  2. 實施你認為有價值的事情
  3. 教導你認為正確的觀念
  4. 給 member 學習的機會
  5. 讓 member 有犯錯的空間

多做一定多錯,一般傳統的管理方式,就是責備做錯的人,如何檢討並且避免下次再犯錯才是你需要注意的。

遇到問題推卸責任不是積極作為,共同面對問題,才是務實的做法。

試想,若你是很認真解決的人,一旦犯錯就否定了一切努力,那怎麼還有心繼續向前?

但,另外一個角度還是有認真過頭蠻幹的情形,這時候如何引導他變得更好,就是需要智慧了。

結論

不管任何事情,即使害怕,願意承擔,就有機會成長,就看你要不要踏出那一步,過程雖然痛苦,也不一定有好的結果,但至少你不會後悔,因為,你試過了。

What would you do if You weren’t afraid?

如果你不害怕的話,你會做什麼?

思考你真的想要的是什麼?

這一段是看到 team 裡面的 member 站在台上與人分享後在 Facebook 上所寫的一段話,三不五時可以問問自己,你希望的自己是什麼樣子。

把握每次成長的機會,在你的生涯中,若有機會從工程師轉變為技術管理者,一方面是因為你已經可以管理自己,這時候才能管理別人。

這篇文章說實在講得有點多,要養成一個專業的人,本來就沒那麼簡單,但不管任何方式,總是可以參考,希望我的經驗,可以讓正在起步的人,有個大致的方向,並且少走一點冤枉路。

專業開發者,就像武功高強的武者,不停地練習,讓出招的過程沒有多餘的動作,精準快速的解決問題。

而管理者就像一代宗師,把知識還有觀念傳遞出去,讓 member 盡可能的有空間犯錯,有機會成長。

你想成為哪一個?不管怎麼決定:念念不忘,必有迴響。

最後,專業有價,要別人尊重你的專業,請先尊重自己的專業。

張貼留言