值得回忆的本科四年学习(10-12)
10. 艰难的项目收关阶段
搬进孵化园的随后三个月内,几乎就是仙剑这个的测试的三个月。我每天几乎什么事情都不干,就是查看测试部的BUG列表,每天都有新的,改了后又老是出现新的问题。同时,上海网星那边的测试也十分紧张,他们对项目的要求十分高,测试周期也特别长,特别是NOKIA 3650,7650这两款机器特别容易出问题。前前后后,我们每天都在跟上海网星那边的人打交道,他们对于这边出现的问题也比较着急,也帮我们查询了一些相关的资料。这段时间可能也是我在公司的最痛苦的时候。每天都被BUG折磨着,几乎看不到尽头了。
直到2004年年底,仙剑这个项目才终于圆满交付了。整个测试阶段十分漫长,而且要求也比魔2严格多了。
仙剑这个项目最后是在2005年5月份登陆上移动梦网的,当时卖出了15块每月的最高价(比魔2还高),但是凭借仙剑的名气,仙剑手机版依然在移动梦网的下载量排到当月的第二名。至于一些专门的手机游戏BBS上,更是早就把仙剑讨论得热火朝天了,而且一些玩家还写了不少攻略呢。不过,我当时自己还放了一把秘密武器在游戏里面,不知道有没有玩家挖掘出来。
仙剑的MOTO版本最后还被上海网星修改后直接嵌入了在中国大陆上市的MOTO E680i手机上。这个版本当时在指欢堂GAME-V的游戏测评中获得了8.9分的不错成绩,同时也成就了这款游戏成为2005年国内最佳的手机RPG游戏。
11. 半年的休整和六级考试
仙剑这个项目完成后,我也进入了大三下学期。这个星期的课程特别多,而且我还要最后一次冲击英语六级呢。前两次英语六级考试我都参加了的,不过因为工作上的事情,耽误了复习,前两次都没过。我早已下了决心一定要获得保送硕士研究生的资格,所以英语六级是一个必备的条件。基于上述原因,所以这大三下学期整整一个学期我都休假了,没有再去公司。
在2005年的寒假放假前,某天,有人发Email,想找我帮他做一个Basic,做到十分受限的嵌入式设备上运行。经过几次Email来往,我决定先接触了一下这个人再说。后来第一次见面谈判过程还是挺顺利的,那个人是做嵌入式硬件的,想做一个Basic,这样可以让一些不太懂程序开发的来写一些简单的业务流程操作的小程序,来控制他做的嵌入式硬件设备。他做的嵌入式硬件基本都是基于ARM7的,小到只有16位的10多MHz,400K内存,这样小的环境就是J2ME都无法嵌入式进去(KVM加核心库编译出来大致有300多K)。而且作为Basic来说,比JAVA语言更简单,更适合一些非专业人事来开发。这个人也是从网上看到我写的关于编译原理技术的相关文章才找到我的。做一个自己的编译器以及解释器是我从高中以来的梦想,所以虽然那个人给的价钱不是很合适,但是我最后还是一口接下来了。
寒假回到老家里,我每天花了半天的时间来写这个Basic。虽然编译原理上对于词法分析,语法分析的算法讲解了很多,但是我用的还是最简单的递归下降分析算法,而且很多都是仿照《编译原理及实践》那本书的Tinyc的代码组织。不过整个工程在语法分析上的工作其实很少,真正要做一个编译器和解释器,需要考虑的问题远远比我们上课时候学的那些编译原理的知识要多。
这个Basic做出来的样子大致和Java运行方式有点类似。先通过编译器把源代码编译成一种中间代码,然后在用解释器或者叫虚拟机来执行这些中间代码。我还专门买了一本《深入JAVA虚拟机》第二版,参考了JAVA的内部实现和一些中间代码的设计方式。网上也有不少的关于JVM的源代码,比如kaffe这些,不过都比较大,要读也困难。后来我从SUN那里下了KVM的源代码,比较小,可以来研究一下JVM的内部实现。
整个Basic这个项目开发进行得不是很辛苦,但是由于是我一个人负责,出来开发的任务外,还要负责经常和人谈判,讨价还价等等,比较麻烦。
网上都说编译器的开发对于程序设计的基本功的锻炼不小,我发现的确如此,里面不光是编译原理中的几个算法,对于一般常用数据结构以及算法也是用得特别多,对于整个程序的框架的考验也是巨大的。我采用的是纯C来开发,如何有效的进行模块划分,就比面向对象的JAVA和C++要困难一些了。
Basic这个项目就在开发与谈判中不断进行着,最后4月份终于拿出了一个可以运行的演示版本,不过运行速度不够理想,而且还有内存泄漏等等问题。于是对方提出了各种修改优化的要求,我也没有办法,只要照办了,不过这一优化,就又花了不少的时间下去。
这段时间,虽然我没有去上班,但是学校的课程很多,再加上一个外包项目,平时还是把自己整得挺累的。为了保送研究生,我顾不了那么多了,考试六级前三个月,我就开始进行系统的复习了。整个复习过程还是挺顺利的,效果也比较明显。我把90年开始的六级单选都被下来了,后来发现好多几乎每道题目都是换汤不换药。模拟考试我也觉得不错,虽然不能保证能上70分,但是考过60还是有把握的。不过没想到的是,我真正考六级的时候,时间却没把握好,整整20多分的题目只有乱写了。
六级考完后,自己也后悔得很,我一直在想,如果当时带上一个表该多好啊。
12. 暑假的ARM嵌入式开发培训
大三的期末考试完了后,暑假学院要安排一个实习地点,本来预计是把全部学生安排到成都的那个托普软件园去。听之前的师兄们说那个地方不太好,生活环境艰苦,而且也学不到什么东西,做来做去都是一些管理软件项目,并不是我的喜好。于是我和另外两个同寝室的同学LUO和Zengcity就一起主动申请到我们公司去实习了,总算躲避了那个艰苦的托普软件园。
除了Luo和zengcity外,还有软件学院的gamefish也被我拉到公司去实习了。一来可以帮助他们多一些实战的经验,二来可以为公司招到更多的程序员。等我半年后回公司后,公司已经发生了不小的变化,除了收购了一个小公司外,本公司的人数也扩到80多人了。
暑假刚开始,我就听到学校电子信息学院的一个老师暑假要开办一个嵌入式软件开发的培训班,听说效果不错,虽然暑假要上班,但是我还是兴冲冲地报了名,结果就是每天上午上这个培训班,下课后就匆忙赶到公司去上班。午饭就是在上班的路上拿鸡腿和饼子解决的。
作为一个学习计算机的学生,绝对不能只是学习如何写程序。计算机是软件和硬件构成的,脱离了硬件,软件什么都不是。但是在中国的大学里面,计算机学院基本上都是抛弃了硬件的学习,而主要是学习软件。虽然这是情有可原的,但是对于硬件一点不了解,对于微机原理这些基本的观念都不知道,那样是不能称为一个专业的搞计算机的。而对微机原理这些基本的东西的掌握如果只是书本上的那些死知识显然也不符合我的学习风格。记得毛泽东思想中有一条十分重要的就是走理论与实践相结合的道路。也正式基于这一点,我就想通过嵌入式培训班去了解一下一个计算机系统更底层一些的东西。
嵌入式培训班的老师是电子信息学院的,培训班的很多同学也都是电子信息学院的,只有我和另外一个师弟Skyinthesea是计算机学院的。多去了解一些其它专业,其它学院,对于自己本专业的学习也是绝对有好处的。
培训的内容主要是基于Linux下开发ucLinux下的程序。老师给我们每个人配了一个开发板,是个基于ARM7的路由器板子,然后我们在PC上的Red Hat 9.0下编译ucLinux的内核,应用程序,通过网线传到开发板上,最后再烧录到开发板上运行。开发板没有配置显示屏,运行的结果是通过串口线连接PC上来显示。对开发板的操作控制也是通过PC上的键盘输入,通过串口传递数据给开发板。这是现在典型的嵌入式开发方式。
嵌入式开发的培训受益颇多,除了ARM嵌入式知识本省,还学了不少Linux下的使用技巧和Linux下的程序开发知识,以及Linux的内核配置,编译,修改方面的知识。
培训总共只有两周的时间,最后一个结业课题,就是在开发板上做一个网站。当然,uCLinux本来就自带了boa这个Web服务器,我们做的主要还是写cgi程序。把一个网站做到路由器板子上还是第一次做呢。