前言
去年工作一周年时,写了一篇总结(小前端一周年杂记),现在来看里面一些观点还是颇为幼稚的。如今过了两周年了,我想还是继续记录一下自己的职业历程和真实想法。或许明年再看此文依然会觉得很幼稚,但这也正是我所期望的。
相比第一年一直在搬砖,第二年的职业经历要丰富的多,技术上依然没有什么突破,倒是自己的很多观念和想法被不断刷新。所以,本文是没有任何技术干货的,更多的是思考。
这是十年技术之路的第二篇,以下是年度关键字总结。
以下内容仅代表个人观点,与任何组织及公司无关,若有不当之处请及时指出或者大吼一声 LZSB 然后关闭页面。
落地业务
我所遇到的几乎所有的程序员,都是倾向于去做基础建设做底层开发做纯技术的,认为做业务没有什么挑战性并且不利于技术成长。
直到后来我意识到包括自己在内的大部分程序员其实都是在做业务开发,最多不过是做做组件化,工具化。让一群内功不够的人去做基础建设是十分冒险的。业务代码没设计好影响的是一条线,大不了项目重构,基础设施没设计好影响的是一大片,动不动就来个技术大升级大迁移简直就是噩梦。优化迭代不可避免,只是高手上路可以少走很多弯路。
而对于业务程序员,经常会被业务需求变更、资源排期、开发质量等问题搞得焦头烂额,你连这些问题都处理不好,还好意思去做基础建设,去搞底层开发?况且编程的核心问题就是抽象(个人观点),函数,类,模块,组件都可以看做一种抽象方式,设计的好可以降低复杂度,更好的“拥抱变化”。因此从本质上讲,所有程序员编程时所面临的问题其实是一样的,那就是抽象设计。
做业务并没有想象中的那么简单,需求在不断变化,我们除了在流程上去限制变化,还得从编码抽象上去拥抱变化。业务程序员也不能只从技术角度去思考问题。技术需要反哺业务,最终创造价值,这才是我们作为一个技术人员核心使命,程序员端正自己的位置很重要。
说这么多,其实就是想说明业务编码被忽视的技术价值。这是自己观念上的变化之一。这一年,很多精力都投入在了业务中,也取得了一些结果。况且在体制内,只有大家一起努力把业务做好了,才能拿到更多的年终奖,更快的升职加薪。踏踏实实做好业务,闷声发大财岂不美哉。
技术大会
现在前端圈的技术大会越来越多了,这一年(2016.07~2017.07),有幸参加了 JSConf(参加 宁JS(JSConf CN 2016)是个什么样的体验?),SFDC,D2(参加第11届D2前端技术论坛,你有什么收获?)以及 WeexConf,感受颇深。
不纯粹的商业活动
现在很多技术大会打着技术的名号实则是在招聘打广告做宣传。作为商业活动广告一下无可厚非,但如果因此影响到会议本身的内容和质量,是让人寒心的。主办方对于讲师的内容和演讲的质量如果没有一个较高的筛选标准,就好像是把台下几百上千程序猿当猴耍:我买这么贵的票大老远跑过来,你就给我看这个?
这也引发了自己思考,到底以怎样的姿势去参会才是合理的?
参会的核心是交流,提升自己的参与感
一开始参会感觉蛮有意思,参加几次 Conf 之后就会觉得越来越没有意思,一是新鲜感降低,二是演讲质量不符预期,三是分享内容乏味。后来我仔细总结了下,抛开客观因素,主观原因在于自己是否积极参与到会议中了,参会的核心是交流,提升自己的参与感,这样才能有更多收获,而不仅仅是作为一个听众。
NingJS 是自己参加的第一个 Conf, 此前我提前了解了每个讲师要讲的内容,所以现场不至于太懵逼。中途还上台打过广告,提过问题,After Part上主动和大神交流,知乎上的回答也收获了不少赞,整个过程参与感很强,所以感觉印象深刻。而后面的 SFDC,D2和 WeexConf,基本是作为一个吃瓜听众过去的,所以印象并不深刻,再加上演讲内容质量的参差不齐,收获并不大。这其中的落差,很大程度上取决于你在整个过程中的参与感。
所以,一场友好的技术大会,应该要给参与者们提供更多的沟通交流机会;一场深刻的技术大会,应该是让自己积极参与到互动交流中去的大会。如果仅为学习,自学比大老远跑过去听别人讲 PPT 效率要高的多。
社区&分享
世界上有两种程序员,一种上开源社区的,一种不上的。
脱离社区,知识圈和技术边界是封闭的,拥抱社区,才能可持续发展。互联网本身就是一个开放的平台,我们每天在google上搜索各种文章,各种问题的解决方案,都要归功于这些热衷分享自己知识,热衷于帮助别人解决问题的人们。你分享的一篇文章可能解决了一个普遍性的技术问题,而当别人遇到类似问题因为你的分享而节省了很多时间,找到了正确的解决方案时,你就创造了额外的价值,并且越多人因为你的文章而受益,你所创造的价值就越大,这些是薪资无法衡量的。而分享的价值远不止于此,它往往还伴随着人脉的扩张和个人及团体影响力的提升,影响力的价值也是不可估量的。
分享的形式有很多种,线上有博客,Live,视频等,线下有微分享,讲座,技术大会等。我其实很懒,差不每个月会写点东西,之前加入了 SF 的讲师直到现在也没开讲...线下的分享其实更有意义,因为可以更好的交流和表达,今年还有幸去大学当了一回讲师,算是个不错的开始。团队现在每周都有微分享也挺好的,技术人员的这些软技能在关键时刻会非常有用,分享能锻炼演说能力,拓宽自己的技术视野,排除知识误解等等。
对技术人来说,排除知识误解很重要。工作以后的大部分技术都是自学,每个人的理解能力是不同的,对知识的理解多多少少会有些偏差。如果不跟别人去交流,去分享自己的看法,可能永远不知道自己错在哪里。就好比我在这篇文章里面表达了很多自以为正确的错误观点,如果我不发表出来别人就无法指出我的错误,我也无法得知我错在哪里,在这里先感谢指出我错误的各位大神们。
晋升后的思考
貌似大家到了一个新的层级都会有一段迷茫或者适应期。从去年底晋升到现在已过半年,期间自己也思考了很多问题,晋升究竟给我带来了哪些变化?我是否达到了预期?是否发挥了更高的价值?如何去寻找更大的挑战?如何向下一个层级迈进...
然而这半年多来在工作上并没有体现出多大不同,倒是思想上发生了很多变化。
戒骄戒躁
晋升是公司对员工能力的认可,这个能力是综合的,更多的体现在你负责的业务中来。晋升是公司体制内对个人能力的认可,并不完全代表个人水平,所以不存在晋升的同学就比没晋升的同学要强,这其中影响因素很多。假如脱离了体制,个人究竟处在业界什么水平,自身短板和优势在哪里,发展瓶颈在哪里,自己心里得有杆秤。
责任越大
晋升是公司对员工能力的认可,晋升意味着**,**越高,责任越大,老板对你的期望越高。如果无法寻找新的挑战做出新的亮点以更高的标准要求自己,自然是无法满足期望的,最后只能3.5甚至3.25了。
寻找突破
新的起点需要新的要求,而当大家都站在新的高度时,要让所有人都找到突破点其实是不可能的。成长是自己的事情,需要自己去规划。团队面临的业务和问题是有限的,找到适合自己的点去发力并做好,实在找不到就以下一个层级的标准来要求自己总没错的。再不行就换一个环境,发展才是硬道理。
竞争力
有时候 P5/P6/P7 可能干的活差不多,如何体现竞争力?如何体现出水平差异?一个人的竞争力在哪里,一个程序员的竞争力在哪里,一个前端的竞争力又在哪里?跟别人比我的竞争力又在哪里?
这些问题我想了很久,并没有得到一个理想的答案。但是我确信的是,决定程序员竞争力的往往不是某些具体的技术能力或者管理能力,而是思维方式和执行能力。
一个人的能力和潜力如何,工作一段时间大家都是能感觉出来的。我观察了身边一些大牛,发现牛逼的人总是相似的,都具有敏锐的思维能力和高效的执行能力。处在业务线上的技术人员,竞争力往往体现在办事能力上。这种素质与专业能力无关,这些人,即使是抛开专业技能换了一个行业依然能在新的领域做到最好,这就是作为人的竞争力。
而在技术上,不同类型的程序员在技术上体现的竞争力也是不一样的。之前还一本正经的去看编译原理,算法,机器学习这些容易在外面装逼的计算机基础知识,后来发现花了大量精力去看这些东西然而工作上并没有用到,而且由于实战少对其理解并不深刻,还是看重构,代码大全或者 SICP 这些思想性比较强的知识比较好,可以摆正自己的三观。
后来我越看,越是焦虑,觉得这就是个无底洞,计算机的范畴太广了,就算你兴趣再浓也无法面面俱到。单是前端领域就已经包含了很多,在巩固基础的同时还得与时俱进引入新技术来提高工作效率,光是做到这两点就很不容易了。
学海无涯而吾生有涯,以有涯随无涯,殆已。找准自己的方向并将精力投入在对自己最有价值的技术上,才能更好地形成自己的技术竞争力。
而具体到前端的竞争力,还是在端,在于体验。刚好今年BU的一大目标就是把 UE 做好,这也让自己更加重视体验这块。前端和 UED 一起背负了体验上的使命,前端和后端一起背负了技术上的使命,我们需要作出权衡来背负产品上的使命。一个搜索框,功能实现可以很简单,要做好体验也会很复杂,一个前端的竞争力,往往就体现在这些细节。阿里的产品长久以来被吐槽体验,我想这些都会逐步改善吧。
思维高度
偶然间翻到4年前写的文章,那时候还在学校做项目,有这样一段话:
永远对自己有信心,对自己的项目有信心。对自己的付出应该要有一种自豪感,因为我们所做的东西是有益于这个社会的,而正是这种自豪感,让你怀着责任感一直做下去,并且会做的越来越好。
我很吃惊,我当时竟然能说出这样的话!(明显像是老板对员工说的)
我很惭愧,我来公司做了这么多项目,却没有一个萌生过这种想法。(明显自己还是底层农民工)
老实说很多项目我还持怀疑态度(比如当听到要在微信中做传播时),业务方自己有时也没有底气,我们只是向着 KPI 拿需求办事,思维层面上自然显得被动。说到底,我是把自己当成了“资源”,而不是一起合作的“人”,这样业务方也只会把你当“资源”,这样自己的思维方式就会一直停留在任人差遣的“资源”阶段。而之前之所以有那样的想法,因为我们是整个项目的缔造者,产品就跟自己的孩子一样,而现在,自己更像是一颗螺丝钉。
我是在一本正经的瞎说大实话,然即便如此,公司的体制限制了你的工作就是一颗螺丝钉,但是自己的思维却不能被限制于方寸之间。员工跟老板的思维高度肯定是不一样的,从员工到老板的过程需要不断跨越思维高度。成长的过程,不仅是技术和能力提升的过程,也是思维方式不断刷新的过程,不以更广的思维方式去思考问题,又如何能站在更高的高度去看世界?
面试
面试是一个挑选人才的过程,对自己来说也是一个共同学习和进步的过程。我会尽我所能,到手的每一封简历都会认真看并熟悉其中的技术点,争取能对候选人有一个较为客观的评估。我没想到这么快就能参与到阿里的面试流程中来,这也算一个挑战吧。自己在这方面还是新手,需要多学习。
另外多次下来,一点感受:
- 基本功真的很重要,就算工作数年的人也未必扎实;
- 技术人得对自己的职业有所规划,没有成长便是退步;
- 看到一些很有潜力的同学因为技术能力暂时不过关被刷真的很可惜;
- 简历评估阶段面的问题都很基础啊,你们面试前都不刷题的么?
机会总是会给已经准备好的那些人,一起加油。
总结
做总结也是职业规划的一部分,这能让我清晰的认识到自己所处的位置以及下一步的方向。本来是打算在阿里呆满三年就出去浪的,这几天一冲动看来得多呆两年了,这也为自己的职业生涯增添了许多挑战。十年磨一剑,好好打铁,迎娶 UED 指日可待。
这种毫无干货的文章我争取一年只发一次。
2017.07 杭州