如何區分資深(Senior)和入門(Junior)的Rails開發者?


在Linkedin上的社團有篇討論,講到如何區分Rails的資深和資淺開發者,條列出許多「實作過」及「應該了解」的項目。簡單來說,資淺的Rails開發者只摸過皮毛,但資深的Rails開發者有確實操作且了解所有相關的套件及Rails本身的歷史及優缺點。

要區分所有Web技術開發者是資深與否,其實大同小異。以下我編修原文的說法,並補充一些自己的看法:

Scaling及效能

資淺開發者並未接觸過擴大規模(scaling)的問題,尤其Rails在scaling的問題上會比其他例如PHP的部分框架來得更難處理。

資深開發者不會隨意進行scaling,而會先從效能方面著手,他們知道如何測試效能、碰到效能問題時知道從何下手、在實際線上的應用程式中知道該如何改善效能。雖然Rails社群常常有老手說「Rails根本不用管scaling」,但那只是玩笑話,實際使用必定會碰到效能問題。

佈署

資淺開發者可能只使用過一種佈署工具,或是完全沒碰過。

資深開發者使用過多種佈署方式,例如Capistrano、Mina等等工具,以及Heroku、一般VPS等佈署環境,並且了解各個工具和環境之間的優缺點和限制。Rails的中心思想是加速Web開發,在佈署的方面並沒有比較簡單,造成資淺開發者可能在實際佈署時有一大段難易度的落差。

自動化測試

資淺開發者常常在錯誤的地方實作太多不必要的自動化測試,就像掉進陷阱一樣,造成事倍功半,修改時苦不堪言。

資深開發者有實作過自動化測試,以及該如何針對各種應用程式撰寫最佳化的自動化測試。了解多種測試框架、寫法以及各種框架的優缺點。更重要的,資深開發者知道瀏覽器端(client side)的code該怎麼測試,以及要怎麼測試才有用、有效。資深開發者也知道不同應用程式適用的測試規模也不同,如果只是一個小型的個人部落格,就不值得投資太多時間及人力在撰寫測試上,以免造成團隊的人力浪費。

Rails標準用法

資淺開發者只了解Rails本身的標準用法,例如template系統只知道ERB,資料庫系統只知道ActiveRecord,資料庫只知道MySQL和SQLite等等。

反之,資深開發者知道標準以外的用法。資深開發者也嘗試過各種套件的土法煉鋼寫法,例如知道user登入該如何自己寫,當然也用過Devise這類非常簡便的gem。嘗試過背景執行工作(background process)、第三方API串接、還有也用過其他Ruby web framework,在遇到一些不同需要解決的問題時,不會只用Rails來當作唯一framework。

資深開發者也使用過不同的web server framework,包括Ruby以外的。

Ruby本身

資淺開發者只知道Rails,但對於Ruby本身並不了解。

反之,資深開發者了解Ruby,知道Rails各種強大的功能是從哪些Ruby的特色延伸而來,例如class之間的繼承。資深開發者也不怕面對Rails原始碼(source code)。

Rails的歷史

資淺開發者不了解歷史,只知道Rails現在很紅。

2004年Rails剛出現時,也不是一炮而紅的,是經過多位開發者在歷史的交疊下不斷改進、編修而來。資深開發者了解為何Rails能影響整個開源(open source)、商業市場,同時也影響未來許多framework的發明。簡單來說,資深開發者了解Rails的歷史、近期走向。

開發團隊

資淺開發者眼中只有技術,認為產品開發完全只跟技術有關係。

資深開發者會把眼界看得更開,知道產品開發跟溝通、規劃、策略都有關係,跟團隊所有成員、利害關係人(stakeholders)正確的溝通,才會有正確的開發方向以及正確的人力配置,不會有奇怪的期限、不必要的加班、奇怪的code出現。同時,資深開發者了解各種專案管理方式的優缺點,並且針對不同專案提出最適當的管理方式。

總結

以上是比較理想的資深開發者該有的面貌,聽起來非常繁瑣,但我想只要多嘗試,其實很多根本的道理就會慢慢了解。尤其有些一個人的核心價值比起其他項目來的更為重要,例如團隊間的溝通,這樣技術以外的層級不是一個人關在房間裡就能練成的。不管未來技術如何演進,只要了解技術本身的價值、以及到底該如何解決問題,就不會被技術牽著鼻子走。

參考資料

Njonsson