從一線開發到管理百人的技術總監,你需要知道的一切!

在程序員的職業發展道路上需要不斷地打怪升級,從初級程序員到高級程序員,從初級架構師到資深架構師,或者轉管理,從技術經理到技術總監。那麼每個階段都需要具備哪些能力?技術路線和管理路線發展有何區別?該如何做出選擇?

今天跟大家分享的是知乎大 V 純潔的微笑,他將基於從一線 Java 技術人員到管理百人的技術總監的親身經歷,分享他對技術路線與管理路線職業發展的看法、所需知識體系和麵試技巧。如果你正處於選擇技術道路還是轉型管理的十字路口,相信這篇文章會幫你答疑解惑。

純潔的微笑,先後在互聯網金融、第三方支付公司擔任高級 Java 工程師、架構師、技術經理、技術負責人、技術總監等職務。在互聯網金融工作期間,從0開始參與公司技術平臺建設,組織平臺進行過四次大架構升級。目前在一家第三方支付公司做技術總監,負責支付公司微服務架構實踐和大數據平臺建設。

1

細數工程師、架構師與技術經理

的「打怪技能」區別

1、初級工程師

初級工程師最重要的是順利完成領導安排給自己的工作,在此基礎上,儘快熟練所使用的技能,並掌握核心語言的用法,再不斷地擴充自己的技術棧,比如瞭解容器、集合或者是緩存等等。

2、中級工程師

工作兩三年,成為了中級工程師後,你會處於程序員的最佳黃金年齡。這個階段的技術積累應該是最快的,在這時打下的紮實基礎,會給你的後續職場生涯帶來很深的影響。

中級工程師應該具備完成一個模塊或者是項目的能力,可以適當地去解決項目當中的難點。獨立完成項目的對外溝通、編碼、投產上線等,深度瞭解語言特性和你所使用的技術原理。比如你經常使用 HashMap,那就必須瞭解 HashMap 的底層結構是什麼、有何特性。

此外中級工程師要向 T 型人才的方向去發展,在掌握整個技術棧廣泛性的同時往技術深度去深挖,比如多線程。

3、高級工程師

身為高級工程師,意味著你已經是一位核心開發者,負責公司最核心的業務研發和支撐。

高級工程師相較其他階段最突出的能力區別就在於技術和業務並重。在做一個好系統的同時,你必須要對業務有深度瞭解,否則後續變動可能會對你的系統造成非常大的衝擊。同時你還需要有帶領團隊的能力,肩負一些培養初、中級工程師的責任,指導他們的工作。

要具備解決緊急問題的能力,特別是在生產環境下出現問題時的解決能力。企業在面試招聘時總強調幾年工作經驗,這個經驗的背後就是解決問題的能力,是區分出一名優秀工程師的關鍵。

高級工程師需要具備哪些技能呢?

1)瞭解語言底層原理

因為高級工程師需要解決生產問題,所以掌握語言底層原理、學會用技術去調優,是必不可少的一項技能,比如JVM挑選。

2)熟悉常用併發的解決方案

比如在公司產品或平臺做大型活動時,流量出現了大規模爆發,該如何快速地去解決它?

3)理解中間件

熟悉常用中間件的使用場景,並深入理解某一箇中間件的使用。

4)掌握本質

掌握技術方案的同時要懂得為什麼這麼做,知其然且知其所以然。

4、架構師

首先,在中國互聯網的環境下,架構師往往要肩負技術攻堅的重要角色。比如在項目加工中出現某些技術難點的時候,需要架構師來幫忙把關落地。很多小公司的架構師也會負責一些編碼工作。

其次,架構師需要很強的架構設計能力,要掌握常用的設計思想,比如理解常用的SOA、微服務架構以及垂直架構的特點,在不同公司和不同項目的情況下選擇不同的架構設計。

另外架構師要具有全局技術規劃能力,對項目的技術棧和業務有深入理解,在此基礎上結合現有技術棧給出一個整體架構的解決方案。在初期架構落地實施後,再根據公司不斷髮展的情況,對架構擇時進行升級、迭代以及完善。

其實不難發現,從高級工程師往上的階段,對業務的要求越來越高。因為越是往上發展,我們越是需要在業務中沉澱自己。作為一個軟件工程師,若是30歲以後還沒有找到一個行業沉澱下來,對未來的發展非常不利。

5、技術經理

技術經理和上述崗位差異最大的一點就是管理職能。不僅需要規劃部門的技術路線,還需要管理十人及以上的團隊,將公司業務需求合理安排給部門內的同事。同時也要去培養團隊能力,關注團隊同事的成長,以及做好梯隊建設。

