什么是全栈工程师-译

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

想要成为一个在对各个层面的编程技术都精湛的工程师是否符合逻辑?据说Facebook只雇佣这种所谓「全栈工程师」,那究竟什么是全栈工程师呢?

对我来说,一个全栈工程师就是对于开发的各个Layer都熟悉,即使不精通也要对各种软件开发技术非常有兴趣。

一个优秀的软件开发者,应该知道如何通过各种技能来让生活和工作变得更加容易。虽然因为政治和沟通障碍让组织发展有困难,我依然反对在封闭的环境下进行开发。我想Facebook的招聘理念就是-一个身心投入软件开发的聪明人肯定可以在更短的时间内完成一个优秀的作品。

LAYER OF THE FULL STACK

  1. 服务器,网络,以及宿主环境
    1. 涉及懂得什么可以打断和为什么,以及没有理所当然的资源
    2. 能够选型合适的文件系统,云存储,网络资源,懂得数据冗余和可获得性的必要性
    3. 懂得根据硬件限制裁剪软件
    4. 懂得什么是多线程和竞争冲突
    5. 全栈工程师可以很好的使用DevOps概念。
    6. 系统应该可以提供很多有用的错误信息和日志记录,DevOps可以优先运维人员进行收集整理
  2. 数据模型
    1. 如果数据模型建立存在问题,业务逻辑和更高层次的设计就需要一些比较奇怪的代码来容错
    2. 全栈工程师懂得如何建立合理的关系模型,使用foreign keys,indexs,views,lookup tables等方法
    3. 全栈工程师熟悉非相关数据模型的存储,以及和相关数据存储的关系
  3. 业务逻辑
    1. 应用程序的核心价值
    2. 面向对象的各种技术
    3. 各种框架了然于心
  4. API Layer/Action Layer/MVC
    1. 知道外部如何和业务逻辑以及数据模型打交道
    2. 框架知识
    3. 全栈工程师可以编写出简单易用并且完备的接口
  5. 用户界面
    1. 懂得创建可读的layout
    2. 懂得如何和图形设计师配合工作
    3. 可能会需要了解HTML5/CSS
    4. JavaScript已经开始流行,需要掌握
  6. 用户体验
    1. 全栈工程师可以意识到用户在想什么
    2. 好的系统让用户简单操作,能一步搞定的事情绝对不能两步
    3. 全栈工程师可以定义很有效的错误信息,如果出现了问题,可以快速定位。有些程序员的错误信息本身就让人们崩溃
  7. 理解客户需求和业务需求
    1. 模糊工作范围边界
    2. 能够知道当用户使用软件的时候在发生什么,也知道业务如何进展

其他

  • 可以编写测试用例
  • 懂得构建/测试试/文档/发布应用软件
  • 有安全意识,知道每一层次的安全都是基于下一层次的

最后的想法

  • 全栈工程师不应该把代码和具体平台耦合,而是全局考虑
  • 技术创业型公司更需要全栈,而一家成熟的公司更需要技术的深度
  • 如果没有在很多平台,很多语言,甚至需要行业工作过,是很难把自己界定为全栈工程师的。全栈只是相对初级工程师的一个进阶,又一个相对更高的视角来看待项目和工作