guest@blog.cmj.tw: ~/posts $

Engineer Level


Classify of engineer

最近有認識的人面試但程度不夠 senior 所以被刷到,所以列出我覺得工程師的各種等級:

Freshman / 新鮮人

在一開始時工程師都會被視為是新鮮人,只要滿足:

  • 不熟悉任何一種程式語言、包含基本語法與函式庫的使用
  • 無法完成指定 SPEC 的函數 (Function)
  • 遇到問題時無法透過網路下關鍵字找到任何幫助

在這個時期的工程師需要一個好的導師,並花上 1/3 以上的工作時間帶領才有辦法讓新鮮人有所功用。 這代表新鮮人並無法獨立作業、對於專案本身也沒有有效貢獻力,甚至在某方面對於專案來說是拉力。

Junior

當工程師經過一段時間的訓練之後具有一定的貢獻程度,像是完成明確 SPEC 的函數、協助 Unit Test 以及協同 QA 解決程式上的 Bug。但在工作表現上依然存在著:

  • 無法熟悉掌握程式語言的特性
  • 無法判斷函式庫的優劣
  • 針對問題可以下關鍵字、但無法理解為何可以這樣解決問題
  • 對於程式碼本身架構 (Coding Style)、效能 (Performance) 沒有概念

在這個時期的 Junior Engineer 並不被視為是即戰力:對於專案而言這個等級的 Junior 可以產出有效功能, 但是對於專案整體來說缺乏完整性,隨時可能因為邊際條件 (Edge-Case) 而讓程式崩潰 (Crash)。而程式碼本身, 也因為對於架構、效能沒有有效掌握,對於專案後續維護上具有相當風險。

而當 Junior Engineer 過了一段時間的訓練之後,上面的問題獲得有效改善:有一定的程式架構基礎、基本效能判斷、 絕大多數問題可以透過正確的關鍵字在網路上找到解答等,而這時候的 Junior Engineer 已經可以被視為是即戰力。 但是在這個階段的 Junior 還是具有一些問題,像是:

  • 無法經驗傳承已經發生過的問題,時常碰到 Regression Bug
  • 無法模組化
  • 無法抽象、重複利用程式碼
  • 無法解決系統架構問題

Senior

當一個 Junior Engineer 可以獨立完成一個功能、或者在大型專案中獨立負責部分子功能時就可以被視為是 Senior Engineer。在這個階段 Senior 已經可以獨立解決大多數的程式邏輯問題、部分效能瓶頸,程式碼具有架構、可讀性、 模組化,產出的專案也具有一定的防呆、預警措施等。寫出來的程式也具有一定的可修改彈性,在這個階段的 Senior Engineer 無法解決的問題像是:

  • 耦合性 (Coupling)
  • 恢復機制 (Failure Recovery)
  • 平行化問題 (Parallel)
  • 系統架構設計

在這個階段的 Senior Engineer 已經可以獨力解決專案或帶領 Junior Engineer 協同完成。再經過一段時間之後, 可以了解到大型專案中可能遇到的問題,像是在大規模 (Large-Scale) 才會遇到的效能瓶頸、資源競爭 (Resource Leak)、 99.9999 服務保證等系統問題後,就成為具有一定實力的 Senior Engineer。而接下來不足的部分則像是:

  • 平台相依 (Platform-Dependence)、多平台運行
  • 早期系統架構、評估

Architect / 架構師

CTO