怎樣才是全能的程式設計師?

發表於2013-06-06

  期望一個凡人掌握開發過程中各個方面的知識,合理嗎?也許不合理,但是Facebook正是要尋找這樣的人。在一個OSCON會議上,一名Facebook的工程師告訴我的,他們只聘請“全能(Full stack)”的程式設計師。那麼,全能是什麼意思呢?

  對於我,一個全能的程式設計師應該熟悉每一個層面的技術知識,如果不是全部掌握,也要對所有的軟體技術有真正的興趣。

  熟悉整個技術體系的程式設計師,可以使得周圍的人的生活更加容易。這就是為什麼我反對在工作場合的技術鴻溝。當然,大公司裡的政治和溝通的問題往往會影響他們的發展。我想Facebook招聘策略的目的就在於,如果聰明的人身心俱到,一個好的產品可以在更短的時間內釋出。

技術知識體系的分層:

1.    伺服器,網路和主機環境

  1. 這包括理解什麼會當機,為什麼會,沒有任何資源是理所當然的。
  2. 合理使用檔案系統,雲端儲存,網路資源,理解資料冗餘和可用性。
  3. 在硬體受限的情況下,如何擴充套件應用。
  4. 那麼關於多執行緒和競爭呢?你猜怎麼著,你在你的開發機器上看不到,但是在現實中卻經常發生。
  5. 全能程式設計師可以與DevOps協同工作。系統應該提供有效的錯誤資訊和日誌能力。DevOps會在你之前看到這些資訊,使它們有意義。

2.    資料建模

  1. 如果資料模型存在缺陷,那麼業務邏輯和更高的層次將要用奇怪、醜陋的程式碼來彌補那些模型沒有覆蓋到的邊界場景。
  2. 全能程式設計師知道如何構建合理規範化的關係模型,包括外來鍵、索引、檢視、查詢表等。
  3. 全能程式設計師熟悉非關係資料儲存的概念,理解其比關係型資料儲存的優點。

3.    業務邏輯

  1. 明白應用程式提供的核心商業價值。
  2. 需要紮實的物件導向知識。
  3. 需要理解框架。

4.    API層面/Action層面/MVC

  1. 理解外部如何與業務邏輯和資料模型進行互動。
  2. 框架在這裡會用得很多。
  3. 全能的程式設計師有能力寫出清晰,一致,簡單易用的介面。一些API的複雜得使我感到厭煩。

5.    使用者介面

  1. 全能程式設計師a)知道如何建立可讀的佈局,或者b)明白自己需要幫助藝術和圖形設計師。無論哪一種,實現好的視覺設計是關鍵。
  2. 掌握HTML5/CSS3。
  3. Javascript在將來會是非常重要的一門語言,很多令人興奮的作品都是用Javascript完成的。(node, backbone, knockout……)

6.    使用者體驗

  1. 全能程式設計師明白,使用者只是想讓產品可以正常工作。
  2. 一個好的系統不會使得使用者患上腕管綜合徵和眼痛病。一個全能程式設計師會將一個需要8次點選3個步驟的工序,修改為1次點選。
  3. 全能程式設計師會新增有用的錯誤資訊。如果有什麼出錯了,要向使用者道歉。有時程式設計師漫不經心寫的錯誤資訊會讓使用者覺得很傻。

7.    理解使用者和業務的需求

  1. 現在我們模糊的進行的架構設計,但這會遠離了真正的需求。
  2. 全能程式設計師會預先看看當使用者在使用軟體的時候,會發生什麼。同時,他們也會關注業務部分。

其他問題:

  1. 能夠編寫質量單元測試。順便說說,Javascript現在也可以進行單元測試了。
  2. 理解持續自動化整合,包括構建應用,測試,編寫文件和部署擴充套件。
  3. 安全意識也非常重要,因為每一個層面都會有其易受攻擊的地方。

總結:

  將程式碼緊緊的綁到一個特定的環境(庫,作業系統,硬體等等),是非常糟糕的實踐來的。全能程式設計師理解所有的知識體系,不意味著他們可以走捷徑。然而,他們確實會這樣做,如果只是建立一個原型的話。

  技術型創業公司需要全能程式設計師的多才多藝。但是,一個成熟的公司,需要更多的是專注的技術。

  我不確定在你使用多種語言,使用多個平臺,甚至為多個行業工作之前,你是否可以自稱為全能程式設計師。全能程式設計師要在“高階程式設計師”之上,因為他們與通曉多語言的程式設計師在同一線上,但是對各個模組的關係更有全域性的意識。注意我剛剛的列表,只有3-5項包含了編寫程式碼。

英文原文:[What is a Full Stack developer?]

譯文:http://www.cnblogs.com/wilsonwen/archive/2013/06/03/3115998.html

相關文章