技術高手如何煉成


面試的時候,我會問面試者,你日常如何構建自己的知識體系,如何讓自己更高更快更強?多數工程師並沒有深入地思考過這個問題,基本上是零敲碎打,隨機性大,基本上是腳踩西瓜皮滑到哪里算哪里。
本着不能讓你白來一趟的精神,好為人師的我會娓娓道來:

第一階段 認真構建完整的知識體系


十幾年前我投身軟件行業的時候,光是講解數據庫原理、操作系統、TCP/IP、組網、算法等等基礎知識的英文原版書摞起來就等身,認認真真看完,各種上手實踐,入行后,讀遍 C++ 各種經典著作,讀遍各種協議原文,認認真真打基礎。
很多工程師都說自己平常就是在某些 IT 門戶上看看推薦的博文或新聞,我說這屬於典型的零敲碎打,不夠刺激。
聊到這時,我會舉一個例子,為什么要閱讀長篇小說,因為中短篇小說就像用針扎你,而長篇小說就像把你裝進一個沙袋里吊起來,從四面八方用狼牙棒打你,酣暢淋漓。構建可用的知識體系,就得讀書,書是有體系結構的,你關心不關心,現階段你用到用不到,它都講到了,從頭到尾看幾遍,針扎得透透的。

何謂知識體系?
幾年前,前支付寶架構師姚建東曾經在我們公司做過技術人員如何規划自己的分享講座,他是這么論述的:
技術與技巧包括:

  • 計算機基礎理論
    • 計算機模型:內存/IO/時鍾/CPU……
    • 算法
    • 專項技術領域:
      • 數據挖掘
      • 數據管理
      • 智能推薦
      • 搜索
      • ……
  • 語言與工具
    • 語言與相關體系
    • 開發工具,分析工具,代碼管理工具
    • HTML/CSS/JS/Ajax
    • 常用框架與第三方類庫
  • 調試與測試
    • 調試方法和哲學
    • 定位問題
    • BUG管理工具
    • 單元測試
    • 集成測試
    • 性能測試
    • 安全測試
    • 兼容性測試與方法
    • JS/Ajax測試與方法
    • 服務層測試
    • Web層測試
  • 網絡與系統
    • TCP/IP協議與模型,HTTP/SMTP等協議
    • Linux系統,網絡分析工具,系統分析工具
    • 容量,流量與負載均衡
    • 應用部署、規范、規划
    • 安全
    • 監控與故障分析
    • 磁盤與存儲
    • Shell
    • DNS與域名
    • 緩存,反向代理
    • 圖片服務器(海量小文件)
  • 需求挖掘與分析
    • 需求文檔格式
    • 需求訪談
    • 需求分析方法,需求分析工具
    • 領域知識與經驗
  • 系統分析與設計
    • UML語言與模型
    • 分析模式
    • 設計模式,領域驅動
    • 系統分析文檔格式
    • 系統設計文檔格式
    • 功能性需求與非功能性需求
  • 數據與系統
    • 數據庫
    • 可伸縮策略,擴展策略,備份,容災,性能,安全,高可用……
    • 數據設計與范式,SQL/NoSQL,Cache,分布式文件
  • 架構設計
    • 架構模式,典型互聯網公司架構演進歷史
    • 架構原則,常用策略
    • 架構設計方法
    • 非功能性理解
      • 擴展性
      • 伸縮性
      • 穩定性
      • 一致性
      • 性能
      • 吞吐量
    • 容量預測與規划
    • 架構體系與相關技術
  • 過程與管理
    • 分析過程
    • 研發過程
    • 評審過程
    • 測試過程
    • 發布過程
    • 回滾過程
    • 文檔管理
    • 知識管理
    • 項目管理

以上其實就是一份從業基礎知識清單,你可以按圖索驥,閱讀相關書籍。

第二階段 順着一個Topic鑽進去,鍛煉自己的預研能力


無論公司業務還是自己喜歡做的事,都可以抽象出通用性課題,然后以做論文的方式殺進去。這個事情得反復操練,有意識操練。
做事方式為:

  1. 抽象出 Topic——如分布式鎖,分布式並行計算引擎,防CSRF的FormToken自動生成框架,定時任務管理與調度平台,分布式跟蹤,等等
  2. 向功課好的學生學習——有針對性地深入了解業界其他公司是如何分析問題和解決問題的,匯總各種方案,站在巨人的肩膀上
  3. 分析特定應用場景,技術選型
  4. 兼顧高可用性和可伸縮,做設計評審
  5. 做測試自證靠譜,梳理知識點,開技術分享會
  6. 上線商用,總結經驗教訓,開經驗分享會


其中一個重點是匯總和分享。05年時,應電信級統一消息業務需要,我去研究了 SIP 協議,做了各種試驗,分析報文,寫了一系列的幻燈片,做了公開分享,一時間還頗受歡迎:

  1. SIP_to_Freshman_by_zhengyun.ppt
  2. SIP之穿越NAT_by_zhengyun.ppt
  3. SIP體系架構講義及消息交互演示_by_zhengyun.ppt
  4. SIP多方會話消息之實例講解_by_zhengyun.ppt
  5. SIP安全框架之認證[NTLM和Kerberos]_by_zhengyun.ppt
  6. SIP消息之逐項講解_by_zhengyun.ppt

