期望一个码农掌握全栈开发的知识,合理吗?也许不合理,但是Facebook正是要寻找这样的人。在OSCON会议上,一名Facebook的工程师告诉我的,他们只聘请“全栈(Full stack)”的程序员。那么,全栈是什么意思呢?
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.
熟悉整个技术体系的程序员,可以使得周围同事的工作更加顺畅。这就是为什么我反对在工作场合的技术鸿沟。当然,大公司里的政治和沟通的问题往往会影响他们的发展。我想Facebook招聘的要点就在于,如果聪明的人全身心投入,好产品的诞生就会水稻渠成。
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.
全栈技术的分层:
1. 服务器,网络和主机环境
1 理解什么会导致宕机,为什么会,没有任何资源是理所当然的。
2 正确使用文件系统,云存储,网络资源,需要理解数据冗余和可用性。
3 在硬件受限的情况下,如何扩展应用。
4 想想多线程和竞争,你在你的开发机器上看不到,但是在现实中却经常发生。
5 全栈程序员可以与DevOps协同工作。系统应该提供有用的错误信息和日志能力。DevOps会在你之前看到并处理这些信息。
layers of the full stack:
1. Server, Network, and Hosting Environment.
A This involves understanding what can break and why, taking no resource for granted.
B Appropriate use of the file system, cloud storage, network resources, and an understanding of data redundancy and availability is necessary.
C How does the application scale given the hardware constraints?
D 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.
E 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. 数据建模
1 如果数据模型存在缺陷,那么业务逻辑层和更高的层需要用奇怪/丑陋的代码来弥补那些模型没有覆盖到的边界场景。
2 全栈程序员知道如何构建合理规范化的关系模型,包括外键、索引、视图、查找表等。
3 全栈程序员熟悉非关系数据存储的概念,理解其比关系型数据存储的优点。
Data Modeling
A 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.
B Full stack developers know how to create a reasonably normalized relational model, complete with foreign keys, indexes, views, look-up tables, etc.
C Full stack developers are familiar with the concept of non-relational data stores and understand where they shine over relational data stores.
3. 业务逻辑
1 理解程序提供的核心价值
2 扎实的面向对象技能
3 同样需要熟悉框架
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层/Action层/MVC
1 理解外部如何与系统内部的业务逻辑和数据模型进行交互。
2 这个层面会更多的使用到框架。
3 全栈程序员能写出清晰,一致,易用的接口。(吐槽)一些API的复杂得使我感到厌烦。
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. 用户界面
1 全栈程序员:a)理解如何创建一个可读的布局,或者 b)知道需要界面设计师的帮助。不管哪一种,关键是实现一个好的可视化设计。
2 可以掌握HTML5/CSS。
3 JavaScript将是未来非常重要的语言,许多酷炫的工作都是JS完成的 (node, backbone, knockout…)。
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. 用户体验
1 全栈程序员明白用户只是想产品可以正常工作。
2 一个好的系统不会使得用户手残和眼疾。一个全栈程序员会将一个需要8次点击3个步骤的流程,修改为1次点击。
3 全栈程序员会添加有用的错误信息。如果有什么出错了,要向用户道歉。有时程序员漫不经心写的错误信息会让用户觉得很傻。
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. 理解用户和业务的需求
1 现在我们模糊的进行的架构设计,但这会远离真正的需求。
2 全栈程序员会预先看看当用户在使用软件的时候,会发生什么。他们也会关注业务。
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.
8. 其他问题:
1 能够编写单元测试。顺便说说,JavaScript现在也可以进行单元测试了。
2 理解持续自动化集成,包括构建应用,测试,编写文档和部署扩展。
3 安全意识也非常重要,因为每一个层面都会有其易受攻击的地方。
8. 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.
总结:
将代码紧紧的绑到一个特定的环境(库,操作系统,硬件等等),是非常糟糕的实践。全栈程序员理解所有的知识体系,不意味着他们可以走捷径。当然如果只是建立一个原型的话,他们确实会这样做。
技术型创业公司需要全栈程序员的多才多艺。但是,一个成熟的公司,需要更多的专注技术。
我不确定在你使用多种语言,使用多个平台,甚至为多个行业工作之前,你是否可以自称为全栈程序员。全栈程序员要高于“高级程序员”,因为他们与通晓多语言的程序员在同一线上,但是对各个模块的关系更有全局的意识。注意我刚刚的列表,只有3-5项包含了编写代码。
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.
原文链接: LAURENCE
网友评论
看了这句话,很打气,继续走在 JavaScript 的不归路上....