职业的本质是在专业方向上积累信息。在这里,我推荐“先学,后拓,专精一科,多学”的过程来学习。这样学习,既能举一反三,又能让我们学得更快,循序渐进,更符合普通人的职业发展。不管你承不承认,除了少数有着惊人骨气的天才程序员,我们大多数人都是需要遵循“一万小时法则”才能从平凡变得不平凡的普通人。
凡人要从菜鸟成长为全栈工程师,只能从小到大积累知识和经验。职业的本质是在专业方向上积累信息。在这里,我推荐“先学,后拓,专精一科,多学”的过程来学习。这样学习,既能举一反三,又能让我们学得更快,循序渐进,更符合普通人的职业发展。

“先精后广,一专多长。”
“先熟练度后广度,一门学科的专业知识”是指建议初学者在学习全栈技能时,先在特定方向进行更深入的学习,然后再逐步分散学习目标。比如从前端开始。在掌握了基本的HTML、CSS、Javascript之后,不要转向服务器端的语言或App,而是深入到性能优化、SEO、多框架、响应式页面等前端细节。经过一到两年的深入研究,学习其他方向。
如果在创业公司做全栈工作,一般不需要一个人处理所有的技术工作,至少要两三个人组成一个团队来做项目。你在分配工作的时候,可以根据每个人的喜好和技术特点,进行前后分工,而不是完全按照每个人做一个模块的方式来分工。这种分工的边界不一定是绝对的。不同岗位的工作类别可能会有一些重叠的地方。
如果你是研究生或者初学者,我不建议你在最初的一到两年接触太多的技术,可能会对以后的职业道路产生副作用。为什么我一开始就强调有一个专门方向的重要性?因为这样你求职的时候才能有“亮点”。
平心而论,程序员在市场上的供需比很多其他职业更有利于求职者。微博、推特、V2EX上有很多吸引眼球的招聘灵感,对优秀程序员的需求从未减少。虽然优秀的程序员总能找到工作,工资也不低,但是很多程序员的简历都石沉大海了。其中一个主要原因就是应聘者的简历没有亮点,或者不能从工作经历中提炼出一个亮点。
我们来做一个场景假设。作为一个有两年工作经验的全栈工程师,你在腾讯看到一个职位空空缺。
腾讯社交用户体验设计部招聘前端开发,要求如下。
本科以上学历。
两年以上工作经验。
精通HTML、CSS、Javascript等前端相关技术,熟悉W3C web标准。
熟悉至少一种背景语言的开发机制。
有一定的架构能力和算法能力,良好的编码标准。
良好的学习和沟通能力,追求完美,热爱工作,能在高强度下工作。
热爱互联网,喜欢研究各种互联网技术的更好。
你觉得自己完全可以达到要求,于是一份简历投递到面试官邮箱,里面你可以用一大段的篇幅来表达你的综合能力,完全符合这个要求,你依然有激动人心的激情和浓厚的兴趣。
但是站在面试官的角度想想。他收到了多少份简历?对于大公司的HR来说,也许100个太少了。
根据中国招聘平台拉勾的《2015互联网人才流动报告》。com,前端相关职位的简历数量只有职位数量的一半。同时,服务器开发方向投递简历数量远高于岗位数量。前端开发还处于人才短缺阶段。
HR想从100个符合条件的人里选10个面试。你简历中的哪一点吸引了他?有的竞争对手有丰富的移动作品,有的竞争对手提到他擅长页面性能优化、响应速度、页面渲染效率,有的写过Javascript框架……而你只是一个符合要求的普通人。
不同岗位的供求关系不同。
你可能会说,我爱好广泛,学习能力强。懂一点PHP,做过Wordpress主题,懂一点Java,毕业设计做过一个小客户端应用,什么都懂...但最后你还是会得到“无亮点”的评价,被无情淘汰。虽然你有很多技能,但大部分只能算“及格”。
所以作为求职者,无论是毕业生还是社会招聘,仅仅满足招聘要求是不够的。你需要在招聘要求的方向上有200%的能力才能得到这个职位。
一个求职者在整个过程中会被多方面评估:HR会评估你的成本和价值,专业面试官会评估你的专业能力,经理会评估你的沟通能力。在所有这些考试中,其实每一环都是一个漏斗状的筛选,会过滤掉一部分人。
好消息是,由于程序员的供求关系,只要你的专业能力足够强,你有很大概率通过整个面试录用流程。我一再提到“供求”这个词,是因为在商业社会,所有商品的价值都来自于供求,而不是生产成本。生产成本是入门门槛,但绝不是核心竞争力。
让我再次重复这一点。作为求职者,你必须对某个特定方向有非常深刻的理解。光做是不够的,还要了解背后的原因,以及背后的原因。对一个问题深入提问,从经验到操作流程,再到技术原理,直到面试官问不下去了,或者求职者答不上来,这是一些面试官的习惯。所以,你理解的越深,你就越有优势。
有了一个特长,有了一份能让自己成长的工作,有了一个强大的团队,你就可以有自己的定位,以此为生,然后逐渐学习更广泛的知识,朝着个人的目标努力。如果你连一个稳定的位置都没有,就没有展开枝叶、生根发芽的可能。
假设你在一家中型公司找到了工作,会有一份特殊的工作。经过几年的工作和实践,你会精通专业知识,你的日常需求已经在你的“舒适区”了。现在你终于准备好了。既然你的目标是做全栈工程师,那么应该从哪些技术入手呢?
“围绕业务目标”
我的第一个建议是,在考虑做什么项目的时候,以商业利益为重。归根结底,技术服务于业务目标。
在计算机科学诞生以来的短短几十年里,流行的技术和平台经历了巨大的变化。
服务器的平台和语言从C到C++、Java、Python,再到现在的Node.js。
客户端分为两个分支:浏览器和原生开发。在浏览器方面,Web标准是一个活的标准,这意味着一些新的提议不断地被添加到标准中。这是一个动态的滚动标准,而不是一个印刷的最终标准。
各种浏览器的市场份额每两年就会发生天翻地覆的变化。从moz到Webkit,我们见证了Webkit的发展。
对移动设备市场份额的争夺更加激烈。曾经的诺基亚和摩托罗拉被新剧收购,iOS和Android的争斗还在继续...
据我所知,从2014年到2015年,很多腾讯团队做了从PC到移动,从HTML5到原生App开发的各种转型。没有人能肯定地说我们团队下个季度的目标是什么。每半年会有一次大的调整,但小的调整从未停止。“改变”是唯一不变的东西。每个人都在不断学习新技术。

