遥想五年多以前的冬天,我那时刚刚入职美团,在团队中认识了很多有才华和能力的年轻人。有一个小伙子就在其“网红”导师的指导下,写了一篇关于移动开发十年的文章。我曾有幸拜读过这篇文章,读罢感觉意犹未尽,也许是因为自己也是移动开发出身,总想着要表达出一些东西来。转眼时过境迁,创业以来,自己的时间相比之前在京城谋生时多了一些,夜晚茶余饭后,便想着一点点地攒出来一篇我眼中的移动开发20年。之所以取名我眼中的,是想先叠几层甲:一是因为自己认知和阅历都有限,远远比不上很多大厂中翻云覆雨的高层,顶多算是一条始终混迹于一线的“老狗”;二是因为每个人的经历曲折各不相同,加上时间如梭,很多年代月份可能比较模糊,也请各位读者见谅。
20年前,也就是2004年左右,那时候距离乔帮主的ipod Touch也还早了3年。我还用着诺基亚的功能机——这当然也不是我随随便便就能用的起的,我用过的更多机型其实自于波导和TCL。这可能就是国内手机的现状。而我那时候的工作,是为日本客户开发他们的功能机中的软件。也就是在那个时候,我首次认识到了手机的奇妙之处——在现在看起来是大家都习以为常的功能,但是在那个时候着实带给我了不小的震撼,比如说,可以看电影的彩色4寸“大”屏幕、可以通过手机接触就可以传递通讯录信息、还有可以用手机扫描一个看起来密密麻麻的黑白图形就可以获得一串像网址一样的信息……
这些功能使我模模糊糊的意识到了,手机除了短信和电话,还会有更大的发展潜力。在这个时期,我也因为工作的原因,频繁来日本出差。发现了很多日本人在等车时,就盯着那个手机,好像被摄取了魂魄。也有很多类似的发现,自己当时并未多关注,比如那个时候日本人日常聊天通过邮箱沟通,就非常流行用文字描绘的表情(颜文字)来表达一些情感。需求的角度来看,人与人的沟通一直以来都追求更丰富的信息表达。还有那个时候,Java游戏非常流行,我的同学毕业时就曾入职一家面向日本的游戏开发公司,可惜因为后来游戏牌照问题,公司无以为继。这个脚本是多么的熟悉。
那时日本本土的手机绝大部份是由电信运营商向厂商采购,这种保护主义促进了当时手机行业的快速发展,但是同时也为后来 iPhone和 Android 系统崛起后,日本厂商的快速衰落埋下伏笔(当然,日本厂商的衰落是多方面的)。
那个时候,我们老板,我们都愿意叫他主任,经常愿意说的一个话题,就是一款手机的开发成本中,有30%来自于硬件,70%来自于软件。为了节省成本,很多厂商将手机的软件系统进行封装和分层。使得很多功能可以外包和复用。那个时候一个新机型的开发时间少则半年多则一年以上。软件部分一般都是几百上千人的团队参与,当然这还不是全新开发,是基于上一代的相似机型修改(我们一般叫做差分开发)。
那时候使用的开发语言是 C,但是大部分代码都使用了结构体进行了封装,以达到类似于面向对象的逻辑效果。我作为一个新人第一次看到 C 代码原来可以这样写是感觉非常震惊的。这样的写法在构建比较大的工程时,会使得代码的逻辑更加清晰。有些时候我不理解 Base 中为什么有一些写法可以简化,后来我渐渐领悟到,代码是给人看的,很多代码片段看起来似乎作者“傻傻的”,其实是为了后续维护迭代的有意为之。
因为从事的是移动端的开发,很多功能需要运行在手机上。因为模拟器的功能往往非常有限而且滞后于开发流程,所以有大量工作其实是在开发版上完成的。整个系统的分层其实做的并不是怎么完备,很多上层的开发工作往往也需要依赖整个 Base。那么痛苦就来了,通过编译运行来检验编程结果会非常非常费时间,往往需要几个小时的时间。所以一个比较有效的方式是一次修改多个 bug,同时填入尽可能完善的 log。这样在一次编译后的运行就可以发现尽可能多的信息来帮助自己解决问题。所以很多老程序员其实对于 debug 的依赖并不多也是因为这个习惯所致。
因为外部的依赖都是在 Base 中,因此为了提高编程的效率,很多人都会导入 Base 后进行编程,所以那个时候对于 IDE 的依赖就非常非常弱,很多人也都习惯了 VIM,Emacs,Source insight。因为微软的 VisualStudio 比较占用内存,而且也无法支撑大代码 Base 的导入。
未完待续……