全栈工程师(Full-Stack Engineer):一个能处理数据库、服务器、系统工程和客户端的所有工作的工程师。根据项目的不同,客户需要的可能是移动栈、Web栈,或者原生应用程序栈。
全栈:表示为了完成一个项目,所需要的一系列技术的集合。应该从能力和思维方式两方面,来判定一个人是否是一个合格的全栈工程师。简单来说*全栈工程师就是可以独立完成一个产品的人。
1、Web开发流程
大中型互联网公司的产品研发流水线:产品设计--》交互设计--》视觉设计--》前端开发、后台开发--》测试--》发布。
产品经理:产品经理其实是对一个产品负根本责任的管理者。他通常的工作包括制订产品规划、协调多方资源、把控产品方向和质量细节,等等。有时候,他会从头策划一个新的产品,而更多的时候,他是在优化已有产品的一个部分。总之,在流水线中,产品经理需要从策划跟进到发布,是一个非常重要的角色。
用户研究员:用户研究员的工作是研究用户行为,有时候他会从宏观的角度分析数据,有时候也从微观的角度分解用户场景,有时候会召集一些用户专门来访谈,或者观察用户对产品的使用情况。从输出品的角度来说,用户研究员一般输出用户研究报告来交付给产品经理和交互设计师,作为产品设计的目标参考。
交互设计师:交互设计师常被简称为“交互”。他与视觉设计师最大的区别是,交互设计师更多着眼于如何优化用户界面的信息分布和操作流程。交互设计师的输出品一般是描述用户与网站“交互”过程的流程图,以及描述页面信息结构的线框图。输出的线框图会交付给视觉设计师。
视觉设计师:在细分交互设计师和视觉设计师的大公司,视觉设计师根据交互设计师输出的线框图来做一些润色和设计,输出最终的产品视觉稿之后将视觉稿交付给前端工程师。在一些不细分交互设计师和视觉设计师的小公司,二者被统称为“设计师”,他们的职责就是负责整个用户界面的设计。
前端工程师:产品视觉稿在得到产品经理和交互设计师等多方确认之后,会交给前端工程师,由前端工程师制作页面,实现视觉稿以及交互功能。从头衔上的变化就可以看出,这时候才真正开始编码。前端工程师需要非常熟悉HTML、CSS和JavaScript,以及性能、语义化、多浏览器兼容、SEO、自动化工具等广泛的知识。
后台工程师:使用服务器编程语言,进行服务器功能的开发。在编程语言的选择上,很多公司都会出于团队已有成员的知识储备、程序员的供给量或者语言性能方面来进行选择。在这一方面,后台语言的选择是相对自由的一件事,不像前端工程师,为了页面兼容性,必须使用HTML和CSS。如果关注各大公司招聘信息的话,您就会了解,不同公司使用不同的后台语言,比如传统的C#和C++、Java、PHP,或者新潮的RoR和Python。小公司的后台工程师除了负责功能开发,可能还会负责服务器的配置和调试、数据库的配置和管理等工作。在大公司,这些工作会分别委派给后台工程师、运维工程师、数据库管理员(DBA)等岗位。
运维工程师:运维工程师是跟服务器打交道的人,他会关注服务器的性能、压力、成本和安全等信息。
测试工程师:顾名思义,测试工程师保证产品的可用性,即使在小公司,这一职位也是不可或缺的。
备注:在项目管理中,经常会用到甘特图。甘特图(Gantt Chart)是柱状图的一种,显示项目、子项目、进度以及其他与时间相关的系统的进展情况。
2、技术的发展
提到全栈技术,不得不提一个代表性的全栈框架——MEAN,它是MongoDB-Express-AngularJs-Node.js的缩写,是从数据库、服务器到前端页面的一个完整技术栈。
MongoDB是一个面向文档的、NoSQL类型的数据库。MongoDB颠覆了传统的基于表的数据存储方式,而采取了类似JSON的文档结构来存储数据,因而它在储存数据时可以更加灵活。
Express是一个Node.js框架,可以创建灵活的Web服务,比如单页面应用程序、多页面应用程序和混合型App。
AngularJS是一个开源的JavaScript框架,由Google和开源社区共同维护,它用来创建单页面应用程序。它的目标是使用model-view-controller模式来规范Web应用程序,让开发和测试富交互的单页面应用程序变得更加轻松。
Node.js是一个运行在服务器端的JavaScript运行环境,它的底层是基于Chrome的JavaScript运行环境——V8引擎。Node.js可以作为服务器端语言,用来创建快速、可扩展的应用程序。Node.js也可以在本机运行,做一些本地操作,比如加速本地开发流程,或者实现一键发布。
MEAN可以说是传统的LAMP方案的有力竞争者。因为从服务器端到页面端都采用同样的语言(JavaScript)和同样的架构模式(MVC),所以一个擅长JavaScript的工程师可以兼顾前后端的开发,并且前端模板代码和后台模板代码是可以复用的。
3、提供PaaS服务的平台越来越多
随着Web技术的发展和开源社区的积极努力,有很多公司提供便宜又方便的一条龙服务,可以解决独立开发者的大量麻烦。
比如Amazon提供的PaaS(Platform as a Service,平台即服务),就可以让创业公司的开发者省去架设和维护服务器的麻烦。
而GitHub在2012年获得了一亿美元融资,也可以看出市场对代码托管市场的信心。可以预期,未来可能会出现越来越多为开发者提供服务的公司。以后,小公司也可以用更低廉的价格获得世界级的IT服务支持,毫无疑问,更多的IT服务将托管在第三方的服务器上。
VPS(Virtual Private Server,虚拟专用服务器)是把一台物理服务器虚拟成多个虚拟专用服务器的服务。每个VPS都可分配独立的公网IP地址,运行独立的操作系统,拥有独立的磁盘空间、内存、CPU资源、进程和系统配置,模拟出“独占”使用计算资源的体验。
4、一专多长
我跟一位行业专家讨论过全栈工程师的话题,他不是很赞同全栈工程师这个方向。他认为,工程师应该有专精的技能和目标,如果初学者贪图大而全,反而样样不精。我理解他的担心,如果一个工程师没有坚实的基础(比如专业理论知识,对常用设计模式的理解,或者特定职业的基础知识),那么了解的非本专业技能越多,越容易迷失。
所以我认为,全栈工程师首先要“一专多长”。一专多长的意思是,工程师首先有一个专精的方向,在这个方向上足够精通之后(高级工程师级别),以此为突破点去学习更多的知识,增加自己的长处。如果还没有获得某个方向上足够深入的理解,就不要囫囵吞枣地去学习其他领域的知识。
有些知识需要时间的积累,并不是快速阅读就可以掌握的。“全栈工程师”这个名词可能会引起读者的误解。勿在浮沙筑高台,“全栈”是一个长期积累的过程,是专精型工程师在不断解决问题的过程中积累知识和经验所形成的能力,而不是一蹴而就的过程。
5、解决问题,而不是醉心技术
公司存在的意义就是解决问题,公司要解决用户的问题,而员工要解决公司的问题。
公司的问题可能是降低成本、扩大用户群、增加成交量、优化性能,等等。不同的问题优先级不一样,投入同样的时间,有的项目能为公司增加上百万的收入,而有的项目却只能增加几万。
互联网领域发展很快,问题的优先级永远都是在动态变化的,所以团队往往每半年或者三个月就要回顾一下当前形势,并制定新的工作计划。如果新计划不是您擅长的,怎么办?您应该马上开始学习新的技术,这就是我说的关注问题,而不是醉心技术。
高级工程师可以选择往上下游去扩展自己的能力,并承担更多的责任,给公司带来更大的收益,也给自己带来更大的成长空间。程序员在小公司里主动去承担更多责任,自己跟公司都会获得相应的成长。在自由职业市场,全栈工程师是最闪耀的明星。全栈工程师还是天生的创业者。
全部0条评论
快来发表一下你的评论吧 !