- 对性能影响有着深入理解的技术通才
- 掌握多种技能,并能利用多种技能独立完成产品的人
- 一位资深开发工程师、架构师,以及具有敏捷开发技能的程序员
1. 什么是全栈工程师
“全栈工程师” 一词,最早出现于 Facebook 工程师 Calos Bueno 的一篇文章 —— Full Stack。他把全栈工程师定义为对性能影响有着深入理解的技术通才。在 “拉钩” “100Offer” 等针对互联网人才的招聘网站上,全栈工程师更是一跃成为热门招聘职位,其薪酬水平也比一般的开发工程师职位要高出一截。那么,什么是全栈工程师,我们又应该如何定义一名全栈工程师呢?
百度百科对全栈工程师的定义是这样的:“掌握多种技能,并能利用多种技能独立完成产品的人。” 我觉得这个定义还不够全面,我认为全栈工程师应该同时是一位资深开发工程师、架构师,以及具有敏捷开发技能的程序员。全栈工程师对于软件开发的认识往往已经进化了,他们把特定的技术抛到了身后,明白技术的更新始终比计算机理论要快的道理,因此,他们注重强化自身的核心技能,关注并乐于实践其他技术。全栈工程师往往是某一方面的专家,同时通晓并善于在正确的场合运用其他语言、工具和技术。
2. 全栈工程师的价值
随着时间的推移,全栈工程师的作用和价值在越来越多的产品或项目中得到了印证。那么,我们来看看全栈工程师对于个人或公司意味着什么。
- 个人价值及自由度的极大提升 —— 我曾看过一些介绍全栈工程师的文章,文中大多强调了全栈工程师对于公司与团队的价值。而当你成为一名真正的全栈工程师后,会感受到前所未有的个人价值与技术自由度的提升。试想当一个很好的创意出现时,你可以一个人或主导一个团队去实现并不断完善它,这是一件多么让人兴奋的事情啊!
- 全局思维与技术前瞻性 —— 由于具备了各个开发环节与技术领域的知识,全栈工程师往往具有更好的大局观和技术前瞻性,能够在项目初期就选择正确的技术,并很好地把控一个项目的整体方向。现代项目往往非常复杂,而全栈工程师往往能带来技术和质量上的保障,从而成为个项目成功的关键人物。
- 降低沟通成本 —— 我经常听到有设计师抱怨前端工程师无法百分之百地还原他们的设计,而前端工程师又在抱怨后端工程师从接口返回的数据根本无法直接使用,后端工程师也在抱怨产品经理所提的需求根本无法完成。随着团队人数的上升,由于各自技能栈的不同,沟通成本必然会随之上升。全栈工程师除了能够独立完成前后端的开发(甚至包括设计)外,如果能够在项目初期提前介入,便能很好地规避技术风险,过滤不合理的需求,从而显著降低因不同技术差异导致的沟通问题,显著降低项目风险。.
- 初创公司 —— 我们已经来到了一个大众创业,万众创新的时代。那些初创公司也如雨后春笋般不断涌现。初创公司往往都有了一个不错的创意,但经常会遇到 “就缺一名程序员” 的尴尬。我想说的是,他们其实并不是缺程序员,而是缺一名全栈工程师。初创公司往往资金有限,而一名优秀的全栈工程师能够帮助初创公司用最低的代价与最短的时间推出自己的产品。这是初创公司能够存活下来,拿到更多投资,甚至成为 “独角兽” 一员的最关键一步。
3. 全栈工程师的技能栈
看到这里你一定会问,到底需要具备怎样的技能才能成为一名全栈工程呢?下面这张表格来自 Medium,作者将软件开发所涉及的各个方面分为层,又将每个层所包含的主要技术作为组件,制作了这张全栈技术图。
LAYER(层次) | COMPONENTS(组件) |
---|---|
Hardware 硬件 | Server Hardware、RAID、Network Protocol、Block devices |
OS 操作系统 | Linux、Mac OS、Windows Server、CoreOS |
Virtualization 虚拟化 | Xen、VMware、KVM、VirtualBox |
Hosting 虚拟主机(云主机) | Azure(微软)、AWS(亚马逊)、Linode、Rackspace cloud |
Containers / PaaS 容器 | Docker、Google APPengine、Heroku |
Scaling 扩展 | Load balancing 负载均衡、Partitioning 分区、CDNs 内容分发网络 |
Package management 依赖包管理 | apt、rpm、brew |
Server management 服务管理 | Bash、GCC、Make |
Web servers 网络服务器 | Apache、Nginx |
Databases 数据库 | MySQL、SQL Server、MongoDB、Redis |
Search 搜索 | Elasticsearch 搜索引擎 、SOLR、Facets |
Config management 配置管理 | Puppet、Composer、Chef、Kubernetes |
Programming 编程 | PHP、Java、Swift、Go、Ruby、Python、JavaScript |
Frameworks 框架 | WordPress、Flask、Django、AngularJS、Vue |
Frontend Dev 前端开发 | HTML5、CSS、LASS |
Security 安全 | XSS、SQL Injection、SSL |
Frontend Design 前端设计 | UI、UX、Photoshop、Illustrator |
Business requirement 商业需求 | 用户需求收集、项目管理 |
从上面这张表我们不难发现,现在的技术体系是多么庞大,每一年又会有新的技术加入到这些层中,而已有的技术又在不断地更新。因此,要掌握所有技术是根本不可能的,而成为全栈工程师也并不需要你真得掌握所有的技术,你应该将自己的精力聚焦在关键开发技能,以及一些必须掌握的附加技能上。
有经验的技术领导者在招聘时,往往会同时考察应聘者的技术能力与上述附加技能,而对于初级程序员的招聘来说,那些附加技能往往更被优秀的技术公司所看重。开发技能是你的硬实力,而附加技能则可以看作是你的软实力,只有同时具备这两方面技能,才能成为一名优秀的全栈工程师。
4. 优秀的全栈工程师需要走出去
优秀的全栈工程师不应局限于自己的工作,他更应该走出去,接触不同的技术,分享自己的经验和心得,认识更多的朋友。
- 参加技术大会 —— InfoQ、CSDN、GITC、优设、TED 等网站都会定期举办各类技术大会。在这些大会上,你不仅能够听到技术大咖们带来的各自领域最佳技术实践,而且能认识很多行业内的朋友。这对你开拓思路,扩大技术社交圈都很有帮助。因此,如果公司没有安排你去参加这些技术大会的话,那就自己买票参加,作为对自己的一种投资吧。
- 做公开演讲 —— 全栈工程师作为团队的核心成员,他一定需要在团队内部做技术、管理等方面的演讲。如果你是一个乐于分享的技术达人,那么也可以尝试录制个人课程(视频或音频),并在慕课、网易课堂、优酷,或荔枝、喜马拉雅等各种媒体上分享自己的技能和知识。不要因为自己并不是专家就不愿尝试,相信我,你用心制作的内容,会获得大家认可的,并收获一大批粉丝的。
- 个人博客 —— 每天进步一点点,一年以后你便会获得质的飞跃。优秀的全栈工程师懂得如何进行知识的积累,而技术博客就是一个很好的方式,将自己平时的实践、思考记录下来,配以 tag 标签方便日后的回顾。最有意思的是,当你在不断记录和更新你的博客同时,来自不同地方的程序员也会通过你的博客认识你。
- 参加线下活动 —— 与以前的程序员总是宅在家里不同,现在的年轻程序员们更愿意分享和交流。很多网站也会组织不同技术主题的线下活动,在这些活动中你可以听到一些技术牛人的分享,还可以找到很多和你一样对技术富有激情的人。
全栈工程师绝不是一夜铸成的,你需要打好技术基础,强化核心技能,并持续学习。相信有一天你也能感受到自由地运用技术,开发出优秀产品所带来的乐趣。
读《程序员的自我修养》(陈逸鹤)有感,感触至深之处,摘录于此,若有不当之处,联系博主即可删文。