相对来说,经营目标稳定。通过关注业务目标而不是技术,我们可以选择更适合完成业务目标的技术,从而做出更客观的决策。更重要的是,在这个过程中,你学到的不仅仅是技术,更是一种潜在的思维方式,可以帮助你提高综合竞争力,是一种“硬通货”能力。
老板雇一个员工不是因为他会写程序,而是因为他能帮自己赚钱。赚钱有两种方式:降低成本,或者增加收入。如果程序员能加快内部系统的运行效率,让产品生产过程更加顺畅,那就是降低成本。如果你能让用户更容易购买产品,或者提高服务质量来吸引更多用户,你就能增加收入。在老板看来,程序员只是一个昂贵的劳动力。他会不会写程序并不重要。重要的是他能赚钱。
所以如果你想成为一名高级开发人员,你必须学会这种思维方式。
所谓的“业务目标”应该广义解释。对于直接为用户做产品的团队来说,需要关注的是如何提高产品质量,降低产品成本。内部要注意如何优化流程,降低出错率。如果团队的输出是公司其他部门需要的原材料,就要关注下游的需求,研究如何更好的输出成果,如何让输出产品的过程更加顺畅。
关注商业目标需要坚持不懈的实践。当你成为一名全栈工程师或团队经理时,你需要在多个目标和任务中做出选择。一个全栈工程师需要做的和能够做的事情有很多。他有很多技能,也负责处理很多工作,所以他需要在很多东西中找到最有商业价值的那一个的能力:可能是做一个提高团队效率的工具,也可能是成本优化。
全栈工程师能做的事情越多,就越需要判断做什么的能力。如果说增加一个用户需要的功能是加分项,拒绝一个用户不想要的功能就更值得称赞了。
一切都要围绕业务目标来做,包括你做的项目,汇报的方式,学习新技能时的取舍。
我会在我们公司的技术1频道找一些开发者,他们对项目的驱动力是“技术”本身,而不是“商业”目标。比如他们做了一个微信平台的活动推广页面,用了很多华丽的3D旋转和SVG动画。
好的方面如下:
用的技术很新潮,满足了我炫耀技术的虚荣心。
朋友圈传播广泛。
在高端机和大屏机上都很好用。
不好的方面如下:
在低端电脑和网速慢的情况下效果不好。
在沉浸式技术的实现中,忽略了用户体验。
页面打开时自动播放音乐,让用户感觉很突然。
我老婆是做金融的。每次她在朋友圈看到这个需要加载的酷炫页面,都会立刻关闭。有时候耐心等待打开后她会眼花缭乱。我不知道为什么。所以有时候我会想,在一个技术圈里,当某个推广页面被热议,某个很酷的新技术被使用的时候,有没有想过普通用户根本不付费?
先说一个好案例。
面试求职者时,遇到一个综合能力不错的应聘者。他是一名全职工程师。我问他,你现在技术很多,那你以后的职业规划是什么?他说,他觉得用什么语言并不重要,但在最近一年他开始专注于Android开发,因为移动App开发是当前的趋势,需求很大,所以他可以在这里有所成就。但未来不排除换个方向做点别的,可能是iOS或者其他新系统。基本上自己的知识体系是可以重用的,但是也期望学习一门新的语言。
我喜欢他的态度。他对未来有自己的方向,但我也知道我看不清楚。我对业务和市场有想法,我有足够的技术能力和信心在未来继续前进。相比较而言,有些考生的项目经验和学习技能非常混杂,有时为了折腾而折腾。
记住,当你只有锤子的时候,你看到的一切都是钉子。而如果你执着于工具,就看不到问题所在。所以,先看看需要解决什么问题,然后再添加你的工具箱。永远从业务目标的角度来决定学什么,而不是纯粹以锻炼技术能力为目的去学习。
“关注用户体验”
我的第二个建议是从用户体验的角度考虑问题。
用户体验是用户在使用产品时的心理、感受、印象和评价。生活中处处涉及用户的体验,比如闹钟、牙刷、马桶、书包、公交、红绿灯、手机、电脑、键盘、鼠标...我们每天都在和产品打交道,每天都在使用和体验产品。
每一次不好的经历背后都有商机。
全栈工程师要重视用户体验,掌握用户体验相关的知识。即使一个技术熟练的人可以自己建一个网站,如果不注重用户和客户的体验,他做出来的产品也可能很差。这样的产品除了“能用”,没有任何优势。
好的工程师做的都是优化用户体验:优化性能的开发者都在积极改善用户体验和交互;设计师有意使用颜色、空空格、大小和形式,让用户体验更流畅、更易用;内容运营者认为有些内容重要,有些内容不重要,也在考虑如何提高用户体验。
2010年我加入腾讯的时候,公司只有一万多人。当时需要办理一些行政手续,公司开具工资证明。整个操作过程如下。
打开公司论坛,搜索“薪资证明”,找到一篇文章,里面讲的是找一个人力资源的员工来办理。
我打开RTX,找到这个HR员工,问他座位在哪里;跑到他的座位上,此时已经有好几个人在排队了,我在后面;到了之后,我告诉他,我要拿工资证和我的RTXID等了10分钟,他打印出一份工资条,签字盖章后给了我。整个过程花了我一个小时。
2015年申请美国旅游签证,需要出具工资证明。从平时的宣传渠道了解到现在很多人力资源的服务都可以在网上办理,于是尝试了一下。现在发工资证明的流程如下。
关注微信“人力资源助手”公众号,自动识别我是腾讯员工,获取我的ID。
选择“我要领证”→“收入证明”。在证明目的一栏,选择“签证类别”→“旅游签证”,提交一些个人信息。

输入我的办公室座位号并提交给系统。
第二天,一个漂亮的大红包放在了我的座位上。打开一看,里面有两张中英文的收入证明,还有我的旅行目的地和时间。整个收入证明很漂亮很专业,为签证量身定做。从提交系统到拿到最终证书,我只用了几分钟。过程流畅快捷,体验非常好。
从2010年到2015年,经过几年的发展,腾讯的员工已经达到3万多人,翻了三倍。如果HR流程还是用老办法操作,可能要多几倍的人力,浪费所有员工的时间。但现在,通过自动化系统,用户满意度大大提高。一个内部员工用的系统还有这样的优化空和投入,更何况是一个直接对外卖服务的公司。
像这样被公司服务“惯坏”的人,往往对社会上的其他服务更挑剔。另外,我在深圳这个中国服务水平最高的城市生活惯了,去其他城市也经常会有“被冷落”的感觉。我想这就是所谓的“从节俭到奢侈,从奢侈到节俭”。
所以现在用户都被手机里提供优质体验的app“惯坏了”,要让他们接受过时的设计和体验就更难了。