當你成為一名技術總監後,你的關注點可能不再是如何寫代碼,而是公司整體的戰略規劃以及技術管理體系的建設和維護。這時需要你從公司角度去完善和規劃整個研發中心體系,從技術層面來決策實現公司戰略。

所以技術總監級別的人,最重要的是具備技術的前瞻性和很強的協調能力,學會利用不同的資源去落實公司戰略。

下圖是以 Java 工程師為例列舉的各個職級所需的具體能力和技術點,供大家參考。

從一線開發到管理百人的技術總監,你需要知道的一切!

(製圖:純潔的微笑)

2

充滿選擇的職業生涯,如何權衡?

選擇大於努力,正確的選擇能讓你在未來職場生涯中走得更遠更快。下面就五種程序員常見的職業選擇問題,分享一下我的個人建議。

1、剛畢業或者是想轉行,到底該選擇自學還是去培訓機構?

在我看來培訓機構只是一個踏腳石。現在整個互聯網都非常反感培訓機構出來的學生,不是因為反感培訓機構,而是反感大量培訓機構背景的求職者在工作能力和工作經驗上造假的惡劣行為。但是值得肯定的一點是,他們能夠下定決心花費一萬多塊錢去學習,去推翻他們之前熟悉的技能,能選擇重新開始就已經很令人欽佩了。

2、是否可以選擇外包公司?

一般情況下我不建議選擇去外包公司。但是對於很多培訓機構出來的同學,技術功底還很薄弱,不去外包公司可能就沒有工作。在這種情況下我建議還是先就業再擇業,不要眼高手低。外包公司雖然學不到技術,但至少能讓你進入這個行業。

外包一般分為人力外包和項目外包兩種,人力外包是把你派到甲方環境去工作,項目外包就是把甲方項目拿到外包公司做。其實二者都是在做邊邊角角的工作,但是整體上項目外包的技術含量會更高一些,因為是外包公司來自主控制整個項目週期。

外包公司的優勢在於工資較高,同時工作強度非常大,另外還能通過外包項目去了解整個大型項目的運作、團隊化的配合等等。

3、選擇去互聯網公司還是傳統公司?

互聯網公司指BAT、TMD、小米等,技術更新快,業務併發量高,工作強度也很大。

傳統公司指華為、聯想等,技術棧較為穩定,更新迭代速度不如互聯網公司。對於金融、通信行業,穩定大於一切,所以傳統公司在技術選型上也偏保守。

如何去選擇二者呢?每個行業都有它的發展道路,我認為最關鍵的還是看你個人的興趣,做自己喜歡的事情,才會有更持之以恆的態度去面對後續的職業發展,在一個行業深耕才能發展到最好。

4、工作五六年之後,該選擇技術路線還是管理路線?

技術路線的崗位包括:初中高級程序員、初中高級架構師、首席架構和首席技術顧問等。

選擇技術路線的人的特點是對技術有強烈的熱情,偏內向,並且對新事物有求知慾。

管理路線崗位包括:從組長到項目經理或技術經理,到最後CTO(贏取白富美走上人生巔峰)。在這些角色中技術能力不是最重要的,而是要善於溝通、善於觀察,可以縱覽大局。

不管選擇哪個方向,最重要的是一定要保持體重和髮際線,因為程序員的職業後半程一定是拼體力的階段,如果不能保持健康的體魄和精神,很難在後期發展得更好。

5、30歲以後的程序員該如何做好選擇,良性發展?

從程序員畢業到30歲,也就是工作五到八年間,你的精力是不斷往上走的,換句話說,每個人的節奏雖然有快慢之分,總體上30歲之前是一個競爭力不斷增強的過程。但是30歲之後如果你還是一個缺乏核心優勢的普通程序員,既沒有掌握核心技能,也沒有行業積累,隨著後續發展競爭力會逐漸下降,恐怕35歲以後你的職場生涯會越來越難走。

所以,很多程序員在30歲這個關鍵點上做出了不同方向的選擇。

第一類就是深耕技術。他們對各方面的技術:RPC、底層原理都非常瞭解,熟練ppt、文檔、架構的同時,還能伏下心寫底層代碼。這種技術大拿一般都在較大型的互聯網公司做技術專家。

第二類是公司的中高層。他們在管理和溝通等方面比較突出,更多關注的是公司業務的大方向和前沿趨勢。

當然還有極少一部分是選擇第三條路:轉行,在IT公司做產品、售前、商務崗位,或者跨行做生意和自媒體等等。

3

學會利用細節打造一場出彩的面試

