什麼是全棧(Full Stack)開發者?

有一種說法是facebook只僱傭Full Stack類型的開發者,是指什麼?


可以獨立完成以下流程:

  • 沙中取硅並提純
  • 挖礦與冶煉
  • 用硅與各種礦製作處理器、存儲器等各種設備
  • 為各種設備編寫驅動
  • 能把各種設備拼出計算機
  • 為計算機編寫操作系統
  • 編寫程序各個 Layer 的代碼
  • 完成軟體測試
  • 產品設計
  • UI 、UX 設計
  • 軟體銷售
  • 市場推廣與運營
  • 售後諮詢


會做人工智慧,寫劇情,做渲染,做模型,做配樂,做音效,做伺服器,做界面,順便畫個網站宣傳一下剛剛做出來的遊戲


網址來源:What is a Full Stack developer?

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.

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 the 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:

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.


暑假在PopCap Games做遊戲策劃,最近在和朋友一起在做獨立遊戲,用Bootstrap做網頁前端並且著手申請去美帝讀Computer Science相關專業,對full-stack這個詞有了一些自己的理解。

做獨立遊戲,正如樓上所說「會做人工智慧,寫劇情,做渲染,做模型,做配樂,做音效,做伺服器,做界面,順便畫個網站宣傳一下剛剛做出來的遊戲的人工智慧。」 代碼需要自己實現,UI界面需要自己用AI或者PS設計,Icons也要自己設計,動畫以及形象設計也是,需要程序員非常全能,同學每次看我電腦桌面還以為我是學習媒體與設計的orz,不過做遊戲的過程確實是一件有成就感的事情,因為一切事情我都可以自己完成,可以不用其他任何人插手,只要有一個好的點子,我就知道該如何去實現,實現的難度會有多大,去哪裡尋求合適的演算法去實現。

最近在瀏覽CS院系課程介紹的時候看到了非常多的User Interface Design這類課程。當然CS系下的關注點並不僅僅是一個界面外在的美觀,而是一種用戶體驗。而其實用戶體驗也不僅僅是一個設計的過程,設計得天衣無縫、擁有無限創意並不一定就是好的,前端需要適應後端,後端需要根據前端的需求進行優化,這才是CS下的UI 課程所關注的點吧。

不過正如我的學長劉偉(Mihoyo CEO)對我說的那樣,廣而不專並不是一件好事,比起什麼都會卻都是淺嘗輒止,一定要有一技之長。最後奉上一句話,「技術型創業公司需要全能程序員的多才多藝。但是,一個成熟的公司,需要更多的是專註的技術。」 能否full-stack並不能強求,不過如果能做到full-stack並且能有幾項專長一定會在職場上擁有更多的機會。

一己之見


我理解的全棧不是樣樣精通,而是能根據需求**快速**掌握一門語言的基礎,或者**快速**掌握一門框架的大概,以達到能夠投入實際開發,獨立實現各部分功能的要求,注意,我說的是快速,根據需求學習並開發。

那麼為什麼可以這樣?因為框架平台的增多並逐漸覆蓋大部分領域,以開發網站為例,前端有bootstrap,jquery,後端有http://asp.net,ruby on rails等等,框架的目的正是提高開發效率,減少bug出現的概率以及高度可擴展,我們為什麼需要做全棧?我想大部分互聯網公司,都會有這個需求,而且任何想法的快速實現和驗證也需要這種能力,

如何做到?任何一流的程序員都已經是出色的全棧工程師,既可以迅速利用已有框架開發出產品,又可以找出框架的不足提出改進甚至寫出更好的

