除去极少数天赋异禀的神级程序员,我们大部分人都是凡人。
凡人要从一个小菜鸟成长为全栈工程师大神,只能从少到多,慢慢积累知识。这里我推荐采用“先精后广,一专多长”的流程来学习。
先精后广,一转多长
毕业生遇到的第一个问题就是如何在一个城市,甚至是北上广深这样的大城市生存下来。生存下来需要一个稳定的工作,所以需要投一些简历给大公司或者小公司。
平心而论,程序员在市场上的供求关系比绝大部分职业都更有利于求职者,在微博上、twitter上、v2ex上……对优秀程序员的需求从来就没有减少过。优秀的程序员总是能找到工作并且工资不低。但是为什么很多毕业生投出的简历都石沉大海呢?
大部分情况都是由于求职者在所需专业上的深度不够。让我们做一个情景假设,你看到腾讯有一个职位空缺:
招聘前端开发:
你想,自己完全满足要求啊,于是一封简历就投递到面试官的邮箱那里了,里面用大段文字表达自己的激情和兴趣,并且表明自己完全符合这个要求。
但是你从面试官的角度来想想,他收到了多少个简历呢?可能100个。
他要从100个符合要求的人中选择10个来面试,你的简历中的哪一点吸引到他了呢?有的竞争者有移动端的作品、有的竞争者提到他很擅长页面性能优化、响应式、页面渲染效率、有的写过JavaScript框架……而你只是一个普通的满足要求的人。
你可能会说,我爱好广泛,我会一点PHP,做过wordpress主题,会一点java,毕业设计做过一个小客户端应用,什么都会一点……但最终你仍然会得到一个“无亮点”的评价,被无情地pass掉。
所以,作为一个求职者,无论是毕业生还是社会招聘,仅仅满足招聘要求是不够的。考核你能力的是专业的面试官,面对他你要有足够突出的专业加分项。
有了一个职业的专长,你就能有自己的阵地,以此为生,然后再之后的时间逐步学习更加广博的知识。
如果你在一个中等规模以上的公司找到了工作,那就会有一个专门的职业。经过几年的工作和练习,你会在专业知识上达到很专业的程度,日常需求都在你的舒适区,现在你终于能重新提起精神,准备做一个全栈工程师了,那么从哪些技术开始入手呢?
关注商业目标
我的第一条建议是,关注商业目标。归根结底,技术是服务于商业目标的。
在计算机科学诞生的短短几十年中,热门的技术和平台都一直在发生巨大的变化。服务器端的平台和语言从C到C++,Java,Python,Node……客户端分浏览器和原生开发两个分支。浏览器方面,web标准和不同浏览器的比例每隔5年就发生天翻地覆的变化,原生设备的市场份额更是风起云涌,曾经的诺基亚和摩托罗拉被新起之秀收购,iOS和Android之争还在继续……
但是商业目标是相对稳定的。把关注点放在商业目标而不是技术上,就能在多个技术之间选择更能完成商业目标的技术,这样往往能做出更为客观的决定。更重要的是,在这个过程中你学习到的不仅仅是技术,更是一种潜意识的思维方式,这种思维方式可以帮助你提升你的综合竞争力,是一种“硬通货”的能力。
所谓“商业目标”要广义地去解读。对于直接制作产品输出给用户的团队,就对外关注如何提高产品质量、降低产品成本,对内关注如何优化流程、减少错误率。如果团队输出的成果是公司内其他部门需要的原材料,就关注下游的需求,看如何更好地输出这个成果。
关注商业目标需要持久的练习。等到自己成为全能的大神,或者成为团队管理者,更加需要在多个目标任务之中做出选择。全栈工程师需要做和能够做的事情是很多的,他会很多技能,也负责处理很多工作,所以他更需要能力从诸多事情中找到从商业上最值得解决的一个:可能是制作一个工具提高团队的效率,也可能是成本上的优化,也可能是增加一个用户需要的功能,更有可能是拒绝一个用户不需要的需求。全栈工程师可以做很多,他更需要有判断做什么的能力。请总是从商业目标的角度看学习哪些东西,而不是纯粹为了锻炼技术能力而去学习。
记住,当你只有一把锤子,你看啥都是钉子。
关注用户体验
我的第二条建议是,从用户体验方面来考虑问题。
全栈工程师应该关注用户体验,并且有用户体验相关的知识。即使一个技术达人能够以一己之力搭建一个站点,但他如果不知道如何关注用户和客户的体验,那么他做的产品就会体验极差。这样的产品除了“能用”之外什么优点都没有。
所有优秀的工程师所做的一切都是在优化用户体验:一个优化性能的开发者是在积极的提升用户体验和交互,一个设计师有意用颜色、空间、大小和表单的排列方式让用户体验更顺畅好用,而一个内容运营者认为某些内容重要,某些内容不重要,也是在考虑如何提升用户的体验。
甚至工程师作为团队leader向领导汇报时、发送邮件时也需要认真地关注客户(在这里是老板)的体验,以对方能理解,会关注的方式来表达自己做了什么、请求对方的支持。
所以这里的“用户”仍然是一个广义的定义:所有为之服务的人。
我如果开创一个公司需要招聘“全栈工程师”,我要求的三个能力就是一专多长、关注商业目标、关注用户体验。
如果是有志往全栈工程师方向发展的学生,我推荐从入门简单的前端开发开始学,渐渐地接触整个web开发的世界。因为前端开发直接面对最终用户,在上下游发展上有更自由的空间。其他职位也可以从一个专一的职业开始,专注地学习这个职业需要的技术,到达一定的深度之后,扩展自己的知识面,往一专多长方向去发展。
文章修改自豆瓣专栏(作者:余果)