职业生涯的本质,就是在一个专业方向上积累信息。这里我推荐采用“先精后广,一专多长”的流程来学习。采用这种方式来学习,不光可以触类旁通、举一反三,还让我们学习得更快,而且循序渐进更符合一般人的职业生涯发展。不管您是否承认,除去极少数天赋异禀、骨骼惊奇的天才程序员,我们大部分人都是普通人,都需要遵循“一万小时定律”,才能从平凡变成超凡。
凡人要从一个小菜鸟成长为全栈工程师,只能从少到多、慢慢积累知识和经验。职业生涯的本质,就是在一个专业方向上积累信息。这里我推荐采用“先精后广,一专多长”的流程来学习。采用这种方式来学习,不光可以触类旁通、举一反三,还让我们学习得更快,而且循序渐进更符合一般人的职业生涯发展。
「先精后广,一专多长」
“先精后广,一专多长”是指,建议初学者学习全栈技能的时候,先在一个特定的方向上有比较深入的钻研,然后再将学习目标渐渐推广开来。比如先从前端方向入手,掌握了基本的HTML、CSS、JavaScript之后,不要转头向服务器端语言或者App方向发展,而是深入到性能优化、SEO、多种框架、响应式页面等前端细节中去。经过一到两年的深入研究之后,再去学习其他方向。
如果在创业公司做全栈的工作,一般也不会要求一个人处理所有的技术工作,至少会有两三个人组成团队来做项目。大家在分配工作的时候,可以按照每个人的偏好和技术特点,进行前后端的分工,不用完全按照每个人做一个模块的方式来分工。这种分工的界限不一定要很绝对,在不同职位的工作范畴中,可以有一些重合的区域。
如果是毕业生或者初学者,我不建议在刚开始的一到两年接触太多技术,杂而不精,结果可能会对后面的职业道路产生副作用。为什么我强调在开始的时候有一个专精方向的重要性呢?因为这样您才能在求职的时候有一个“亮点”。
平心而论,程序员在市场上的供求关系比很多其他职业都更有利于求职者,在微博、Twitter、V2EX上都会有很多引人注目的招聘启示,大家对优秀程序员的需求从来就没有减少过。虽然优秀的程序员总是能找到工作并且工资不低,但是很多程序员投出的简历都石沉大海,一个主要原因是由于求职者的简历没有亮点,或者说从工作经历中提取不出来一个亮点。
让我们做一个情景假设,作为一个有两年工作经验的全栈工程师,您看到腾讯有一个职位空缺。
腾讯社交用户体验设计部招聘前端开发,要求如下。
本科以上学历。
两年以上工作经验。
精通HTML、CSS、JavaScript等前端相关技术,熟悉W3C网页标准。
熟悉至少一种后台语言的开发机制(如Java、C++等)。
有一定架构能力和算法能力,有良好编码规范。
良好的学习能力、沟通能力,追求完美,有工作激情,能在较大强度下工作。
热爱互联网,喜欢研究各种互联网技术者更好。
您想,自己完全满足要求啊,于是一封简历就投递到面试官的邮箱,里面用大段文字表达自己全面的能力完全符合这个要求,而且自己还有亢奋的激情和浓厚的兴趣。
但是您从面试官的角度来想想,他收到了多少份简历呢?对于一个大公司的HR,可能个都算少。
根据中国招聘平台拉勾网“年互联网人才流动报告”,前端相关岗位的简历投递数只有岗位数的一半。与此同时,服务器开发方向(比如Java、PHP、C++等)的简历投递数都大大高于岗位数。前端开发仍然处于人才紧缺阶段。
HR要从个符合要求的人中选择10个来面试,您的简历中的哪一点能吸引他呢?有的竞争者有丰富的移动端作品,有的竞争者提到他很擅长页面性能优化、响应式、页面渲染效率,有的写过JavaScript框架……而您只是一个普通的满足要求的人。
不同职位的供求关系是不一样的。
您可能会说,我爱好广泛,学习能力强,我会一点PHP,做过Wordpress主题,会一点Java,毕业设计做过一个小客户端应用,什么都会一点……但最终您仍然会得到一个“无亮点”的评价,被无情地淘汰掉。因为虽然您会的技能很多,但大多只能算是“及格”的东西。
所以,作为一个求职者,无论是毕业生还是社会招聘,仅仅满足招聘要求是不够的。您需要在招聘要求的方向上以%的能力来得到这个职位。
一个求职者在整个流程中会受到多方考核:HR考核您的成本和价值,专业面试官(不是全栈工程师)考核您的专业能力,经理考核您的沟通能力。在所有这些考核中,其实每一环都是漏斗型筛选,会过滤掉一些人。
好消息是,由于程序员的供求关系,只要您的专业能力够强,您就有很大的概率通过整个面试录用流程。我一次又一次提到“供求关系”这个词,是因为在商业社会,所有的商品(包括人才)的价值来自于供求关系,而不是生产成本。生产成本是准入门槛,但绝不是核心竞争力。
让我再次重复这一点,作为求职者,一定要在某个特定方向上有非常深入的理解。仅仅会做还不够,还要理解背后的原因,还有背后的背后的原因。有些面试官的习惯是,在一个问题上深入地问下去,从经验问到操作过程,再问到技术原理,一直深入到面试官问不下去了,或者求职者答不上来了。所以,理解得越深刻,您就越有优势。
有了一个专长,得到一个能让您成长的工作,进入强大的团队,您就能有自己的阵地,以此为生,然后再逐步学习更加广博的知识,朝自己的个人目标去努力。如果您连阵地都不稳固,就不存在开枝散叶、落地生根的可能性了。
假设您已经在一个中等规模以上的公司找到了工作,那就会有一个专门的岗业。经过几年的工作和练习,您会在专业知识上达到很熟练的程度,日常需求都已经在您的“舒适区”,现在您终于准备好了。既然您的目标是做一个全栈工程师,那么从哪些技术开始入手呢?
「围绕商业目标」
我的第一条建议是,在考虑做什么项目的时候,围绕商业利益作为目标。归根结底,技术是服务于商业目标的。
在计算机科学诞生的短短几十年中,热门的技术和平台一直在发生巨大的变化。
服务器端的平台和语言从C到C++、Java、Python,再到如今的Node.js,变化从来没有停止过。
客户端则分浏览器和原生开发两个分支。浏览器方面,Web标准是一个活的标准,意思是说,有一些新的提案不停地加入到标准之中,这是一个动态滚动的标准,而不是印刷出来的定案。
各种浏览器的市场份额每隔两年就会发生天翻地覆的变化,从moz到Webkit,我们见证了Webkit的发展壮大。
移动端设备的市场份额之争更是激烈,曾经的诺基亚和摩托罗拉被新起之秀收购,iOS和Android之争还在继续……
仅仅据我所知,年到年腾讯就有很多团队进行了从PC端到移动端、从HTML5到原生App开发的各种转型。没有人能说得准下个季度我们团队的目标是什么,每半年就有一次大的调整,而小的调整从来就没有停止过。“变化”是唯一保持不变的东西,每个人都在不停地学习新的技术。
相对来说,商业目标是稳定的。把
老板雇用一个员工,不是因为他能写程序,而是因为他能帮助自己赚钱。赚钱有两种方法:减少成本,或者增加收入。程序员如果能加快内部系统的运行效率,让产品制作流程更加顺畅,就是减少成本。如果能让用户更容易地购买产品,或者提高服务质量吸引更多用户,就能增加收入。在老板看来,程序员只是一个昂贵的劳动力,他会不会写程序都没那么重要,重要的是能赚钱。
所以如果您想成为一个高级开发者(或者高级设计师),就一定要学会这种思维方式。
所谓“商业目标”要广义地去解读。对于直接制作产品,给用户使用的团队,就需要对外
全栈工程师可以做得事情越多,就越需要具备判断做什么的能力。如果增加一个用户需要的功能是加分项的话,拒绝一个用户不需要的需求更加值得推崇。
一切都要围绕商业目标来进行,包括您做的项目、您的汇报方式,以及您在学习新技能时进行的取舍。
我在公司的技术通道1中会发现有这样一些开发者,他们做项目的驱动力是“技术”本身,而不是“商业”目标。比如说,他们针对
用的技术很新潮,满足了自己的炫技虚荣心。
朋友圈(其实都是前端同事)传播很广。
在高端机器和大屏幕机器上效果很好。
坏的方面如下:
在低端机和慢速网络下效果不好。
沉浸在技术的实现中,而忽略用户体验。
打开页面就自动播放音乐,让用户感觉很突然。
我老婆是一位财务人员,她每次看到朋友圈这种很炫酷但需要加载的页面就会马上关掉,有时候耐心等待打开之后也是眼花缭乱,不知所以。所以有时候我会思考,一个技术的圈子,在热烈讨论某个推广页又用了某某炫酷新技术的时候,有没有想到普通用户根本不买单呢?
再来说说一个好的案例。
我在面试求职者时遇到一个综合能力不错的候选人,他是一个全栈工程师。我问他,您现在掌握的技术比较多,那您未来的职业规划是怎样的?他说,他觉得用什么语言并不重要,但是最近一年开始把重心放在Android开发上,因为移动端App开发是现在的潮流,有很大的需求,在这里可以有所成就。但在未来,不排除改变方向去做别的事情的可能,到时候可能是iOS或者其他新的系统。基本上来说,自己掌握的知识体系是可以复用的,但也期待学习新的语言。
我喜欢他这样的态度,对未来有自己的方向,但也知道自己没法看得太清晰。对商业和市场有想法,而且自己也有足够的技术能力和自信向未来前进。相比而言,有些候选者的项目经验和学习技能很杂,东一锤子西一榔头,有些时候纯粹是为了折腾而折腾。
记住,当您只有一把锤子,您看什么都是钉子。而如果您痴迷于工具,反而看不到问题所在。因此,要先看看有哪些问题需要解决,然后再补充您的工具箱。永远从商业目标的角度来决定学习哪些东西,而不是纯粹为了锻炼技术能力而去学习。
「
我的第二条建议是,从用户体验的角度考虑问题。
用户体验是用户使用产品时的心理、感受、印象、评价。生活中处处涉及用户的体验,闹钟、牙刷、马桶、书包、公交、红绿灯、手机、电脑、键盘、鼠标……每天,我们都在和产品打交道,每天都在使用和体验产品。
每一个糟糕的体验背后都蕴含着商机
全栈工程师应该
所有优秀的工程师所做的一切都是在优化用户体验:优化性能的开发者是在积极地提升用户体验和交互;设计师有意用颜色、空间、大小和表单的排列方式让用户体验更顺畅好用;而内容运营者认为某些内容重要,某些内容不重要,也是在考虑如何提升用户的体验。
我在年加入腾讯的时候,公司只有一万多人。那时候,我需要办一些行*手续,需要公司开具薪酬证明,整个操作流程是这样的。
打开公司论坛,搜索“薪酬证明”,搜索到一篇文章,里面讲到找一位人力资源的员工来办理。
我打开RTX(腾讯内部使用的工作通讯软件,类似QQ),找到这位人力资源的员工,问他座位在哪里;跑到他座位上,此时已经有几个人在排队了,我排在后面;到我了,我告诉他我要办薪酬证明,并告诉他我的RTXID;等待10分钟后,他打印出一张薪酬证明,签字盖章后给我。整个过程耗费了我一个小时的时间。
年,我要申请美国旅游签证,需要开具薪酬证明。我从平时的宣传渠道得知,现在人力资源的很多服务都可以在线上办理了,于是我尝试了一下,现在开薪酬证明的流程是这样的。
选择“我要办证明”→“收入证明”,在证明用途一栏,选择“签证类”→“旅游签证”,并提交一些个人信息。
输入我的办公座位号,提交给系统。
第二天,一个漂亮的红色大信封放在我座位上。打开一看,里面包括中英文两份收入证明,还有我的旅游目的地以及时间,整个收入证明既漂亮又专业,是为签证量身打造。从提交系统到拿到最终的证明,我只花了几分钟,过程顺畅快速,体验非常好。
从年到年,经过这几年的发展,腾讯的员工规模已经达到了三万多人,翻了三倍。HR流程如果还以旧的方式运作,可能得加派好几倍的人手,浪费所有员工不知道多少时间。但是现在通过自动化的系统,用户满意度大大提高。一个内部员工使用的系统,尚且有如此的优化空间和投入力度,何况是对外直接出售服务的公司呢?
我这样被公司服务“惯坏”的人,往往对社会上其他服务更加挑剔。此外,在深圳这样一个服务业水平居全国前三的城市居住惯了,去其他城市也经常会有被“怠慢”的感觉。我想这就是所谓“由俭入奢易,由奢入俭难”。
所以,用户现在都被手机中那些提供优质体验的App“惯坏”了,想让他们再接受陈旧的设计和体验,就更加难上加难了。