工作六年的前端开发在想什么

今年是工作的第六个年头,从事专职前端开发也有四年多了。先后换过两家公司,从后台开发逐渐转到专职Web前端。

一开始我是微软.Net阵营的开发者,这源于大学时代的偏好。那个时候,在Windows平台上开发桌面应用和Web应用,.Net Framework有着不可比拟的优势。优雅无比的C#语言加上宇宙第一 IDE Visual Studio,简直是软件开发领域的倚天屠龙。借助可视化的开发工具,随便拖拽几下,加上几行代码,一个桌面软件就出来了,Web开发也差不多。这也导致了很多程序员的误解,认为用 .Net 开发无非就是拖控件。其实,这只是浅层次的认识。可视化的工具只是为了方便界面布局,提高开发效率。你完全可以不通过拖控件,而是用代码实现所有界面元素的布局。只是代价比较大,你认为值得吗?《荀子·劝学》里有句话说得好:“君子生非异也,善假于物也。”我们的最终目的无非是为了又快又好地完成开发任务。

大学时QQ上有一款休闲游戏叫《大家来找茬》,看室友玩了几次,于是突发奇想,能不能写个软件,自动找出两张图片的差别呢?在做之前也去网上找了下类似的工具,大部分都操作不方便、识别率不高。经过几天的折腾,终于做出来了。核心技术就是图像处理,加上键盘钩子。刚好当时有图像处理课程,这也算是学以致用吧,哈哈。后来还把这个工具放到网上供别人下载,几个月时间下载量好几万。然后就动了点小心思,在界面上加了广告,并且有付费去广告的功能。没想到后来真有人给我转账了,这大概是我在软件开发上赚的“第一桶金”。(或许应该叫“第一桶铁”,钱太少了╮(╯▽╰)╭)不过貌似不太光彩,游戏作弊o(╯□╰)o

毕业后顺成章地从事 .Net 方面的开发工作。当时做的是产品的后台管理系统和在线办公系统。由于是内部系统,用户量非常有限,技术含量就没那么高。基本上是一些数据的增删改查,以及Web界面上的东西。那个时候 jQuery 还统治着 Web 前端开发的半壁江山,市面上充斥着海量的 jQuery UI框架和插件。学好 jQuery 也就能解决一大半问题。但我意识到 jQuery 不能解决所有问题,原理性的东西还是要懂的。比如JavaScript 语言,DOM 操作,CSS 规则等。

学这些东西不难,难的是找到用武之地。由于工作上开发的系统都是对内的,整个公司也就那么几百号人,就算做到极致也难有跨越性的提升。做了大概两年后,我开始寻找别的出路。

然后就进了一家做金融服务的外企。当时选择这家公司是因为工作内容刚好契合我的技术背景:一部分.Net 桌面开发,一部分Web。做了半年桌面开发后,开始全面转向 Web 前端。

当时 Web 技术发展迅猛,各种框架如雨后春笋般冒出来。Backbone, Ember, Angular, Knockout……还可以列更长。还有模块化工具Require.js, Sea.js, Webpack。CSS预处理工具SASS, LESS。简单来说,就是原本用HTML, JavaScript 和CSS 就可以完成的页面开发,变得规模化、工程化。这个转变源于业务逻辑越来越复杂,项目规模越来越大,浏览器的能力越来越强。这也给前端开发人员带来不少压力,似乎每天一睁眼就要不停地学习,生怕错过某个新框架、新理念、新工具。同时,这些新东西也在不停地优胜劣汰,刚流行不久可能就难逃被遗弃的命运。这就是前端开发领域的状态。

在那家公司做的产品是PC端的单页Web应用。项目规模中等,浏览器要兼容到 IE8 。这也是我第一次接触到比较大型的项目,无论是代码组织、模块化管理,还是浏览器兼容性处理,还有项目打包部署等等,都刷新了我的认知。我开始系统地学习 JavaScript 语言本身,研究原型链、闭包、面向对象开发方式,学习 CSS 盒子模型、优先级,研究前端性能优化、Web 安全、跨域、数据可视化技术等等。公司员工每年有1000块学习基金,可以用来买书。那段时间买了很多编程语言、算法、软件工程方面的书,不过也没看完。一年下来,算是可以称自己为 Web 前端开发了。

