Full Stack... 就是, 可以独立完成以下流程:
沙中取硅并提纯
挖矿与冶炼
用硅与各种矿制作处理器、存储器等各种设备
为各种设备编写驱动
能把各种设备拼出计算机
为计算机编写操作系统
编写程序各个 Layer 的代码
完成软件测试
产品设计
UI 、UX 设计
软件销售
市场推广与运营
售后咨询
什么是全栈(FS,Full Stack)?
Fast forward to the present, we now have (not a exhaustive list) :
- visual designer
- web designer
- UI designer
- UX designer
- interaction designer
- art director
- front-end developer
- back-end developer
- web developer
- mobile developer
- database developer
- database administrator
- web master
- web server administrator
- SEO specialist
- web analyst
- web security professional
- quality assurance tester
- project manager
- growth hacker
- …
Several roles may be taken up by the same individual depending on the size of the company and the resources. Very large and profitable companies may gather experts from each field in their teams with a view to create the best-ever-possible web products of the world.
But normally, in the down-to-earth company, the web designer/developer distinction still applies. The web designer will be responsible for the visual/web/UI/UX/interaction design while the web developer will do the front-end coding/back-end coding/database administration/server setup/debugging/etc. However, problems always occur in areas when the two have to work together yet only either one takes responsible. Factors like miscommunications/false assumptions of job role and scope/misunderstanding of the technology/etc. will render the end product a subpar one.
This is where a full-stack web developer can fill the gap. A full-stack web developer masters the best of both worlds (or to a minimum understands both worlds). (S)He will be able to steer the web projects in the right direction utilizing the best practices and latest advancements in the technology. (S)He will design and code the whole web project themselves or supervise others to perform the tasks by overlooking the whole process from scratch to finish.
When websites and web applications become more and more interactive and sophisticated, understanding the technical capabilities of the systems and having an eye for artistic/usability judgement are critical to the success. So it is natural for web professionals to evolve to full-stack web developers in due course.
Designers will become more like programmers as programming becomes more like design.
However, designing and coding are two distinct skills that require different regions of the brain to master . The right brain is for visual and creativity and the left brain is for structure and organization. Designers are predominately right-brainers while coder left-brainers. So there is still only a handful of full-stack web developer on the market .


Quora: What does the term "full-stack programmer" mean?:
https://www.quora.com/What-does-the-term-full-stack-programmer-mean
2-8定律在哪都适用,全栈工程师就是掌握20%常用技能的人,但这20%的技能会有80%的几率被用到,剩下那80%不常用的,让我们Google吧。
编程语言, 框架, 应用, 代码全写的, 全世界没几个. 成为全能型的才华横溢的"程序员",那基本是不可能的.考虑到人的精力和时间是有限的.
但是如果你热爱程序,花了大量的时间和思考在这上面,同时天赋异人,聪明绝顶...OK,那你基本可以成为"绝世高手".
比如说,一个系统用到的技术有H5、JavaScript、CSS、Java、Kafka、MongoDB、Redis、MySQL/MariaDB、Vertica、 Hadoop、Spark、Tychron等等,这些研发目前需要数据可视化团队、计算平台团队、存储平台团队、数据挖掘团队和运维团队来共同完成。要是 出现这么一个全能王,把活一揽子全部接下来,那要省掉多少沟通代价和薪资成本?——这简直就是救世主!
The T-Shaped Model