所以,全棧工程師並不和學習技術的深度和廣度衝突,而恰恰是對計算機語言,操作系統,軟體設計技巧,演算法基礎等等有深厚背景的人才能做到(為什麼大公司面試還是只面演算法等基礎知識?),例如大部分新語言都逃不出參考現有語言以及範式,所以那些新語言對於掌握面向對象,熟悉函數式編程的人會有困難么?,例如所有框架都逃不出現有設計模式的應用,又例如孟言老師曾寫過如何快速掌握一門語言的80%,更重要的是程序員行業本身就是個日新月異的行業,我們沒有必要排斥任何好的技術,關鍵的一點就是,在修鍊外功(使用框架快速開發)的同時不要忘了提升內功,已達到以不變應萬變,全棧工程師的門檻是很高的


拿一個網站來說 full stack = 前端 + 後端

前端: htm, css, javascript, jquery...各種開源的框架,比如bootstrap....., 用戶交互, 對於"美"有自己的想法, 如果你行還需要ps的功底

後端: 看公司的後端語言要求, 比如 php | nodejs | java struts, hibernate, spring, springmvc| ruby on rails | python | golang |

後端還包括資料庫的要求, 比如mysql, nosql(mongodb, redis)

運維, 部署, linux的知識

總而言之, 拿到一個項目, 能夠從最開始的需求到部署都能勝任的全端人才!


題主你錯了!

根本沒有"全棧"工程師這個說法,正確的說法是"全站"工程師,英文(Full Stand),指編程時【全部時間處於站立狀態】的工程師。這是業界長期總結出來的評價程序員的標準之一。

人體在處於站立姿勢時,身體會向腿部供血,導致腦部供血不足。腦部供血不足會造成精神不集中。因此,如果能在站立狀態完成編程工作,在坐姿時將能更長時間集中注意力。這就是"全站"背後的科學原理。

一般的初級程序員是無法做到"全站"的,甚至連"半站"都做不到,往往站一個小時就會出現腰酸背痛精神無法集中等狀況。要達到"全站"需要長時間的專門的站立編程鍛煉,不是一朝一夕可以達到的。因此,考察程序員能否"全站"就成為了業界判斷程序員編程經驗是否豐富的一個指標。

很多大公司為了照顧還無法"全站"工作的程序員,會特意配備電動升降電腦桌,方便員工隨時練習"全站"技巧。

…………

實在編不下去了(^……^)


基本上就是老子一個人的工資。八個人的活。

前端

後端

ios

安卓

測試

ui

美工

網管


熟練使用移植github上各種project


做一個b2c商城,先用PS做好效果圖給客戶,然後設計資料庫,做伺服器搭建,自己做前端渲染,然後建設客戶買了域名,自己做了解析,客戶發現效果不錯,又寫android和iOS端,結果發現訪問量太大,進行了分散式架構重建。對搜索進行優化,自己實現了倒排索引,出了狀況,自己做災備和恢復,中間還抽空搭建了伺服器機房,自己拉網線,夾水晶頭,在大型終端寫大機語言進行海量數據存儲分析。然後寫了不少技術分享,最後還出書了。


樣樣通,但不一定樣樣精……專精其中三兩樣就不錯了

有人說全棧是IT業的倒退,不以為然

細化分工適用於體力密集型工作,智慧密集型工作還是要多面手,倒不是要樣樣都做,但起碼樣樣都知道怎麼做,為什麼這麼做。創造性工作面臨更多未知,有些地方沒有成熟的模式可以拿來直接就用,全棧工程師對系統整體的理解更全面,知道各個環節現有方案的因由和利弊,對同事與自己的工作之間的關聯理解也更到位,協作更容易。


分工細化是社會進步的體現。

如果把全棧理解為什麼都會,那是IT業的倒退。

很難想像如果一個CTO把facebook的要求推行到公司的每個人,會導致怎樣的開發災難。


我對各位的看法義憤填膺。首先 我覺得大家不應該太著急給全棧貼上大而全,全而不精的標籤。做軟體最大的好處之一,是 工作結果可以被計算機驗證,而不是用嘴遁來解決問題。

什麼是全棧程序員,我認為一個項目在編程方面只需要你一個人就能全搞定,或者你能發揮兩三個人甚至更多人的作用,我就認為這可以定位為全棧。而不是大家定義的 必須各種語言都要會,還有人說要會用沙子做cpu會美術等這種宣洩情緒的表述 。

