无论您是否认可,除去极少数天赋异禀、骨骼惊奇的天才程序员,咱们大部分人都是普通人,都须要遵循“一万小时定律”,才能从平凡变成超凡。程序员
凡 人要从一个小菜鸟成长为全栈工程师,只能从少到多、慢慢积累知识和经验。职业生涯的本质,就是在一个专业方向上积累信息。这里我推荐采用“先精后广,一专 多长”的流程来学习。采用这种方式来学习,不光能够举一反三、触类旁通,还让咱们学习得更快,并且按部就班更符合通常人的职业生涯发展。面试
先精后广,一专多长算法
“先精后广,一专多长”是指,建议初学者学习全栈技能的时候,先在一个特定的方向上有比较深刻的钻研,而后再将学习目标渐渐推广开来。好比先从前端方向入手,掌握了基本的HTML、CSS、JavaScript以后,不要转头向服务器端语言或者App方向发展,而是深刻到性能优化、SEO、多种框架、响应式页面等前端细节中去。通过一到两年的深刻研究以后,再去学习其余方向。后端
如 果在创业公司作全栈的工做,通常也不会要求一我的处理全部的技术工做,至少会有两三我的组成团队来作项目。你们在分配工做的时候,能够按照每一个人的偏好和 技术特色,进行先后端的分工,不用彻底按照每一个人作一个模块的方式来分工。这种分工的界限不必定要很绝对,在不一样职位的工做范畴中,能够有一些重合的区 域。浏览器
若是是毕业生或者初学者,我不建议在刚开始的一到两年接触太多技术,杂而不精,结果可能会对后面的职业道路产生反作用。性能优化
为何我强调在开始的时候有一个专精方向的重要性呢?由于这样您才能在求职的时候有一个“亮点”。服务器
平心而论,程序员在市场上的供求关系比不少其余职业都更有利于求职者,在微博、Twitter、V2EX上都会有不少引人注目的招聘启示,你们对优秀程序员的需求历来就没有减小过。微信
虽然优秀的程序员老是能找到工做而且工资不低,可是不少程序员投出的简历都石沉大海,一个主要缘由是因为求职者的简历没有亮点,或者说从工做经历中提取不出来一个亮点。网络
让咱们作一个情景假设,做为一个有两年工做经验的全栈工程师,您看到腾讯有一个职位空缺。
腾讯社交用户体验设计部招聘前端开发,要求以下。
本科以上学历。
两年以上工做经验。
精通HTML、CSS、JavaScript等前端相关技术,熟悉W3C网页标准。
熟悉至少一种后台语言的开发机制(如Java、C++等)。
有必定架构能力和算法能力,有良好编码规范。
良好的学习能力、沟通能力,追求完美,有工做激情,能在较大强度下工做。
热爱互联网,喜欢研究各类互联网技术者更好。
您想,本身彻底知足要求啊,因而一封简历就投递到面试官的邮箱,里面用大段文字表达本身全面的能力彻底符合这个要求,并且本身还有亢奋的激情和浓厚的兴趣。
可是您从面试官的角度来想一想,他收到了多少份简历呢?对于一个大公司的HR,可能100个都算少。
根据中国招聘平台拉勾网“2015年互联网人才流动报告”,前端相关岗位的简历投递数只有岗位数的一半。与此同时,服务器开发方向(好比Java、PHP、C++等)的简历投递数都大大高于岗位数。从图表能够看出,前端开发仍然处于人才紧缺阶段。
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开发的各类转型。没有人能说得准下个季度咱们团队 的目标是什么,每半年就有一次大的调整,而小的调整历来就没有中止过。“变化”是惟一保持不变的东西,每一个人都在不停地学习新的技术。
相 对来讲,商业目标是稳定的。把关注点放在商业目标而不是技术上,就能选择出更适合完成商业目标的技术,这样就能作出更为客观的决定。更重要的是,在这个过 程中您学习到的不只仅是技术,更是一种潜在的思惟方式,这种思惟方式能够帮助您提高综合竞争力,是一种“硬通货”的能力。
老板雇用一个员工,不是由于他能写程序,而是由于他能帮助本身赚钱。赚 钱有两种方法:减小成本,或者增长收入。程序员若是能加快内部系统的运行效率,让产品制做流程更加顺畅,就是减小成本。若是能让用户更容易地购买产品,或 者提升服务质量吸引更多用户,就能增长收入。在老板看来,程序员只是一个昂贵的劳动力,他会不会写程序都没那么重要,重要的是能赚钱。
因此若是您想成为一个高级开发者(或者高级设计师),就必定要学会这种思惟方式。
所 谓“商业目标”要广义地去解读。对于直接制做产品,给用户使用的团队,就须要对外关注如何提升产品质量、下降产品成本;对内应该关注如何优化流程、减小错 误率。若是团队输出的成果是公司内其余部门须要的原材料,就要关注下游的需求,研究如何更好地输出成果,如何在流程上使得输出产品的过程更顺畅。
关 注商业目标须要持久的练习。等到本身成为全栈工程师,或者成为团队管理者,更加须要在多个目标任务之中作出选择。全栈工程师须要作和可以作的事情是不少 的,他会不少技能,也负责处理不少工做,因此他更须要能力从诸多事情中找到最有商业价值的一个:多是制做一款工具提高团队效率,也多是成本上的优化。
全栈工程师能够作得事情越多,就越须要具有判断作什么的能力。若是增长一个用户须要的功能是加分项的话,拒绝一个用户不须要的需求更加值得推崇。
一切都要围绕商业目标来进行,包括您作的项目、您的汇报方式,以及您在学习新技能时进行的取舍。
我在公司的技术通道中会发现有这样一些开发者,他们作项目的驱动力是“技术”自己,而不是“商业”目标。好比说,他们针对微信平台作了一个活动推广页,使用了不少华丽的3D旋转和SVG动画。好的方面以下。
用的技术很新潮,知足了本身的炫技虚荣心。
朋友圈(其实都是前端同事)传播很广。
在高端机器和大屏幕机器上效果很好。
坏的方面以下。
在低端机和慢速网络下效果很差。
沉浸在技术的实现中,而忽略用户体验。
打开页面就自动播放音乐,让用户感受很忽然。
我老婆是一位财务人员,她每次看到朋友圈这种很炫酷但须要加载的页面就会立刻关掉,有时候耐心等待打开以后也是眼花缭乱,不知因此。因此有时候我会思考,一个技术的圈子,在热烈讨论某个推广页又用了某某炫酷新技术的时候,有没有想到普通用户根本不买单呢?
再来讲说一个好的案例。
我 在面试求职者时遇到一个综合能力不错的候选人,他是一个全栈工程师。我问他,您如今掌握的技术比较多,那您将来的职业规划是怎样的?他说,他以为用什么语 言并不重要,可是最近一年开始把重心放在Android开发上,由于移动端App开发是如今的潮流,有很大的需求,在这里能够有所成就。但在将来,不排除 改变方向去作别的事情的可能,到时候多是iOS或者其余新的系统。基本上来讲,本身掌握的知识体系是能够复用的,但也期待学习新的语言。
我喜欢他这样的态度,对将来有本身的方向,但也知道本身无法看得太清晰。对商业和市场有想法,并且本身也有足够的技术能力和自信向将来前进。相比而言,有些候选者的项目经验和学习技能很杂,东一锤子西一榔头,有些时候纯粹是为了折腾而折腾。
记住,当您只有一把锤子,您看什么都是钉子。而若是您痴迷于工具,反而看不到问题所在。所以,要先看看有哪些问题须要解决,而后再补充您的工具箱。永远从商业目标的角度来决定学习哪些东西,而不是纯粹为了锻炼技术能力而去学习。
关注用户体验
个人第二条建议是,从用户体验的角度考虑问题。
用户体验是用户使用产品时的心理、感觉、印象、评价。生活中到处涉及用户的体验,闹钟、牙刷、马桶、书包、公交、红绿灯、手机、电脑、键盘、鼠标……天天,咱们都在和产品打交道,天天都在使用和体验产品。
每个糟糕的体验背后都蕴含着商机
全栈工程师应该关注用户体验,而且掌握用户体验相关的知识。即便一个技术达人可以以一己之力搭建一个站点,但他若是不关注用户和客户的体验,那么他作的产品可能会很糟糕。这样的产品除了“能用”以外什么优势都没有。
全部优秀的工程师所作的一切都是在优化用户体验:优化性能的开发者是在积极地提高用户体验和交互;设计师有意用颜色、空间、大小和表单的排列方式让用户体验更顺畅好用;而内容运营者认为某些内容重要,某些内容不重要,也是在考虑如何提高用户的体验。
我在2010年加入腾讯的时候,公司只有一万多人。那时候,我须要办一些行政手续,须要公司开具薪酬证实,整个操做流程是这样的。
打开公司论坛,搜索“薪酬证实”,搜索到一篇文章,里面讲到找一位人力资源的员工来办理。
我 打开RTX(腾讯内部使用的工做通信软件,相似QQ),找到这位人力资源的员工,问他座位在哪里;跑到他座位上,此时已经有几我的在排队了,我排在后面; 到我了,我告诉他我要办薪酬证实,并告诉他个人RTX ID;等待10分钟后,他打印出一张薪酬证实,签字盖章后给我。整个过程耗费了我一个小时的时间。
2015年,我要申请美国旅游签证,须要开具薪酬证实。我从平时的宣传渠道得知,如今人力资源的不少服务均可以在线上办理了,因而我尝试了一下,如今开薪酬证实的流程是这样的。
关注“HR助手”的微信公共帐号,它自动识别出我是腾讯员工,也获得了个人ID。
选择“我要办证实”→“收入证实”,在证实用途一栏,选择“签证类”→“旅游签证”,并提交一些我的信息。
输入个人办公座位号,提交给系统。
次日,一个漂亮的红色大信封放在我座位上。打开一看,里面包括中英文两份收入证实,还有个人旅游目的地以及时间,整个收入证实既漂亮又专业,是为签证量身打造。从提交系统到拿到最终的证实,我只花了几分钟,过程顺畅快速,体验很是好。
从 2010年到2015年,通过这几年的发展,腾讯的员工规模已经达到了三万多人,翻了三倍。HR流程若是还以旧的方式运做,可能得加派好几倍的人手,浪费 全部员工不知道多少时间。可是如今经过自动化的系统,用户满意度大大提升。一个内部员工使用的系统,尚且有如此的优化空间和投入力度,况且是对外直接出售 服务的公司呢?
我这样被公司服务“惯坏”的人,每每对社会上其余服务更加挑剔。此外,在深圳这样一个服务业水平居全国前三的城市居住惯了,去其余城市也常常会有被“怠慢”的感受。我想这就是所谓“由俭入奢易,由奢入俭难”。
因此,用户如今都被手机中那些提供优质体验的App“惯坏”了,想让他们再接受陈旧的设计和体验,就更加难上加难了。
用户是谁
“站在用户的角度想问题”这样一句朴实的话,能够指导咱们作不少事情,可是不少时候咱们忽略了这一步。
就像“体验”泛指全部生活中全部的体验。这里的“用户”仍然是一个广义的定义:全部您为之服务的人。
比 如作一次演讲或者汇报,第一件要紧的事不该该是作PPT,而应该是调查听众,站在听众的角度去思考:听众知道什么信息,听众想知道什么。若是给您的老板汇 报,您不能指望他了解您所作项目的技术细节,并且他想知道的也不是技术细节,而是项目进度和风险。可是若是在一个技术论坛上分享,您就不能指望听众都知道 您的项目背景和目标,须要花一点时间去介绍,听众也不想知道太多细节的东西,只须要介绍一些决策和架构的大方向。
写 邮件的时候,收件人(还有可能这封邮件被转发以后的收件人)就是用户,那么写邮件的一些技巧就包括:尽可能简短,不要给收件人太大压力;把结论放在邮件的开 始,方便对方快速了解状况;若是须要老板拍板,给出选择题,而不是问答题。总而言之,以对方能理解、会关注的方式来表达本身作了什么。
做为前端工程师,上游的设计师、下游的后台工程师,均可以认为是前端团队的用户。若是细心观察,就能够发现这里面有一些痛点。由于领导没有本身敲代码,因此他可能不会发现这些痛点,也就不会安排您去作优化工做。因此这里须要您本身去观察和优化流程。
很 多程序员的第一个想法是作工具,可是想一想我刚才说的话,老板雇用您不是由于您能写代码(或者作工具),而是由于您能帮他赚钱。因此您要用一切办法,去优化 流程解决痛点,作工具是一个可选的方法,但不该该是您的第一个想法,更不是惟一的办法。假使真的是作了一个工具,最终汇报邮件的时候,不要以“我作了一个 工具……”开头,而应该以“我发现了一个问题……”开始。
大巧若拙
老子(两个字都请以三声阅读)说,大巧若拙。意思是,指真正聪明的人,不会显露本身,反面从表面看好像还很笨拙。用户体验不仅是界面和交互这样能够直观感觉的东西,还包括一些隐藏在用户界面背后的细节和规范。
就 像冰山,露出水面的部分只占整个冰山的1/9,用户看到的只是显露出来的部分。背后的部分通常用户是看不到的:好比用户研究,用研团队会经过调查,输出一 些用户画像,影响整个产品的功能方向、设计风格;还有设计规范,设计团队在设计产品的一开始制定了规范以后,新增长的功能和页面都必须遵循已有的设计规 范,这样整个产品是统一的,可以给用户专业的感受。
为何如今不少商业公司花了大把的钱和精力开发出独立运行的App,体验却很糟糕,甚至不少用户反馈称App还不如微信公共号好用?
一 个很大的缘由就是公司不重视用户体验,以为用户研究和交互这种东西,不用专业人员去作,让设计师搞定就行了;或者老板拍脑壳定方案,作出的东西花里胡哨、 炫酷狂拽,但就是让用户摸不着头脑。相反,微信花了很大的精力去作深刻的研究,最后设计出了一套看似简单,可是可用性很是好的框架。而后微信开放后台系统 给第三方,第三方公共号能够定制的地方有限,只能把功能往里面套,不太容易出错,用户体验天然就上来了。
反观某些银行的App,几乎每一个标签页的设计风格都不同,并且喜欢本身设计键盘,每次在输入密码的时候都很是不方便,其实这是没有必要的。
作本身会用的产品
创 业公司作产品,CEO必定要是本身的目标用户。由于若是本身都不体验本身的产品,就很难发现用户在使用产品过程当中遇到的糟糕体验。咱们常常在网上看见网民 抱怨办理公共事务时手续很麻烦,不少流程设置得让人抓狂。我想,这里面有一个很大的缘由就是,设计公共事务流程的人,本身自己不是目标用户。
网 上有个段子,说通常的产品经理没办法把本身代入成“小白”用户,作出的东西只有他本身会用;高级产品经理通过半小时的冥想能够进入小白状态;张小龙和马化 腾这样的大师级产品经理须要两分钟;而乔布斯能够随时切换大师级产品经理和小白的状态。这就是为何他会说“stay hungry, stay foolish”。
我若是开创一个公司须要招聘“全栈工程师”,我要求的三个能力就是一专多长、关注商业目标、关注用户体验。
有 志往全栈工程师方向发展的学生,我推荐从入门简单的前端开发开始学,并且从拉勾网“2015互联网人才流动报告”来看,职位多、简历少排名第一的职位是前 端开发。并且由于前端开发处于互联网开发的中间环节,能够从上下游入手,渐渐地接触Web开发的完整流程。第三个缘由是,前端开发直接面对最终用户,也可 以锻炼本身对用户体验的感受。
固然,前端并非惟一的选择,您也能够从其余职位开始,专一地学习这个职位须要的技术,到达必定的深度以后,扩展本身的知识面,往一专多长方向去发展。