The T-shaped model is a concept that has been around for a while that describes the abilities or characteristics of an individual. An ideal T-shaped person has many generalized skills with a specialization in one or a few specific fields.
A full-stack web developer is an excellent example of this model as the developer has general knowledge across a wide breadth of technologies and platforms as well as in-depth experience and specialization in a couple of those concepts. For the most part, there are two general fields that make up a full-stack developer’s skillsets: front-end development and back-end development.
What Is A Full-Stack Web Developer?:
http://blog.careerfoundry.com/web-development/what-is-a-full-stack-web-developer
FSD的价值
1.可以多方面,多角度来看解决问题。(全局性,系统性)
现代项目的开发,很少说只用到一两种技术的,特别是移动互联网大潮下。随便一个互联网项目中用到的技术,就会需要用到后端开发、前端开发、界面设计、产品设计、数据库、各种移动客户端、三屏兼容、restFul API设计和OAuth等等,一些比较前卫的项目,可能会用到Single Page Application、Web Socket、HTML5/CSS3这些技术,还有像第三方开发像微信公众号微博应用等等。
Web前端也远远不是从前的切个图用个jQuery上个AJAX兼容各种浏览器那么简单了。现代的Web前端,你需要用到模块化开发、多屏兼容、MVC,各种复杂的交互与优化,甚至你需要用到Node.js来协助前端的开发。
所以说一个现代化的项目,是一个非常复杂的构成,我们需要一个人来掌控全局,他不需要是各种技术的资深专家,但他需要熟悉到各种技术。对于一个团队特别是互联网企业来说,有一个全局性思维的人非常非常重要。
2.提升沟通效率
项目越大,沟通成本越高,做过项目管理的人都知道,项目中的人力是1+1<2的,人越多效率越低。因为沟通是需要成本的,不同技术的人各说各话,前端和后端是一定会掐架的。每个人都会为自己的利益而战,毫不为已的人是不存在的。< p="">
而全栈工程师的成本几乎为零,因为各种技术都懂,胸有成竹,一不小心自己就全做了。即使是在团队协作中,与不同技术人员的沟通也会容易得多,你让一个后端和一个前端去沟通,那完全是鸡同鸭讲,更不用说设计师与后端了。但如果有一个人懂产品懂设计懂前端懂后端,那沟通的结果显然不一样,因为他们讲的,彼此都能听得懂。
FSD的困境
技术有两个发展方向,一种是纵向一种是横向的,横向的是瑞士军刀,纵向的是削铁如泥的干将莫邪。这两个方向都没有对与错,发展到一定程序都会相互溶合,就好比中国佛家禅修的南顿北渐,其实到了最后,渐悟与顿悟是一样的,顿由渐中来。
如果一个公司不太懂全栈工程师的价值,那么全栈工程师的地位将会很尴尬,说得不好听一点,全栈工程师就是什么都会,都么都不会。所以在应聘面试的时候,有些时候会吃亏,你可能会不如哪些在某一方面钻得很深的人工资拿得高。
由于经常在各种技术穿梭,FS会经常忘记代码的语法和一些API,所以经常需要去查API甚至查语法,没有Google我几乎没法工作。这在某些人的眼里,是技术不够的表现。
FSD可能不是一个非常专业的Web前端,也不是一个非常专业的Node.js开发工程师,也不是一个牛逼的Java程序员,更不是一个非常专业的Android/iOS开发工程师。那么,你FSD到底是专业做哪一个方面的,我为什么要给你这么高的工资?
在面试中,通常会通过问一些项目上的问题解决的实战经验,检验候选人在技术上思考的深度、理解能力、学习能力和解决问题的能力。
The Rise And Fall Of The Full Stack Developer:
https://techcrunch.com/2014/11/08/the-rise-and-fall-of-the-full-stack-developer/
怎样才算FS
行业经验~10年
独立做过产品,带过项目,搞过桌面端、Web产品、移动端产品,Web端涵盖前端与后端,移动端Android,iOS和H5混合开发。
会写Web前端,懂MVC/模块化开发,有实战经验
熟悉JavaScript、jQuery, React, Angular, Bootstrap
搞过各种前端框架组件dataTables,select2,highchart,...
搞过Node.js
mybatis,spring, mysql专业Java后端开发技能666
...
热爱写代码,热爱新技术,乐在其中.
作家格拉德威尔在《异类》一书中指出,“人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。”他将此称为“一万小时定律”。
要成为某个领域的专家,需要至少10000小时。当然,这是一个精心投入的结果.
1.Erlang之父Joe Armstrong近期回顾的一些旧事:http://blog.jobbole.com/32731/
2.What is a Full Stack developer?: http://www.laurencegellert.com/2012/08/what-is-a-full-stack-developer/
Is it reasonable to expect mere mortals 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:
Server, Network, and Hosting Environment.
- This involves understanding what can break and why, taking no resource for granted.
- Appropriate use of the file system, cloud storage, network resources, and an understanding of data redundancy and availability is necessary.
- How does the application scale given the hardware constraints?
- 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.
- 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.
Data Modeling
- 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.
- Full stack developers know how to create a reasonably normalized relational model, complete with foreign keys, indexes, views, lookup tables, etc.
- Full stack developers are familiar with the concept of non-relational data stores and understand where they shine over relational data stores.
Business Logic
- The heart of the value the application provides.
- Solid object oriented skills are needed here.
- Frameworks might be needed here as well.
API layer / Action Layer / MVC
- How the outside world operates against the business logic and data model.
- Frameworks at this level should be used heavily.
- Full stack developers have the ability to write clear, consistent, simple to use interfaces. The heights to which some APIs are convoluted repel me.
User Interface
- 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.
- Can include mastery of HTML5 / CSS.
- 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…)
User Experience
- Full stack developers appreciate that users just want things to work.
- 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.
- 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.
Understanding what the customer and the business need.
- Now we are blurring into the line of architect, but that is too much of a hands off role.
- 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:
- Ability to write quality unit tests. By the way, even JavaScript can have unit tests these days.
- Understanding of repeatable automated processes for building the application, testing it, documenting it, and deploying it at scale.
- 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.