第六日:码农的宿命
【青春饭】
“码农”是IT从业者一个自嘲的称号,也有从事没有发展前景的软件开发职位,靠写代码为生的意思。但我认为码农是一个爱称,编码的农民,和农民一样有着执着纯真朴实豪爽的共性,仅仅分工不同而已。就好比农业社会对粮食的依赖,工业化进程对计算机应用也有着很强的依赖,大量的需求催生出这样一群人。他们有智慧的大脑,对于编程,设计,开发都有着熟练的技巧,但多数人看来,码农的特点是:
-
收入低
-
工作单调
-
工作时间长
实际上这个描述非常片面,或者说是外行看热闹。第一,全行业比较来看,软件开发领域收入为中等偏上,第二,程序员一般都是有癖好的,沉浸在自己的癖好中是不会感觉单调的,第三,程序员有一定的时间自由度(如果你是一名合格的程序员的话),至少不会像流水生产线工人一样。其实,通过几十年的发展,我们对程序员的定义更加科学,比如很多IT企业都开始建立详细的JM(Job Module),即职级模型,程序员沿着专业方向可以走到很高,甚至可以说,程序员是可以被当成一生的事业的。
然而,有一个非常普遍的观点是,程序员和做模特一样是吃青春饭的,到了三十岁就要考虑转行或者转管理。尽管这种观点颇具欺骗性,但至少它对一种人是适用的,即入错了行的人。如果你骨子里不想写程序,就算年纪轻轻为了生计写几年代码,之后肯定会另有他途。心非所属则不必勉强,但问题是,即便如此,你知道你的心之所属吗?
我们知道,一个成熟的产业一定需要各色岗位来支撑,若要成熟,则需要时间的沉淀,比如实体经济制造业,创意、生产线、高级技工、技术管理四个方面都产出大量的高级人才。因为历史悠久,我们能看得到。而软件产业则不然,九成以上是刚出道的新手,并没有太多“高级”和“资深”的具体样板可供参照,在前端开发领域中情况更甚,绝大部分人根本搞不清楚什么样才是“资深”前端工程师,相比传统软件行业近四十年的进化,我不相信仅有几年光景的前端技术岗位能产出多少货真价实的“资深”。但互联网崛起速度太快,还没有等技术基础打牢,互联网形态就又花样翻新了,这种变化是一种常态,而岗位的设定也在这种变化之中自然的优胜劣汰,比如两年前可能还难以想象数据部门会需要前端工程师,他们甚至不直接和浏览器打交道。前端工程师需要适应这种变化带来的观念冲击,不要以为自己只能做切页面、或者只会给页面搞重构、只会搞兼容性,要把自己放在整个软件行业来看。
所以,由于历史“不悠久”导致的岗位模糊本身不是什么大问题,岗位的演化本身就包含在互联网的发展轨迹之中。所以,当今的互联网IT状况,就好比移动终端的大哥大时代、云计算的肉鸡时代、或者桌面操作系统的DOS时代。因此,前端工程师当前要务是要想清楚看清楚,在互联网中我能做什么,而不是作为前端工程师我能做什么,所以,从这个角度讲,技术是一个工具,放大来看,技术也只是你职业生涯中很小的组成部分,而你的从业积累、和知识面的广度深度才是你随着时间的推移慢慢步入“资深”的原因所在,而不是写了个什么框架就变“资深”了。如果有一天互联网形态固定了,它的岗位可能真正就定型了,才会有真正清晰的职能边界,就像蓝色巨人IBM中的各色岗位一样,边界清晰,权责分明,普通程序员只能实现接口而无机会设计接口、低层级的工程师也无机会跃进式的接触项目架构、技术经理人也不能轻易对产品有决策性影响,到这时,人的能力才真正的被限制在方圆之内,容不得越界,这种环境下人的成长非常缓慢。根本不会有像今天互联网乱局之中所提倡的创新、革命、成长和思想解放。简单讲,一旦产业定型,就不太需要很多“创造”了,更多的是“维护”。所以,我个人宁愿互联网IT“黑暗”的中世纪越久越好,至少对于年轻气盛程序员来说,黑暗的丛林环境才是真正的自然进化最理想的土壤,这时我想起了狄更斯在“双城记”中的开篇。
“这是最好的时代,这是最坏的时代;这是智慧的时代,这是愚蠢的时代;这是信仰的时期,这是怀疑的时期;这是光明的季节,这是黑暗的季节;这是希望之春,这是失望之冬;人们面前有着各样事物,人们面前一无所有;人们正在直登天堂,人们正在直下地狱”。
【半路出家的危与机】
然而,不管怎样,信心的树立不是一蹴而就的,对于转行做前端的人来说更是如此。俗话说,隔行入隔山。每个行业自有其道,自然不是想做就做。前端技术领域半路出家者非常多,我们来分析一下转行的心理。第一,看到前端技术入门简单、互联网对前端技术的需求缺口巨大;第二,前端技术所见即所得、感觉学习起来很快;第三,我身边的某某转行作前端看上去不错、我似乎也可以;第四,我不喜欢我现在做的工作、想换行业、正好前端技术上手较快,就选他吧;第五,我真的喜欢作Web前端,为它付出再多都是值得的。
转行者的心态比较容易走两个极端,一是只看到新行业的好,二是只觉得原工作很糟糕。但不管是什么行业的转行,对自己的职业规划的思考都应当先行一步。即务必首先清晰的回答这些问题:
-
我能做什么?
-
我不能做什么?
-
我的优势是什么?
-
我的劣势是什么?
-
做新行业对我有何好处?
-
换行会让我付出何种代价?
-
如何定义转行成功?
因为面试的时候一定会被这些问题所挑战。如果支支吾吾说不清楚,要么是对自己未来不负责任,要么骨子里就是草根一族,习惯做什么都蜻蜓点水浅尝辄止,也难让人信服你的转行是一个权衡再三看起来合理的选择。我无法帮每个人回答这些问题,但至少有两点是确定的,第一,Web前端技术是一个朝阳行业,绝对值得义无反顾的坚持下去,第二,你将经历从未有过的枯燥、苛刻的历练,所谓痛苦的“行弗乱其所为“阶段。不过话说回来,经历过高考的人,还怕个屁啊。
有心之人自有城府、懂得放弃,看得清大势中的危机、识得懂繁华里的机遇。尤其当立足于Web前端技术时,这种感觉就愈发强烈。因为国内外前端技术领域从2000年至今一直非常活跃,前端技术前进的步伐也很快,对于一些人来说,不管你是在大公司供职还是创业,不管你是在接外包项目还是自己写开源项目,从转行到跟得上新技术的脚步是有一些方法和“捷径”的。
第一,梳理知识架构
我们知道知识积累有两种思路,第一种是先构建知识面、建立技术体系的大局观,即构建树干,然后分别深入每一个知识点,即构建枝叶,最终形成大树。第二种是先收集知识点,越多越好,最后用一根线索将这些知识点串接起来,同样形成大树。第一种方法比较适合科班秀才,第二种方法则更适合转行作前端的人,即实践先行,理论升华在后。比如对“IE6怪异模式“这条线索来说,要首先将遇到的IE6下的样式bug收集起来,每个bug都力争写一个简单的demo复现之,等到你收集到第100个bug的时候,再笨的人都能看出一些规律,这时就会自然的理解IE的hasLayout、BFC和各种bug的原因、你就成为了IE6的hack专家了,当你成为100个知识线索的专家的时候,你已经可以称得上“资深”的水平了。我们知道,10个人中有9个是坚持不下来的,他们会以项目忙等各种理由万般推托,将自己硬生生的限制在草根一族,坐等被淘汰。所以,对于立志作前端的人来说,这种点滴积累和梳理知识非常重要。
第二,分解目标
将手头的工作分解为几部分来看待,1,基本技能,2,项目经验,3,沟通能力,4,主动性和影响力。想清楚做一件事情你想在哪方面得到历练,比如,我之前在作第一次淘宝彩票常规性重构的时候(正好是一次视觉和交互上的全新设计),我清楚的明白这次重构的目的是锻炼自己在架构准富应用时的模块解偶能力,寻找在其他项目中架构的共通之处,所以我宁愿加班或花更多精力做这个事情,当然更没打算向业务方多解释什么,这件事情对我来说纯粹是技能的锻炼。而经过这一次重构之后,我意外的发现对业务的理解更透彻深入、更清晰的把握用户体验上的瓶颈所在。如果一开始就把这次常规改版当成一个普通的项目按部就班的做,我只能说,你也能按时完成项目,按时发布,但真真浪费了一次宝贵的锻炼机会,项目总结时也难有“动心忍性”的体会。
所以,每个项目的每个事情都应当认真对待,甚至要超出认真的对待,想清楚做好每件事对于自己哪方面有所提升?哪怕是一个bug的解决,即便不是自己的问题也不要草草踢出去了事,而是分析出问题原因,给出方案,有目的involve各方知晓……,正规的对待每个不起眼的小事,时间久了历练了心智,这时如果突然遇到一个p0级的严重线上bug(比如淘宝首页白屏,够严重的了吧)也不会立即乱了方寸,这也是我上文提到的心有城府自然淡定万倍,而这种淡定的气场对身边浮躁的人来说也是一种震慑和疗伤,影响力自然而然就形成了。
第三,作分享
做分享这事儿真的是一本万利。有心的人一定要逼着自己做分享,而且要做好。首先,自己了解的知识不叫掌握,只有理解并表达出来能让别人理解才叫掌握,比如如果你解释不清楚hasLayout,多半说明自己没理解,如果你搞不懂双飞翼的使用场景,可能真的不知道布局的核心要素。再者,作分享绝对锻炼知识点的提炼能力和表达能力,我们作为工程师不知道多少次和强硬的需求方pk,被击败的一塌糊涂。也反映出工程师很难提炼出通俗易懂的语言将技术要点表述清楚。而做ppt和分享正是锻炼这种能力,将自己的观点提炼出要点和线索,分享次数多了,自然熟能生巧。档次也再慢慢提高。另一方面,逼迫自己站在公众场合里大声讲话,本来就是提高自信的一种锻炼。
这时,你或许会问,我讲的东西大家都明白,我讲是不是多余,我第一次讲讲不好怎么办,大家会不会像看玩猴似的看我“这SB,讲这么烂还上来讲”?要是讲不好我以后再讲没人听怎么办,我今后怎么做人啊?
老实说,这是一道坎,任何人都要跨过去的,谁都一样,你敢鼓起勇气在大庭广众之下向爱人表白,就没勇气对自己的职业宿命说不?这个心结过不去,那就老老实实呆在自己的象牙塔里遗老终生,当一辈子工程师里的钻石王老五吧。
【匠人多福】
如果你能耐心读到这里,心里一定有一个疑问,上面说的都是技术上能力上怎样怎样,那我所做项目不给力又当如何?如果项目不挣钱、黄了、裁了,我的努力不就白费了吗?我又有什么绩效和价值呢?
没错,有这种想法的人不在少数。特别是刚出道的校招同学往往更加心高气傲,以为自己有改变世界的本事,一定要参与一个牛逼的团队做一款光鲜靓丽受人追捧能给自己脸上贴金的项目。如果你有这种想法,趁早打消掉这个念头,当然,我们这里先不讨论创业的情形。
第一,如果你刚毕业就加入一个牛逼团队,说难听点,你就是团队中其他人眼中的“猪一样的队友”,不创造价值且拖项目后腿(显然大家都要照顾你的成长啊),按照271理论,你没有理由不是这个1。至少相当长一段时间内是这样。
第二,你在所谓牛逼团队中的创造性受限,因为创新多来自于团队中的“资深“和大牛们,你参与讨论但观点通常不会被采纳,他们只会给你这个菜鸟分活干,想想看,你如何能花两到三年就超越身边的大牛们?甚至连拉近与他们的距离都难。
第三,如果身在牛逼团队,自然心理对周围的牛人们有所期待,希望他们能灌输给你一些牛逼的知识和牛逼的理念。这种思想上的惰性在职场生涯之初是非常危险的。要知道技术和知识本身是很简单和淳朴的,只不过披上了一个光鲜项目的外衣而让人感觉与众不同。
第四,由简入奢易,由奢入简难,做过一个看似光彩的项目,心理再难放平稳,去踏实的做一个看上去不那么酷的产品。这种浮躁心态会严重影响今后的职业发展和成长。
第五,光鲜靓丽的项目被各种老大关注,是难容忍犯错误的,傻瓜都知道犯错误在成长之初的重要性。
就我所看到的情形看,一开始加入看似很牛的项目组,三年后得到的成长,比那些开始加入一个不被重视的项目的同学要小很多,而后者在能力上的弹性却更大。所以,道理很简单,你是要把一个很酷的项目作的和之前差不多酷,还是把一个不酷的项目做的很酷?项目是不是因为你的加入而变得与众不同了?
从这个角度讲,不管是转行的新人还是刚出道的秀才,最好将自己当作“匠人”来对待,你的工作是“打磨”你的项目,并在这个过程中收获经验和成长。付出的是勤奋,锻炼的是手艺,磨练的是心智。因此,你的价值来自于你“活儿“的质量,“活儿”的质量来自于你接手的项目之前和之后的差别。做好活儿是匠人应有的职业心态。想通这一点,内心自然少一些纠结,才会对自己对项目的贡献度有客观的认识,不会感觉被项目所绑架。
做一名多福的匠人,拥有了金刚钻、就不怕拦不到瓷器活儿。但对于人的成长来说,如果说“项目”重要但不关键,那么什么才是关键呢?这个话题还会在接下来的“伯乐与千里马”这篇中给出答案。
【若干年后】
现在,让我们回过头回答一下“青春饭”的问题。在“青春饭”小节中提到,“程序员到三十岁之后需要转行或者转管理吗?”
上文提到,工业化生产的四个领域,1,创意,2,生产线,3,高级技工,4,技术管理。Web前端技术也是如此,可以在这四个领域找到各自的归宿。
第一,“创意“
即和产品需求越走越近,拥有良好的产品感,对产品需求、设计交互把握准确,能够用适当的技术方案推动产品用户体验,属于“架构师”的范畴,因为职能更加靠前,偏“出主意”型的。这种人更贴近用户,需要活跃的思维、广阔眼界、厚实的项目经验。更多的影响产品体验方面的决策。
第二,“生产线“
即前端基础设施建设,优化前端开发流程,开发工具,包括开发环境、打包上线自动化、和各种监控平台和数据收集等,属于“技术支持”的范畴,相比于很多企业粗犷难用的平台工具,前端技术方面的基础设施建设基础还需更加夯实,因为这是高效生产的基本保证。
第三,“高级技工“
即高级前端开发工程师,专职做项目,将产品做精做透,用代码将产品用户体验推向极致,偏“实战”型的,是项目的中坚力量,直接产出成果,影响产品效益。属于项目里的“资深”。
第四,“技术管理“
即做技术经理,这才是多数人所理解的“管理”,其实就是带团队、靠团队拿成果。这类人具有敏感的技术情结,在技术风潮中把握方向,能够指导培训新人,为各个业务输出前端人才,偏“教练”型的,促进新技术对业务的影响。并有意识的开辟新的技术领域。
可见,转管理可不是想当然,也不是所谓做项目变资深了就能转管理,转了也不一定能做好。根据“彼得原理”,即人总是倾向于晋升到他所不能胜任的岗位,这时就又陷入“帕金森”定律所隐喻的恶性循环之中,直到你带的团队整个垮掉。
所以,转管理应当是一件非常慎重的事情,不是所谓程序员混不下去就转管理这么简单。但不管怎样,有一件事情是需要尤其要想清楚,即,转了管理,技术就丢了吗?我们在第七日“伯乐与千里马”中再深入聊聊这个事儿。
第七日,伯乐与千里马
【师兄们的抉择 1】
千里马常有,而伯乐不常有。——韩愈,“马说”。
一个人这辈子能遇到一个好师兄是一种缘分,可遇不可求。很多人工作中的幸福感似乎也源自这种被认同,被师兄的了解和认同,有人能直言不讳的指出你的不足,帮你发现机会,并将最适合你做的事情分配给你,这是莫大的幸运,但如此幸运的人十之一二,大多数人因为缺少伯乐的提点,渐渐辱于“奴隶人之手“,潜力渐失,毁于中庸。
在前端技术领域,这种情况很普遍也很特殊,当然有很多客观原因。即前端技术进入公众视野时间不长,有实力的伯乐更加是凤毛麟角。更何况,Web前端技术还有着一些江湖气,知识点过于琐碎,技术价值观的博弈也难分伯仲,即全局的系统的知识结构并未成体系,这些因素也客观上影响了“正统“前端技术的沉淀,奇技淫巧被滥用,前端技术知识的传承也过于泛泛,新人难看清时局把握主次,加之业务上的压力,未免过早导致技术动作变形。而这些问题也无法全赖自己全盘消化,若有人指点迷津,情况要好上万倍。因此,前端技术领域,为自己觅得一个靠谱的师兄,重要性要盖过项目、团队、公司、甚至薪水。
这也是上文所说的“项目不重要,师兄才重要“的原因。说到这里就有一个问题,每个人都问下自己,你是想当师弟呢还是想当师兄呢?当师兄有什么好处呢?
没错,很多师兄都是被师兄,甚至没有做好当师兄的准备,更进一步说,不少经理人也都是“被经理人“,没有做好准备就被推到了管理岗位。带人是耗精力的,师兄要做很多思想斗争才舍得把这些宝贵的精力放在那些菜鸟身上,这不是一个技术问题,而是一个道德问题。要记住,没有谁应该无缘无故把自己所掌握技能给你倾囊相授,如此皆命也。读到这里,作为菜鸟,作为学徒,作为新人,作为师弟,你做到对这份命运的足够尊重了吗?
尊师重教的传统美德并没有在技术领域得以很好的延续。也正因为此,人才梯队难建立起来,但对于师兄来说,却是有更多机遇的。
【师兄们的抉择 2】
作为师兄,不管是主动还是被动,肯定会想当师兄对我有什么提升?对于初次做师兄的人来说,最大的提升在于两方面,1,任务分解,2,问题分析。
第一,任务分解,作为师兄要给师弟派分任务,就涉及到任务分解,分解这事儿往低了说,就是派活,往高了说,其实就是做“架构”,比如一个页面,按照什么思路进行模块划分,模块划分是否适合单人开发,如何控制共用样式和共用脚本,我需要为他提供什么接口,如何控制他的代码并入整个页面时不会影响整体页面代码的熵值,这些都是实打实的“架构“应该包含的问题,而从小页面开始就做这种锻炼,做的多了,“架构感”自然就形成了。
第二,问题分析,在之前自己写代码都是单打独斗,什么都是用代码解决问题,但一旦涉及协作,就要强迫自己分析问题,或者说给徒弟分析问题,告诉他应当用什么方法来解决问题,当说到“方法”时,脑子里定形成了一个方案,按照这个方案路子走一定能解决问题。分析问题比写代码要更抽象、更高效,因为在脑子里构建方案要比写代码要快,思考也会更加缜密,当锻炼的多了,思考越来越快,代码的草稿也很快就在脑海中形成了,这也是我们说为什么很多人不写代码但编码思路和水平都很高的原因。
这些工作方法对了,积累多了,就是提高。对于技术经理人来说,也是同样的道理。所以,就像在第五日的“得与失”部分提到的那样,转身师兄、变身管理并不意味着“失“掉技术饭碗,而是一种进步。
【做自己的伯乐】
那么,在前端技术领域里什么样的人才算千里马,其实人人都是千里马,人人都可以发掘自己的潜力,如果上面的文字你能读懂,能认可,这种自我发掘已经开始了,没有一个好伯乐又何妨呢?做一个勤快的小码农,少一些势利的纷争,很快会发现,自己才是最好的伯乐。
但这并不是说,他人对自己的观点不重要,有时甚至要综合各种声音,所以,多找身边的大牛们聊聊天,多找你的师兄和主管,不管他们给你的建议是多么形而上,总有一些声音对你是有益的,多收集,有好处。
第八日,做地球上最牛的UED
【谁推动了历史前进,英雄?还是人民?】
“做地球上最牛的UED!”,这是淘宝UED创立之初的口号,现在被渐渐淡忘了,因为微博上的一些讨论,又想起了这份曾经美好的初衷。玉伯也感叹道:“这愿景曾吸引了多少好汉前往投奔呀。只可惜短短几年间,这愿景好像越来越远了”。问题是,要做好一个团队,靠的是个人、还是整体?愿景是越来越远了吗?
是谁推动了历史的前进,是英雄?还是人民?微观来看,是英雄,宏观来看,是人民。再放大了看,是互联网大潮之崛起推动了前端技术的进步,时势需要UED、需要用户体验。
所以,UED团队的创立发展受这些积极的外因影响,赶上了好时候,成员也跟着沾光。然而,我并不关心这个口号,我只关心体制内的关键人物,那些带动整个团队水涨船高的人们。往往我们发现,某些人的高度代表了整个团队的高度,个体的影响力代表了整个团队的影响力,某个人的水平代表了整个团队的水平。支付宝、淘宝、腾讯、百度、盛大,都是如此。而我们作为普通的个体,正是要励志成为这种人,成为真真用技术推动用户体验前进的尖刀人物。
这时我想起了很多人在知乎上的问题,关于跳槽、关于转行、关于创业、关于各种UED团队。我想,读得懂我上面的文字,你心理也许会有自己的答案。
【归宿】
最后,还有一个不得不说的问题,即归属问题,前端开发应当归属于UED还是技术部门?应当说,当前Web前端技术的价值体现在“用户体验“上。是用户体验这块阵地最后一道坎。也就是说,前端工程师应当重点考虑我所作的页面的感官体验。这是需要一些灵感和感性的,应当看到帅气优雅的界面会心有所动、或者实现一款精巧的小组件时萌生一阵快意。这种所见即所得的美妙编程体验正是其他后端工程师无法体验到的。因此,这种精确到像素级的精工雕琢虽然不直接决定产品生死,但却是提升产品品味和时尚感的要素。物质越来越丰富的今天,大众的更高诉求不就是品味和时尚吗?
如果将前端归到技术部门,一方面和“设计“离的更远,代码写的规规矩矩但渐缺少了灵性,另一方面作为工程师又缺少计算机专业课的功底,才真正丧失了优势所在,如果有一天,前端工程师的平均水平足够高,清一色的计算机科班出身,似乎更合适归入到技术部门。所以,Web前端工程师是“工程师“,需要科学严谨的编程能力,但身处UED所应当具备的美感和灵性是万不可被剥夺去的。
还有一点,Web前端工程师作为UED之中最具实践精神和逻辑思维的工种,是能够将技术对设计的影响发挥到最大,可以催生出大量的创造和革新的,这一点也是传统后端工程师所不具备的。
第九日,前端技术体系
现在越来越感觉到前端技术需要成体系的积累,一方面可以规范我们的前端技术培训,另一方面,作为知识线索为新人做指引,省的走弯路,避免陷入奇技淫巧的深坑之中不能自拔。
之前我整理了一下“前端技术知识结构”,罗列的比较散,但也基本表述清楚了我的观点。今年上半年也在整个研发中心组织了一次前端技术培训,对于前端技术的演化规律也有过整理,都放在了这个ppt中,希望对大家有所帮助。
概观国内前端技术界,其实我不认为和国外顶尖的前端技术有多少年差别,甚至很多方面都走在了他们前面,比如对IE6暴力式的兼容,以及各种外壳浏览器的风靡(呵呵,开玩笑哈)。唯一的美中不足是国外顶尖的前端技术难第一时间就在国内普及,可能是两方面原因,一是多数人英文底子很差,这可是个大问题啊。二是国内前端技术方面高质量的译文图书实在是少的可怜。那么……
接下来的最后一日,想了想还是留给答疑吧,一方面很多人读到这里肯定满肚子问题,我收集下,争取及时回复大家。另一方面,万一上面的话的有得罪人的地方,还好留有余地来补救,哈哈。
ps:一直很喜欢“神曲”的插图,从“天堂篇”里摘出一张作为封面吧,呵呵。
第十日:QA