如何成为全栈工程师?

转自:http://mp.weixin.qq.com/s?__biz=MzA3NTIzMzIxNQ==&mid=208316668&idx=1&sn=c57fb38fa7b1d404794deff258b1ae0d#rd

 

如何成为全栈工程师?

2015-08-18 余果 人邮IT书坊

不管您是否承认,除去极少数天赋异禀、骨骼惊奇的天才程序员,我们大部分人都是普通人,都需要遵循“一万小时定律”,才能从平凡变成超凡。

 

凡 人要从一个小菜鸟成长为全栈工程师,只能从少到多、慢慢积累知识和经验。职业生涯的本质,就是在一个专业方向上积累信息。这里我推荐采用“先精后广,一专 多长”的流程来学习。采用这种方式来学习,不光可以触类旁通、举一反三,还让我们学习得更快,而且循序渐进更符合一般人的职业生涯发展。

 

先精后广,一专多长

“先精后广,一专多长”是指,建议初学者学习全栈技能的时候,先在一个特定的方向上有比较深入的钻研,然后再将学习目标渐渐推广开来。比如先从前端方向入手,掌握了基本的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开发的完整流程。第三个原因是,前端开发直接面对最终用户,也可 以锻炼自己对用户体验的感觉。

当然,前端并不是唯一的选择,您也可以从其他职位开始,专注地学习这个职位需要的技术,到达一定的深度之后,扩展自己的知识面,往一专多长方向去发展。

转载于:https://www.cnblogs.com/leoncfor/p/4741376.html

成为全栈工程师,你需要掌握前端开发、后端开发和数据库等多个技术领域。以下是一些步骤和建议,帮助你成为全栈工程师: 1. 学习前端开发:掌握HTML、CSS和JavaScript等前端开发的基础知识。学习并熟悉常用的前端框架和库,如React、Vue.js等。 2. 掌握后端开发:学习至少一门后端开发语言,如Java、Python、Node.js等。了解服务器端开发的基本原理和常用技术,如RESTful API、Web框架等。 3. 学习数据库:了解关系型数据库(如MySQL、PostgreSQL)和非关系型数据库(如MongoDB、Redis)的基本概念和使用方法。熟悉SQL语言和数据库设计原则。 4. 学习系统和网络知识:了解操作系统原理、网络协议和常用的网络通信方式。掌握Linux操作系统的使用和基本命令。 5. 实践项目:通过实际项目来应用所学的技术,可以是个人项目、开源项目或者参与团队项目。这样能够锻炼你的综合能力,提高技术实践经验。 6. 持续学习和追踪技术发展:全栈工程师需要不断学习新技术和工具,跟上行业的发展趋势。关注各种技术论坛、博客、社交平台,参加技术交流会议和培训课程。 7. 构建自己的技术栈:根据实际需求和兴趣,选择并深入学习一些特定的技术或工具。例如,学习React Native可以开发跨平台移动应用,学习Docker可以进行容器化部署等。 8. 持续提升综合能力:全栈工程师需要具备良好的问题解决能力、团队合作能力和项目管理能力。通过参与团队项目、解决实际问题和不断提升自我管理能力,可以全面发展自己的综合能力。 成为全栈工程师是一个长期的过程,需要不断学习和实践。重要的是保持学习的态度和持续提升自己的技能,同时灵活适应不断变化的技术需求和行业趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值