為什么要寫出來、講出來呢?
因為有一個學習金字塔理論,如下圖所示:

我們讀過的事情能夠記住學習內容的10%,
我們聽過的事情能夠記住20%,
我們看過的事情能夠記住30%,
我們聽過和看過的事情能夠記住50%——如看影像/看展覽/看演示/現場觀摩,
我們說過的事情能夠記住70%——如參與討論/發言,
我們說過和做過的事情能夠記住90%——如做報告,給別人講,親身體驗,動手做。
這也就是我在《窩窩研發過去幾年做對了哪些事》中闡述的管理方法:我們從入職之后就有意識地訓練大家,讓大家能夠公開陳述、清晰表達。所以,試用期內,新人必須做一次技術分享和一次技術評審,面對各方的 challenge;預研的中間和結尾都要有分享會;平時也要定期組織技術講座。

第三階段 瘋狂回答技術問題


知識體系慢慢構建,與業務相關的抽象 Topic 也在探索中。
但這還不夠。
因為你親身接觸到的世界太小,可能不足以構成挑戰,你可能意識不到自己缺多少知識和技能,不利於你分析問題、提出問題和解決問題的能力培養。
所以,要主動出擊:
瘋狂回答問題

我曾經在入行的頭幾年里幾乎把我關注的垂直領域(包括語言領域和業務領域)里的所有問題都回答了一遍。我對外宣揚知無不言言無不盡,放出郵件地址和 MSN(那時候 MSN 很高大上),很多網友都會發郵件或者加我好友,問各種開發疑難問題,平均每天都有幾個,然后我把解決問題的過程寫成微軟 KB(KnowledgeBase) 文體發表在我的博客上。
你想想看,工作中的問題你平均每隔幾天才能遇到一個,而這么做,每天你都會遇到幾個乃至於十幾個,第一讓你腦力激盪,第二接觸到更多新知。

05年到06年期間,我因工作需要學習了 JavaME(或古老的稱呼 J2ME),早年間 Symbian 手機上的客戶端開發。那段時間我天天掃中文論壇的帖子,力求回答所有問題,尤其是那些 BUG 或故障。對於那些暫時沒有人解決的,如流媒體實時播放,如仿 OperaMini 二級菜單界面,都上下求索,最后放出思路以及源碼。
同時,我經常整理常見問題,梳理成冊並發布。譬如我整理過的 J2ME 疑難問題:

  1. [J2ME Q&A]真機報告MontyThread -n的錯誤之解釋
  2. [J2MEQ&A]WTK初始化WMAClient報錯XXX has no IP address的解釋
  3. [J2ME Q&A]untrusted domain is not configured問題回應
  4. [J2ME]“Cannot open socket for LIME events”錯誤解決

幾個月后,我成為 J2ME 中文論壇超級版主。通過這個歷程,我想告訴大家,回答網友問題,技巧得當的話,比如別老是重復回答新手問題,試着攻克那些疑難問題,或者離奇故障,絕對不會浪費你的時間。
為什么?
因為你要信奉:

你學過的每一樣東西,你遭受的每一次苦難,都會在你一生中的某個時候派上用場。
——佩內洛普·菲茲傑拉德 《離岸》

Everything that you've learnt and all the hardships you've suffered will all come in handy at some point in your life.

 

第四階段 RCA/總結


現在是你把經驗教訓變為財富的時刻了。
什么是好的技術 Leader?
隨便一個業務需求或業務場景講出來,你立刻把它抽象為幾個模塊/系統/Topic,然后侃侃而談,業界都是怎么解決的,我們以前又是怎么分析怎么解決的,現在咱們這種情況下應該如何設計,可能會遇到什么問題,我們應該做哪些預防設計,blabla。

怎么做到這一點?
第一,寫 RCA 報告。
我以前說過,『窩窩從 2011 年開始,一直堅持每錯必查、錯了又錯就整改、每錯必寫,用身體力行告訴每一個新員工直面錯誤、公開技術細節、分享給所有人,長此以往,每一次事故和線上漏測都會變為我們的財富。這就是我們的 RCA(Root Cause Analysis)制度,截止到目前已經收集整理了近兩百個詳盡的 RCA 報告。』
RCA 報告格式為:

  1. 背景知識(Optional)
  2. 問題現象
  3. 影響范圍
  4. 問題原因
  5. 問題分析過程(Optional)
  6. 解決辦法
  7. 后續處理措施:如線上臟數據如何修復,如對用戶造成的影響如何彌補等(Optional)
  8. 經驗教訓
  9. RCA類型:如代碼問題、實施問題、配置問題、設計問題、測試問題

這樣,作為一名合格的老兵,你見過了足夠多的血,並且把它們變成了你的人生財富。
第二,寫總結。
話說,要經常拉清單。
侃侃而談得有資料,這些都得是你自己寫才能印象深刻,關鍵時刻想得起來。

好了,這就是我告訴面試者的高手煉成四個階段。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM