我记得 2007 年那时候我们还在成都,做 J2ME 手机游戏,那时候手机内存很小,诺基亚只有 800K 内存,摩托罗拉和索爱的高端机器有 1MB 的内存。为了节省内存,游戏的所有素材都只能用 8 位色来绘制,总共 256 个颜色,原画师用 255 个颜色,剩下一个纯绿色用作透明色,J2ME 遇到纯绿色就会跳过不绘制,当做透明色。
其实做 J2ME 游戏相对来说还是很简单,做好贴图和坐标转换,做好碰撞和逻辑分支处理。稍微有点挑战性的就是你要建立一个对象池来管理精灵,因为手机很慢,不用对象池,一旦对象过多(比如子弹)触发 JAVA 垃圾回收,就会导致游戏卡死,所以我们开发时都会在屏幕右上角实时显示内存剩余空间,1KB 1KB 的写代码。第二个难的是动作编辑器,其实就是一堆精灵的组件先做动画生成,再根据帧数频率记录坐标轨迹,导出多维数组,游戏到关卡触发条件时回放坐标数组即可,比如特种部队直接从房顶跳下入窗这种游戏场景。
做了 2 年手机游戏,其实很快就没啥技术挑战了。那时候喜欢在家里折腾 Linux 和 Emacs,这俩货可以无穷无止的折腾,折腾过程可以学到太多技术,比如系统服务怎么运行的,文件概念做一切编程的理念,elisp的动态热替换技术…….
做出决定去东莞的起因是,我还是希望开一家属于自己的软件公司,我老婆提议先赚钱做积累再回头实践理想。
这样我们就去了东莞大朗(现在华为松山湖附近)搞服装。第一天去心理还是有落差的,东莞很多生意都在一些不起眼的小巷子里面,虽然每家都是百万富翁,但是大家生活的环境还是很艰苦,你不知道的以为是贫民窟。在这种99.9999% 的人都做服装生意,你一个人玩电脑的环境下,我觉得最有挑战性的是心理挑战,你没法和周围的人交流,你的精神世界是那么孤独,不知道自己要学习到什么程度才能熬出头,也许一年,也许三年,也许十年,也许一辈子就这样了……
但是生活要继续,白天主要工作就是背毛料,修横机,倒毛(给毛料上腊,减少灰尘也顺便检查线疙瘩,线疙瘩会导致横机针头堵塞断针),打包交货。
工作时间一个月只休息一号这一天,每天 6 点起床,半夜交货,休息是都凌晨 1 点到 2 点。虽然我不赞成加班的制度,但是有时候我看到推特网友遇到点困难就唉声叹气的,抱怨这不好那不好,我心里其实都会有一个感觉,太弱了,就这点强度都受不了了?创业赚钱哪有不辛苦的?
那时候白天工作,制衣师傅上晚班(晚班凉快),我就玩我电脑,在几十台横机轰隆轰隆的 100 分贝噪音下写代码。我在那段时间,学会了很多技术,比如 haskell,gtk,x11,perl,各种窗口管理器,无数的命令行技巧,那段时间的成就是用 c2hs 给 gtk2hs 项目贡献了 3000 多个补丁,成为这个项目贡献代码世界第一的开发者,这个记录一直保持了 20 多年。还写了 emacs 的替代品,manatee,一个支持多媒体和多线程的现代编辑器,那时候还没有 Atom。
那时候的我肉身和精神在两个平行世界中,只有走在东莞买肠粉的巷子里,两边的世界会偶尔交汇一下。很多同学说做研发创业没机会,觉得自己不够专注,没法静下心来学习。那是因为你们没有在极端环境下工作过,越是这么分裂的世界,越是考验我精神力的时候。
夜深人静的时候,打开终端,绿色代码飞翔于终端浩翰的宇宙,那一刻,哪怕那 10 分钟的时刻都属于我,我的操作系统技术就是在那种环境下,10分钟又10分钟积累起来的…….滴…..滴…..滴……横机又断毛了,针撞了一排,一毫米的针换一下,要换 100 多根,每一根都要看针头断了没,换完半个小时过去了。我那段时间的工作节奏是 10 分钟研究 linux,30 分修机器,写代码到一半怎么办?马上停去修机器,不修机器没饭吃,代码被打断不会没效率吗?我那时候锻炼了人脑堆栈的能力,离开电脑面前先 push 所有状态到脑袋,修完机器后 pop 出来继续,所以懒猫微服的每个 bug 和用户反馈我是不会忘记的,一定会记得。
你们会说这个太励志了,还是人吗?我也是普通人,当坚持不住的时候,我也会打游戏逃避,这种不断打断节奏只能玩 CF 这种游戏。我的很多队友都会吃惊我的游戏打法,上半场会非常夸张的杀敌,但是这个人突然就一动不动了,任别人来家里突突突,因为不动的时候我去修机器了。
就这样坚持了 3 年,2009 年底的时候,deepin linux 项目要启动,啥宏伟的想法都有的时候,就差一个 CTO 了,我离开了东莞,2010 年正式开始我下一段人生的疯狂岁月。