[轉] What is a Full Stack developer?

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

對於我,一個全能的程序員應該熟悉每個層面的技術知識,若是不是所有掌握,也要對全部的軟件技術有真正的興趣。node

熟悉整個技術體系的程序員,可使得周圍的人的生活更加容易。這就是爲何我反對在工做場合的技術鴻溝。固然,大公司裏的政治和溝通的問題每每會影響他們的發展。我想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項包含了編寫代碼。網絡

 

 

Is it reasonable to expect mere morals to have mastery over every facet of the development stack? Probably not, but Facebook can ask for it. I was told at OSCON by a Facebook employee that they only hire ‘Full Stack’ developers.  Well, what does that mean?多線程

To me, a Full Stack Developer is someone with familiarity in each layer, if not mastery in many and a genuine interest in all software technology.架構

Good developers who are familiar with the entire stack know how to make life easier for those around them. This is why I’m so against silos in the work place. Sure, politics and communication challenges get in the way in large organizations. I think the point Facebook is going for with their hiring policy is, if smart people use their heads and their hearts, a better product gets built in less time.app

Layers of the Full Stack:

  1. Server, Network, and Hosting Environment.
    1. This involves understanding what can break and why, taking no resource for granted.
    2. Appropriate use of the file system, cloud storage, network resources, and an understanding of data redundancy and availability is necessary.
    3. How does the application scale given the hardware constraints?
    4. What about multi-threading and race conditions? Guess what, you won’t see those on your development machine, but they can and do happen in the real world.
    5. Full stack developers can work side by side with DevOps. The system should provide useful error messages and logging capabilities. DevOps will see the messages before you will, so make them count.
  2. Data Modeling
    1. If the data model is flawed, the business logic and higher layers start to need strange (ugly) code to compensate for corner cases the data model doesn’t cover.
    2. Full stack developers know how to create a reasonably normalized relational model, complete with foreign keys, indexes, views, lookup tables, etc.
    3. Full stack developers are familiar with the concept of non-relational data stores and understand where they shine over relational data stores.
  3. Business Logic
    1. The heart of the value the application provides.
    2. Solid object oriented skills are needed here.
    3. Frameworks might be needed here as well.
  4. API layer / Action Layer / MVC
    1. How the outside world operates against the business logic and data model.
    2. Frameworks at this level should be used heavily.
    3. Full stack developers have the ability to write clear, consistent, simple to use interfaces. The heights to which some APIs are convoluted repel me.
  5. User Interface
    1. Full stack developers: a) understand how to create a readable layout, or b) acknowledge they need help from artists and graphic designers. Either way, implementing a good visual design is key.
    2. Can include mastery of HTML5 / CSS.
    3. JavaScript is the up and coming language of the future and lots of exciting work is being done in the JavaScript world (node, backbone, knockout…)
  6. User Experience
    1. Full stack developers appreciate that users just want things to work.
    2. A good system doesn’t give its users carpal tunnel syndrome or sore eyes. A full stack developer can step back and look at a process that needs 8 clicks and 3 steps, and get it down to one click.
    3. Full stack developers write useful error messages. If something breaks, be apologetic about it. Sometimes programmers inadvertently write error messages that can make people feel stupid.
  7. Understanding what the customer and the business need.
    1. Now we are blurring into the line of architect, but that is too much of a hands off role.
    2. Full stack developers have a grasp of what is going on in field when the customer uses the software. They also have a grasp of the business.

 

Other Pieces of the Puzzle:框架

  1. Ability to write quality unit tests. By the way, even JavaScript can have unit tests these days.
  2. Understanding of repeatable automated processes for building the application, testing it, documenting it, and deploying it at scale.
  3. An awareness of security concerns is important, as each layer presents its own possible vulnerabilities.

 

Closing Thoughts:less

It is very bad practice to tightly couple code to a specific implementation (library, OS, hardware, etc). Just because a full stack developer understands the entire spectrum doesn’t mean they have license to take shortcuts. Well, actually they do if it is a build and throw away prototype.

Technology start-ups need full stack developers for their versatility!  However, as an organization matures, it needs more and more focused skills.

I’m not sure you can call yourself a full stack developer until you have worked in multiple languages, platforms, and even industries in your professional career. Full stack goes beyond a ‘senior engineer’, as it is along the same lines as a polyglot programmer but with a higher view of all the connecting pieces. Note that on my list, only items 3-5 involve writing code.

相關文章
相關標籤/搜索