十月怀胎的代码

貌似我的寒假终于开始了,昨晚11点多的时候终于把程序编译成功,发给了素未谋面的赵博士。

这次的程序颇有威客的感觉,一个老师找到我问能不能帮他朋友做个程序,那还是10月的时候,当时正想找些东西来做做,就答应了,接到“任务书”,哇,眼花缭乱,是一个模拟蛋白酶剪切蛋白序列的程序,其实也就是字符串处理,稍想了一下,就接下来了。

字符串处理本来是python阿perl阿这些的强项,无奈太不熟悉,只好操起还算顺手的C++和STL。记得写主算法的引擎大概用了两天来琢磨(也不是全部两天阿,要上课),一个星期就把命令行版本做出来了,然后跟赵博士通了几趟email,也算通过测试了,接下来搞定封装。

当时有点痴迷Linux,想趁这个机会学一下GTK这个“跨平台”的框架,结果接下来一个多月都是在看gtk的文档和捣腾例子程序,为了赶潮流,用最新的glade3啊GtkBuild啊来实现(最新常常意味着资料的不详细和奇怪问题比较多),博客之前的几篇笔记就是那时候的产物。逐渐地,构建界面的程序已经过千行了,而之前C++写的算法不到500行,虽然这个比例还不算悬殊,但也明白到为什么程序员干的是体力活,程序员就是民工。

由于还需要移植到Win平台,交叉编译是在太折腾人了,最后屈服,在vbox里面装了个精简xp用mingw来编,最后程序只有几百K,却要挎着一堆8M多的运行库,全部用rar压缩了还接近3M。(自——我安慰一下,.net框架的运行时库好几百M、java也好几十M……不过大概如果用MFC的话,200多K的文件就搞定了)

这是第一阶段的工作吧,完成的时候都已经12月多了,接下来啃了个星期的课本准备期末考,半个月后再看代码有点恍如隔世,因为接下来还有个功能模块要添加,给蛋白序列做剪切标示。

这个貌似简单的工作可花费了我不少心思,我首先想到的是生成HTML让他用浏览器去看,毕竟css的功能感觉上还是挺强大的,然而试过之后,彻底绝望了,标准的HTML甚至不支持断词(word-break),而蛋白序列就是一个几千字节的“词”。用IE6的hack方法弄了个demo过去,不行,不行!

老老实实回到字符串处理算法上,折腾了几天,最后的代码几乎都是在昨天中午一气呵成的,200多行,虽然算法的雏形n久前就形成,但是实现起来居然得走那么多弯路,唉,难道是年老了,脑子不好用了……

也许如周华健聊创作的时候说的:“正是你努力过了才有机会命中。”,也许就是这个道理吧,写好了一个非常关键的一行if,之前的混乱基本上一扫而光了。外国人把coding也称为art,貌似确实是那么回事儿。

昨晚有点恼人的事情就是有个类初始化的时候的一行无符号0减1导致最后整个程序的内存泄漏(瞬间占用300多M内存),而这个语句本来是修改好的,但是修改过的文件的版本忘了commit到cvs,几乎用了整个晚上来找到这个问题的所在。还有就是发现mingw和gcc 4.2居然有不同(其实也正常,mingw是gcc 的3.4.2版本,但是我这个水平的菜鸟居然瞎老鼠遇上猫),就是一个对象的引用不能在mingw里面特化模板,在gcc 4.2却可以,为此又得改了一通代码,换成用指针来特化,只不过出现了&(*iter)这样有点让人不舒服的参数。

刚刚在别人的博客看了这么个说法:一个女人十月怀胎可以生一个BABY,但十个女人不可能一个月把BABY生下来。做程序做软件也如此,一个人也好,一个团队也会哦,必须得用时间来耗着,代码才出来,而且常常不是老把时间放在盯着编辑器上,做点别的事情,出去走走,思路理清了代码才能顺起来。这算这次实践的感受吧。

文章分类 IT视角, Programming 标签: , ,
One comment on “十月怀胎的代码
  1. roowe说道:

    挖墳=。=

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*