【转】什么是全栈工程师【译】

最近“知乎”上在热烈讨论一则传闻,说Facebook在招聘所谓的“全栈工程师”,要求应征者对开发堆栈的每一个方面都有所掌握。那究竟何为 “全栈工程师”呢?从字面上来理解,全栈工程师必须熟悉开发堆栈的每个层次,或者至少熟悉绝大多数而且对全部的软件技术有天生的热情和兴趣。数据库

对于这样的开发者,他们很是擅长使用掌握的技术让本身的生活变得轻松,这也正是为何Facebook会但愿雇佣他们,他们用本身的脑子与热情编码, 好的产品也天然能在最短的时间呈现。那么,具体而言,一个合格的“全栈工程师”要具有哪些素质呢?编程

开发堆栈剖析

  1. 服务器,网络以及宿主环境安全

    • 须要理解哪些模块可能失效以及为何,而不能理所固然地认为,只要不断增长资源就能解决全部问题。
    • 知道如何运用操做系统、云存储、网络资源,并能理解数据冗余以及可用性是必需的。
    • 了解应用的规模是如何对硬件形成限制的。
    • 还有多线程和竞态条件,这些概念在开发机上每每不会遇到,可是他们在现实的部署环境中却无处不在。
    • 全栈工程师还必需要可以与DevOps很好地协做。他们所设计的系统应该提供有用的错误消息和日 志能力,这样DevOps就可以及时得到这些信息,并采起有价值的行动。
  2. 数据建模服务器

    • 若是数据模型存在缺陷,那么就经常须要在业务逻辑和更高的层面上使用丑陋的代码来弥补那些数据模型没办法覆盖的死角。
    • 知道如何创建合理的范式关系模型,具有完善的外键、索引、视图、查询表等等。
    • 还要熟悉非关系型数据的存储,知道非关系型数据库在哪些方面超越关系型数据库。
  3. 业务逻辑网络

    • 这是系统应用价值的关键所在。
    • 掌握SOLID设计能力(单一职责,开放且封闭,Liskov替代性,接口分离,依赖注入)。
    • 熟悉一些经常使用的框架。
  4. API/Action/MVC多线程

    • 这些关乎外部世界如何与业务逻辑及数据模型交互。
    • 会使用到大量的框架。
    • 有能力写出清晰、一致、使用简单的接口。
  5. 用户界面架构

    • 全栈工程师须要:a)懂得如何构建易读的布局;b)能意识到艺术家和图形设计师的做用。总之,实现一套好的视觉设计方案尤其关键。
    • 熟练掌握HTML5/CSS。
    • 从目前的趋势来看,JavaScript将会是明日之星,最近这一领域硕果累累(NodeJs, backbone, knockout, Angular(本身的加的, 原文没有))。所以,掌握JavaScript必不可少。
  6. 用户体验框架

    • 全栈工程师应该意识到:用户仅仅是但愿一切运转良好。
    • 一个好的系统是不会让用户得腕管综合征或产生眼疲劳的。全栈工程师能审视全局,能够将一个须要8次点击+3个步骤的过程,简化为仅须要一次点击。
    • 知道如何向用户提示错误信息。若是出现故障,真诚道歉。有时一些无心的错误信息,会让用户感到莫名奇妙。
  7. 理解用户和市场需求编程语言

    • 这层关系到系统架构,但也毫不是一个不能碰的角色(有可能翻译有误,原文:but that is too much of a hands off role)。
    • 全栈工程师要领悟客户使用软件过程当中会须要些什么以及整个市场须要些什么。

其余方面

  1. 能写出高质量的单元测试,时至今日,甚至连JavaScript都能写出单元测试了。
  2. 知道如何使用可重复的自动化工具来构建系统、测试、撰写文档以及按需部署。
  3. 系统的安全意识很是重要,要知道,开发堆栈中的每一层均可能存在薄弱环节。

总结

将代码与某个特定的实现(不管是软件库,操做系统,硬件,等等)紧绑在一块儿并非好的实践。全栈工程师虽然学术渊博,但不意味着他们能抄 捷径,除非他们是在开发一个建完即扔的一次性原型。工具

技术型的创业企业在初期为了知足灵活性,对全栈工程师的需求比较大,可是,随着企业的成熟,会须要愈来愈多的专业型人才。

要成为一名全栈工程师,至少要使用过多种编程语言在各类领域的不一样平台工做多年。全栈工程师除了像“高级工程师”那样要掌握多门编程语言, 还必须具备更高的视野将全部的模块联系起来。值得注意的是,在以上列表中,仅有3——5项是与编码有关的。

原文:http://www.laurencegellert.com/2012/08/what-is-a-full-stack-developer/

相关文章
相关标签/搜索