計算機的本質是相近的,那就是優秀的內存分配處理,優秀的io設計,優秀的演算法。各種語言各種分支,最終目的是為了解決問題,如果你是mysql專家,那麼你再學學mangodb,學學redis,它們實現數據存儲讀取的思路也許會加深你對mysql的認識。同樣 ,我對java jvm的機制的學習,對我在學習react ,reactnative的時候也有很多幫助。我對前端框架的學習 也可以啟發我對java現有框架,設計模式的認識。對於中小企業而言,一個肯做事的,基礎深刻的全棧程序員勝過同時招幾個剛畢業的創造bug的程序員。有人又說,人的精力是有限的,怎麼能分散到這麼多地方,我覺得這句話不盡然。如果你只是滿足於一個學習各種api各種調用的程序員,那麼到頭來,你還是只是把一些機械的事情反覆的做了多年。學習一個新的東西,我覺得第一步不是要學會怎麼用,而是站在設計者的角度,去理解設計者為什麼要這麼做,覺得有所裨益,再去學習,只有學到了思想,才能跳出api,跳出框架的限制,變得更有技術品味和判斷力。最終目的是為了加強對計算機的認識以及解決問題的能力。

計算機令人著迷的地方在於它是一門科學,而且是一個能迅速反饋迅速變現迅速拓展的科學。所以我覺得大家應該科學的看待全棧,讓他能夠回到 解決問題的本質上來。而不是漂浮的猜忌和用技術權威壓人。


百度百科的解釋是:全棧工程師,英文叫Full Stack Developer,是指掌握多種技能,並能利用多種技能獨立完成產品的人。說白了就是啥都懂的人,左青龍右白虎老牛在腰間,人擋殺人佛擋殺佛。想想,一個項目從前到後要包含多少技術?就拿TalkingData來
說,就至少有H5、JavaScript、CSS、Java、Kafka、MongoDB、Redis、MySQL/MariaDB、Vertica、
Hadoop、Spark、Tychron等等,這些研發目前需要數據可視化團隊、計算平台團隊、存儲平台團隊、數據挖掘團隊和運維團隊來共同完成。要是
出現這麼一個全能王,把活一攬子全部接下來,那要省掉多少溝通代價和薪資成本?——這簡直就是救世主!

我是反對提全棧工程師的,因為要成為某個領域的專家,需要至少10000小時。如果每天工作八個小時,一周工作五天,那麼成為一個領域的專家至少需要五年。就算是一直搞「996」,也
差不多需要3年。這符合任何一個有經驗的技術人員的認知:一門技術,沒有兩三年以上的熟悉和研究,是根本談不上精通的。尤其是大數據行業是一個比較新的行
業,很多技術和方法都在摸索階段,需要更多的時間來積累。TalkingData也是經過了4年多和海量數據以及各種大數據技術的鬥爭,趟過了無數的地雷
陣,到今天才可以說是有了一些積累,培養出一批在大數據領域比較有經驗的技術專家。即使這樣,我們從來也不認為我們研發團隊裡面有「全棧工程師」。

可以參看我的知乎專欄:

我為什麼反對提「全棧工程師」? - 峰言峰語 - 知乎專欄


十八般兵器樣樣皆通 往往只能做個槍棒教頭 不是一代宗師

吹拉彈唱都能來兩下 一般就是個民間藝人 不是藝術大師

一米寬一萬米深 還是一萬米寬一米深 沒有孰優孰劣 但人的時間精力有限 往往只能選一個


網路,數據,邏輯,界面上這四層的基本功一般是必須的

而安全性,可測試性,可橫縱拓展性,以及易用性則會貫穿在這3層之間,要有業內的基本常識

至於是否需要懂UE、architecture、infrastructure,要看更偏重哪一端了,這幾點都得長期修鍊


分頁阅读: 1 2