全栈工程师,也叫全端工程师,英文Full Stack developer。是指掌握多种技能,并能利用多种技能独立完成产品的人。
“全栈”翻译自英文full-stack,表示为了完成一个项目,所需要的一系列技术的集合。“栈”是指一系列子模块的集合。这些软件子模块或者组件组合在一起即可实现既定功能,不再需要其他模块。全栈中的“栈”与计算机数据结构中的“堆栈”不是同一个概念,后者是指先入后出的串行数据结构。顺便说下,“队列”是指先入先出的串行数据结构。
举个例子,要开发一个web页面,工程师需要使用操作系统、服务器、数据库以及几种编程语言,这些技术组合在一起叫做web stack。MEAN就是一个web stack。
IT行业之外的人其实很难理解Web开发是多么复杂的工程。人们一般认为,在计算机公司或者互联网公司工作的人,就应该能够解决与计算机相关的所有问题:电脑开不了机、应该买什么型号的手机、家里上不了网,等等。在他们眼中,计算机行业的从业者天生就带有“全栈光环”。
一个简单的web栈模型:包含前端技术和后端技术。
我们知道,前端工程师就是负责页面浏览器端编程的人,后端工程师就是负责服务器端编程的人,那么什么才是全栈工程师呢?对于全栈工程师,业界并没有严格的定义,并不是说一定要一种都不能少地具备哪几项知识才能叫做全栈工程师。
有人曾开玩笑说,全栈工程师是资本家的阴谋,因为老板想雇一个人来做三个人的工作。其实在2000年第一次互联网泡沫破裂之前,那时候的Web工程师也许符合“全栈工程师”的简单定义:一人包揽整个网站的构建。
web需求的改变与技术的革新
那时的Web工程师们所面临的挑战比今天小很多,他们可能只是制作一些静态的页面,不会面对如今富交互的Web应用程序。那时网站可能包含数据库和一些HTML表单,但仅此而已,甚至只需要将一些静态页发布到服务器上。在网站的前端无需视觉设计和交互设计,因为网站屈指可数,市场竞争很小,工程师仅用一些基本的HTML标签和闪亮的GIF图片就可以吸引网民的目光。同时,网站访问量都比较小,前端资源的体积也不大,无需关注服务器压力和CDN,网民对加载速度的容忍度比较高,也不需要过多考虑用户体验。
但随着技术的发展、用户量的增加、客户端种类变多,每一个小小的细节都需要优化和考虑。于是,所有认真对待互联网产品的大公司都引入了流水线开发流程,在这条流水线上诞生了多个非常专业的职位。
模块化的Web开发流程在很大程度上提高了服务的可靠性和可用性,让我们对每一个环节都能单独进行测试。这让大型Web开发真正变得可管理、可控制、质量可评估。所以到现在,我们可以看到大部分互联网公司都会招聘很多专门的工程师,比如前端工程师、交互设计师,还有一些具体到实现语言的工程师(比如PHP程序员),这都是为了提高可靠性、可用性和可管理性。
一个基本的Web栈由服务器、数据库、服务器端编程语言、HTML、CSS、Java构成;一个基本的App栈由服务器、数据库、服务器端编程语言、手机客户端编程语言等技术构成。您可能已经注意到,App栈跟Web栈在后台技术上几乎是完全相同的,只有在跟用户最接近的那一端采用了不同的技术——要么使用HTML制作用户界面,要么使用客户端编程语言制作用户界面。