曾经听前辈们闲聊的时候提到过,黑客马拉松应该是起源于FaceBook的一些小活动。每到了周五的下午,开发任务不忙的工程师们会聚在一起,先喝一点啤酒,吃一点小零食,把自己搞high一些,然后大家开始头脑风暴,畅所欲言,吐槽别人的代码,吐槽公司某些项目的架构,并可以随意向其他人的代码或者架构提出挑战,拿出自己认为合适的方案甚至是实现,展现出一种异常开放的技术氛围。必定的,这种routine,这种开放的讨论激烈的碰撞对于提升公司项目的架构及代码质量以及对于工程师自身水平的提高都是非常有帮助的。后来,慢慢的演变成为一种活动,在规定的24小时内,工程师们组队完成一个独立的项目,可以是和公司的业务完全没有关系的,纯粹只是为了实现自己心中的想象力。这个活动将工程师从日常繁重的开发任务中解放出来,应用一些日常工作中用不到的技术,实现一些好玩有趣的事情。
所以,我们comos小队这次参赛的项目“a living tree”,正式基于这个目的来选择的。除了通哥@天枫皓月外,我和bigbigant@赵青-Q都不是专业的前端工程师,而且我们部门前端的开发工作中用也不可能有机会用到“a living tree”中应用的2d引擎cocos2d-js。在参赛前的一周由于部门工作的进度很紧张,也完全没有时间和机会进行提前的准备工作。以致于在参赛当天才现场看cocos2d-js的官方文档(而且文档还很shi),现场向通哥请教js的语法等相关问题,现场踩js中诸如date对象month从0计数这样的坑。。。前半段的开发还是很欢乐的,进度同样也是相当缓慢,以致于本来计划搞到12点左右就去酒店开个小时房睡一会儿的,结果最后真的是一刻都没有睡,一直在代码中。虽然自己已经是快步入三十而立的中年大叔的行列,但是发现自己体力还行,还可以和刚毕业的小鲜肉们一起拼一拼~
“a living tree”是用js引擎cocos2d-js实现的一个H5的养成类小游戏,在一个虚拟世界里属于自己的一棵完全个性的树。试想一棵树从发芽开始,根据真实的历史天气数据的因素进行发芽,生长,开花,落叶等。为了能完全展现天气与季节的变化,树的成长等,我们思考并设计了许多算法,这里就不再赘述了,详细的介绍可以参看http://blog.sina.com.cn/s/blog_794d4b390102vmjn.html。最后演示的时候还是大致完成了我们开始时的设想。
其实,我想通过这次比赛,引申的聊一聊前一段时间在技术圈非常火的“全栈工程师”的概念。有的人认为,“全栈工程师”就是万恶的资本主义进一步剥削可怜的劳动码农的一种方式,让一个工程师做了前端,后端,测试,设计等等的应该细分为几个人的工作,当然这样说其实是个玩笑话。然而,在日益分工精细化的现今社会,“全栈工程师”确实是得到了许多人的质疑。但是,从实际的例子来看,在像FaceBook这样的新兴互联网公司中,项目的人员组成趋向于几个人的小团队,工程师的职责也不仅仅是编码一样,有别于微软这一类的公司,不会一个项目动不动配一个50人的独立测试部门之类的。类似于小团队的这种项目组织方式在实际工作中确实是表现的非常高效的。原因又是为什么呢?
一般我们技术的同学在印名片的时候可能会常见两类title。一类是Programmer,另一类是Engineer。虽然普遍的感觉这两类Title在工作性质上没有本质区别,但是我觉得还是略有不同的。Programmer编码者。是面向代码工作的,只为代码负责,不会对出编码以外的事情关心,如需求的正确与否,测试,以及持续集成等。而Engineer是面向问题工作的,会为了解决任何与项目相关的问题而工作,不止是关心代码写的是否高质美观,还会配有详尽的文档,适当的培训以及便于集成测试的贴心小工具,甚至会学习与业务相关的知识,以便能更好的理解需求以及对需求提出建设性的意见。
一个面向问题而工作的工程师不会因为一个新技术能快速解决当前的问题而不去学习并使用他的,一个面向问题而工作的工程师不会因为要分清自己是前端还是后端而不去尝试了解其他领域的技术基础知识。反观我在日常工作中的状态,也许不仅仅是我自己,也是大多数后端工程师的通病。可能会有一点觉得前端的工作比较浅显,而后端的工作才是高大上的。但是听过通哥几次前端技术的培训,了解到目前智能机,多终端等前端技术日新月异的发展,现今许多以前我们认为很浅显没什么干货的领域已经不是原来我们认为的那个样子了,都在随着时代的发展不断的演进变化中。
因为我也是有一定代码洁癖的人,过去的代码确实也被各位主管和领导抬爱,认可,自认为已经可以写出符合工业领域应用要求的代码。但是其实大多数都是在安静的环境,没有人过度催促及时间不紧张的进度,充分的对所使用工具的理解,最后在历经多个迭代历经打磨之后完成的。然后,就像一个功夫高手上了到了战场一样,没有了平时演武中心平气和一刀一式的切玉劲,一个照面,一颗头就下来了,你过去所积累下来的习惯是否会成为你生存下去的桎梏呢?同样的,在限定24小时的黑客马拉松中,没有了条件让你心平气和的设计架构,没有了机会让你充分熟悉你所使用的工具,没有了时间让你慢慢的debug,甚至再抛开了常用的顺手工具,抛开了自己的电脑,自问我是否还能写出一份自己看的过去的完美代码吗?
一个人,如果认定了要在技术的道路上走下去,那么就需要不断的前行,持续更新自己的知识体系。随着阅历的成长,经验会不断的累计,但是相应的也会更加的守旧,这也许是自然的必然规律,想想我们年轻的时候是怎么看那些老前辈的吧~所以要善于能打破自己为自己设置的壁垒,更加开放性的拥抱新技术、新事物,尝试与新锐的工程师进行沟通。这大概这才是一个即将步入中年的工程师最重要的修行吧。