也是从那时开始,断断续续地在各种平台上写技术博客。最早在博客园,一个以 .Net 技术为主的博客网站,也有不少前端的内容。后来利用 Github Pages 搭建了自己的站点,甚至还绑定了自己买的域名。但是没坚持多久,只写了十来篇。内容基本是自己平时工作上碰到的问题和解决办法,算是一些技术备忘吧。由于英语还过得去,经常看些英文技术文章和资料,有空的时候还翻译过不少。有段时间在开源中国上翻译技术文章,排进月度前十,网站还送了两本书作为奖品。工作之余,也喜欢折腾些小项目,写过简单的股市行情图,也写过 web 小游戏,还给合租的室友们写过AA记账平台。但都是小打小闹,上不了台面。

我是一个不安分的人,一旦发现自己在原地踏步,就开始焦虑。为技能提升慢而焦虑,也为工资拿得少而焦虑。看着周围的同事,好多都是在公司待了四五年甚至七八年的,有的青云直上,但多数还是平平淡淡,安心地做着螺丝钉。内心似乎有个声音在召唤,于是我踏上了新的征程。也是从这时开始明白履历的重要性。当时去腾讯面试过很多次,几乎跑遍了深圳的各大办公点,然而接连受挫。要么是某些基础不过关,要么是项目经验不够格。基础不牢还可以补救,毕竟也系统学习过,只是某些平时用不到的知识点没有去关注,像临考复习一样应付下也能解决。但是项目经验就不同了,有些工具就是没用过,有些工作流程就是不一样,有些技术场景没到那个产品级别就是碰不到,这个就麻烦了。你说你学习能力强,可以马上掌握?不好意思,已经有候选人掌握了。所以,能在毕业后或者一两年内进入大公司学习,优势是十分明显的。当然,能进去也是一种能力。这么多次面试,最好成绩是腾讯某个部门的GM面试。然而不巧的是遭遇架构调整,岗位不需要人了。

后来因为机缘巧合,进了现在的这家互联网金融公司。当时公司处于起步阶段,产品从零开始打造。当时觉得大施拳脚的机会来了。我也是第一次从事移动端 Web 开发,第一次从头到尾掌控一个项目,也是第一次过上经常加班的生活。要知道,在此之前的四年多时间里,加班的次数一只手都能数过来。我不反对加班,我只反对无效的加班。当时的加班显然是必要而且有效的,因为我们要赶在年底发布产品,时间紧迫。由于团队小而精,沟通效率很高,有问题能马上响应、解决。但也由于产品定位不清晰,需求也一直变化,有过多次推倒重来。溯洄从之,道阻且长。这都不是问题,只要有个共同的目标,哪怕艰难险阻,都能一一克服。经过几个月的日夜奋战,产品好歹上线了。作为回报,年终奖金还算可观。

第二年公司人员迅速扩张,由最初的十几人增加到近百人。做事的人多了,加班反而没有改善,这个问题一直困扰着我。技术方面,我也算是独当一面,还带几个新手。我知道,我可能永远也做不成顶级程序员。所以只能退而求其次,尽量把手头的工作做到极致,不断探索更高效的工作方式,多帮助他人。一年多下来,手头负责的前端项目也有好几个,都是从零开始的。现已基本稳定,处于维护阶段。

最近,面对深圳日渐高企的房价,对比稳如磐石静如止水的工资条,我开始思考人生。工作六年的前端开发,该何去何从?经过自己的努力,还能到达怎样的高度?公司的发展和个人的成长到底是怎样的关系?是追求公司的认可,还是但行善事莫问前程?

posted @ 2017-05-13 14:49  李中凯  阅读(1525)  评论(5编辑  收藏  举报