我在北京工作五年時間裡,陸陸續續面試了一百多名研發人員,有初、中、高級程序員,有架構師,也有技術經理。以下是我基於自己的五年技術面試官經驗總結出的程序員實用面試技巧。

首先,參加面試前需要一份好簡歷作為敲門磚。好的簡歷要簡潔大方、思路清晰、重點突出。

  • 最常見的問題是郵箱,儘量避免使用QQ郵箱等非正式郵箱(有些人的郵箱名還是上個世紀的QQ名,例如葬愛家族,非常不專業),可以使用126等類似的郵箱;
  • 最重要的是項目經驗,不用將所有項目經驗都寫上,最好挑選五到六個出色的項目來呈現;
  • 個人評價部分需要描述的是你可以扮演什麼角色,能給公司帶來什麼價值,切勿寫空話套話;
  • 簡歷裡如果有開源項目,最好附上你的GitHub和博客地址。

其次,面試就像找對象,第一眼最重要。其實在你面試前5分鐘內,基本就已經決定了這場面試是否成功。後面的時間,只是在不斷地幫助面試官驗證前5分鐘他內心得出的結論。因此務必在開始時簡單明瞭地介紹自己,流暢地描述此前公司的業務和項目流程。

另外,面試中面試者處於被動狀態的反應很關鍵。因為面試官處於優勢地位,他問的問題他都瞭解,所以不要因為某一個點答不出就表現得很不自然,不懂裝懂或迂迴回答,甚至去討好對方,要不卑不亢。

此外,吃透你項目中使用的技術點。面試官會根據你簡歷中的項目經驗做深入溝通。如果你把項目技術點呈現在簡歷上,卻不甚瞭解,一旦被問到就很尷尬。也切忌在簡歷上寫「熟練」某項功能或技能,面試官和你深度交流後,很容易會發現你只是瞭解而已,根本算不上熟練,這也很尷尬。

最後,不要貶低上家公司。即使上家公司再渣,也儘量口下留情,否則面試官只會給你的團隊合作能力減分。

現在互聯網公司和傳統公司的面試提問幾乎大同小異,下面是我整理的題庫,供大家作為面試前的準備和參考:

從一線開發到管理百人的技術總監,你需要知道的一切!

(製圖:純潔的微笑)

Q&A

答疑時間

(Q代表網友提問,A代表純潔的微笑解答)

Q: 剛入行不久,想像您一樣快速地從程序員升到技術經理,需要重點做哪些準備?

A: 其實剛開始我沒有想過這個問題,我首先想的是如何把當初的互聯網金融項目搞定。所以一個有志走技術經理路線的程序員,首先應該具備主動性,當出現問題時需要主動去解決,在做好自己工作的同時多幫助別人。另外你需要有出色的溝通能力,不能天天和產品經理還有測試吵架。

Q: 你平時會通過哪些途徑來磨練技術?

A: 我主要是通過寫文章,將項目中的技術點或者是解決過的問題提煉出來。好記性不如爛筆頭,只有不斷記錄和總結,才能對技術加深理解。不管是做管理還是做技術,善於做總結的人職場生涯會發展得越來越好。

Q: 你面試候選人時比較看重哪些技能和素質?

A: 比較重視綜合素養,候選人在擁有良好技能的同時還要有總結和溝通能力。在面試現場,我會著重觀察候選人的表達能力,如果他連自己簡歷的項目都講解不清楚的話,我會認為這人的邏輯思維能力不過關。

Q: 團隊培養方面有什麼經驗可以分享呢?

A: 關於團隊培養我最大的建議就是以心交人。技術團隊的氛圍還是不錯的,你只有真心為同事著想、幫他解決問題,他才會感受到你是一個好 leader。另外要多創造和程序員們溝通的機會,培訓就是一個很不錯的方式,例如每週安排一場討論會,或者平常多出去聚餐等等。溝通得越多,在工作中配合的緊密度會越好。

Q: 公司業務規模很小,有什麼好的辦法鍛鍊自己的能力嗎?

A: 公司業務小不代表沒有鍛鍊技術的機會。在這種情況下,你需要了解每個技術背後的原理。比如你在項目中用到了一個 Spring,那就瞭解下 Spring IOC 的底層是怎麼運作的。或者公司在發展中引入了新組件,你要把它吃透。同時在開發過程中可適當做一些壓力測試,比如學會使用 Jmeter 等工具去檢驗項目的併發能力,根據結果再不斷做出調整。另外在業餘時間可以多看一些社區的技術文章,擴展技術視野並實踐。


分享到:


相關文章: