指望一個凡人掌握開發過程當中各個方面的知識,合理嗎?也許不合理,可是Facebook正是要尋找這樣的人。在一個OSCON會議上,一名Facebook的工程師告訴個人,他們只聘請「全能(Full stack)」的程序員。那麼,全能是什麼意思呢?node
對於我,一個全能的程序員應該熟悉每個層面的技術知識,若是不是所有掌握,也要對全部的軟件技術有真正的興趣。程序員
熟悉整個技術體系的程序員,可使得周圍的人的生活更加容易。這就是爲何我反對在工做場合的技術鴻溝。固然,大公司裏的政治和溝通的問題每每會影響他們的發展。我想Facebook招聘策略的目的就在於,若是聰明的人身心俱到,一個好的產品能夠在更短的時間內發佈。安全
技術知識體系的分層:服務器
若是數據模型存在缺陷,那麼業務邏輯和更高的層次將要用奇怪、醜陋的代碼來彌補那些模型沒有覆蓋到的邊界場景。
全能程序員知道如何構建合理規範化的關係模型,包括外鍵、索引、視圖、查找表等。
全能程序員熟悉非關係數據存儲的概念,理解其比關係型數據存儲的優勢。網絡
明白應用程序提供的核心商業價值。
須要紮實的面向對象知識。
須要理解框架。多線程
理解外部如何與業務邏輯和數據模型進行交互。
框架在這裏會用得不少。
全能的程序員有能力寫出清晰,一致,簡單易用的接口。一些API的複雜得使我感到厭煩。架構
全能程序員
a) 知道如何建立可讀的佈局,或者
b) 明白本身須要幫助藝術和圖形設計師。
不管哪種,實現好的視覺設計是關鍵。
掌握HTML5/CSS3。
Javascript在未來會是很是重要的一門語言,不少使人興奮的做品都是用Javascript完成的。(node, backbone, knockout……)框架
全能程序員明白,用戶只是想讓產品能夠正常工做。
一個好的系統不會使得用戶患上腕管綜合徵和眼痛病。一個全能程序員會將一個須要8次點擊3個步驟的工序,修改成1次點擊。
全能程序員會添加有用的錯誤信息。若是有什麼出錯了,要向用戶道歉。有時程序員漫不經心寫的錯誤信息會讓用戶以爲很傻。佈局
如今咱們模糊的進行的架構設計,但這會遠離了真正的需求。
全能程序員會預先看看當用戶在使用軟件的時候,會發生什麼。同時,他們也會關注業務部分。單元測試
可以編寫質量單元測試。順便說說,Javascript如今也能夠進行單元測試了。
理解持續自動化集成,包括構建應用,測試,編寫文檔和部署擴展。
安全意識也很是重要,由於每個層面都會有其易受攻擊的地方。
將代碼牢牢的綁到一個特定的環境(庫,操做系統,硬件等等),是很是糟糕的實踐來的。全能程序員理解全部的知識體系,不意味着他們能夠走捷徑。然而,他們確實會這樣作,若是隻是創建一個原型的話。
技術型創業公司須要全能程序員的多才多藝。可是,一個成熟的公司,須要更多的是專一的技術。
我不肯定在你使用多種語言,使用多個平臺,甚至爲多個行業工做以前,你是否能夠自稱爲全能程序員。全能程序員要在「高級程序員」之上,由於他們與通曉多語言的程序員在同一線上,可是對各個模塊的關係更有全局的意識。注意我剛剛的列表,只有3-5項包含了編寫代碼。