最近「知乎」上在熱烈討論一則傳聞,說Facebook在招聘所謂的「全棧工程師」,要求應徵者對開發堆棧的每一個方面都有所掌握。那究竟何爲 「全棧工程師」呢?從字面上來理解,全棧工程師必須熟悉開發堆棧的每個層次,或者至少熟悉絕大多數而且對全部的軟件技術有天生的熱情和興趣。數據庫
對於這樣的開發者,他們很是擅長使用掌握的技術讓本身的生活變得輕鬆,這也正是爲何Facebook會但願僱傭他們,他們用本身的腦子與熱情編碼, 好的產品也天然能在最短的時間呈現。那麼,具體而言,一個合格的「全棧工程師」要具有哪些素質呢?編程
開發堆棧剖析
-
服務器,網絡以及宿主環境安全
- 須要理解哪些模塊可能失效以及爲何,而不能理所固然地認爲,只要不斷增長資源就能解決全部問題。
- 知道如何運用操做系統、雲存儲、網絡資源,並能理解數據冗餘以及可用性是必需的。
- 瞭解應用的規模是如何對硬件形成限制的。
- 還有多線程和競態條件,這些概念在開發機上每每不會遇到,可是他們在現實的部署環境中卻無處不在。
- 全棧工程師還必需要可以與DevOps很好地協做。他們所設計的系統應該提供有用的錯誤消息和日 志能力,這樣DevOps就可以及時得到這些信息,並採起有價值的行動。
-
數據建模服務器
- 若是數據模型存在缺陷,那麼就經常須要在業務邏輯和更高的層面上使用醜陋的代碼來彌補那些數據模型沒辦法覆蓋的死角。
- 知道如何創建合理的範式關係模型,具有完善的外鍵、索引、視圖、查詢表等等。
- 還要熟悉非關係型數據的存儲,知道非關係型數據庫在哪些方面超越關係型數據庫。
-
業務邏輯網絡
- 這是系統應用價值的關鍵所在。
- 掌握SOLID設計能力(單一職責,開放且封閉,Liskov替代性,接口分離,依賴注入)。
- 熟悉一些經常使用的框架。
-
API/Action/MVC多線程
- 這些關乎外部世界如何與業務邏輯及數據模型交互。
- 會使用到大量的框架。
- 有能力寫出清晰、一致、使用簡單的接口。
-
用戶界面架構
- 全棧工程師須要:a)懂得如何構建易讀的佈局;b)能意識到藝術家和圖形設計師的做用。總之,實現一套好的視覺設計方案尤其關鍵。
- 熟練掌握HTML5/CSS。
- 從目前的趨勢來看,JavaScript將會是明日之星,最近這一領域碩果累累(NodeJs, backbone, knockout, Angular(本身的加的, 原文沒有))。所以,掌握JavaScript必不可少。
-
用戶體驗框架
- 全棧工程師應該意識到:用戶僅僅是但願一切運轉良好。
- 一個好的系統是不會讓用戶得腕管綜合徵或產生眼疲勞的。全棧工程師能審視全局,能夠將一個須要8次點擊+3個步驟的過程,簡化爲僅須要一次點擊。
- 知道如何向用戶提示錯誤信息。若是出現故障,真誠道歉。有時一些無心的錯誤信息,會讓用戶感到莫名奇妙。
-
理解用戶和市場需求編程語言
- 這層關係到系統架構,但也毫不是一個不能碰的角色(有可能翻譯有誤,原文:but that is too much of a hands off role)。
- 全棧工程師要領悟客戶使用軟件過程當中會須要些什麼以及整個市場須要些什麼。
其餘方面
- 能寫出高質量的單元測試,時至今日,甚至連JavaScript都能寫出單元測試了。
- 知道如何使用可重複的自動化工具來構建系統、測試、撰寫文檔以及按需部署。
- 系統的安全意識很是重要,要知道,開發堆棧中的每一層均可能存在薄弱環節。
總結
將代碼與某個特定的實現(不管是軟件庫,操做系統,硬件,等等)緊綁在一塊兒並非好的實踐。全棧工程師雖然學術淵博,但不意味着他們能抄 捷徑,除非他們是在開發一個建完即扔的一次性原型。工具
技術型的創業企業在初期爲了知足靈活性,對全棧工程師的需求比較大,可是,隨着企業的成熟,會須要愈來愈多的專業型人才。
要成爲一名全棧工程師,至少要使用過多種編程語言在各類領域的不一樣平臺工做多年。全棧工程師除了像「高級工程師」那樣要掌握多門編程語言, 還必須具備更高的視野將全部的模塊聯繫起來。值得注意的是,在以上列表中,僅有3——5項是與編碼有關的。
原文:http://www.laurencegellert.com/2012/08/what-is-a-full-stack-developer/