三本书影响一个人

清理书柜的时候,无意间发现了一张1999年的老照片,“一回忆著一拈看,便似花前重见面”。那是在加拿大安大略湖畔雪地里的照片,勾起了老码农的回忆。

象牙塔的年代里,作为一个无线通信专业的学生,在了解了《电磁场》和《复变函数》后,对谐振腔滤波器兴趣浓厚,尤其在高频的世界,难以辨识的L和C。

喜欢硬件的年轻人,压根看不起写代码的(可能很多其它专业的童鞋也是如此),现在想来幼稚的很,鄙视链本身就是一种不成熟的体现。毕业后的第一份工作是做无绳电话对PTSN的硬件接口,7号信令,随路信令和T1接口,现在还能想起用于跳线的那些面板和架子。但是项目结束后公司再也没有类似的硬件项目了,就安排我去做测试,一做就是两年。当时是测试 windows上的程序,分为功能、性能、健壮性、互操作性、安全性等13个测试的领域。功能测试要求的是细致和耐心,但是鼠标在屏幕上点来点去实在是无聊之极!

“倚楼极目深愁绪,更对东风语”。如何让自己从繁琐鼠标点击中解脱出来呢?开始思考自动化测试的方法,最终找到了MSTest—— 微软的一款工具,

后来据说这个产品被Rational 收购,Rational 又被IBM收购,现在不知道是什么样子了。通过MSTest可以将手动点击事件记录成VBScript的脚本, 然后修改一下VBScript的脚本文件就可以自动执行测试。程序的力量体现出来了,几天的任务半天搞定,一下子提高了工作效率。但问题同样接踵而至,客户端测试的时间大幅缩短,服务器侧的开放还没完成,影响了客户端的测试,怎么办?

还是要通过代码解决,开始尝试弄仿真器,相当于用 VC 实现现在的mock 功能,自己写VC的程序完成服务器的相关协议接口,实现客户端的隔离测试。

“儿童散学归来早,忙趁东风放纸鸢。”从繁重的测试用例中解脱出来,就有时间参与了公司的一个预研项目,把传真机收到的传真自动转成电子邮件。其中主要是对硬件dialogic 卡的操作,通过硬件板卡实现对Fax的收发,直接对driver进行读写,又一次激发了自己的兴趣。

最终在MFC中用多线程操作8端口dialogic卡,实现了邮件与传真的互通,记得那已经是1998年的事了。

“长鬃蓝履披风,石亭幽径葱葱,垂枝涟漪倒影。君将行,远在天涯勿忘秋鸿。”照片上的那一年,我被派到加拿大工作半年,开始学习使用 Java 1.2做Web程序,整个项目好像就我一个Java 的菜鸟,一个从0开始的菜鸟。大概是因为周围全是C++/C 的高手,大家看不起那时的Java,鄙视链无处不在。幸运的是,我遇到了一个真正的高手——一个前南斯拉夫人 内内得.科瓦切维奇。

“高山仰止,景行行止”。在开始几天的例会上,听到大神对RMI 和ORB的应用分析,除了感觉云里雾里外,就只剩下敬仰了。第一次被大神问到的一个问题是:

“why for such codes?” (这块代码为啥这么做?)

这样实现这个功能不对么? 我给大神看了代码和程序运行的结果。大神不置可否,只是甩给我一本书 《设计模式》。 英文版的图书,对自己是极大的挑战。由于没用笔记本电脑,只能在办公室里打磨,大部分的午夜前都耗在了工位上,才知道程序可以这样设计的。

当自己的Java Web 可以运行的时候,发现没法 和 C++的程序 一同编译构建,怎么办? 大神还是啥也没说,又甩来一本书 《advanced unix programming》。真实一本比一本厚,这本书现在已经出到了第三版。

"合抱之木,生于毫末;九层之台,起于垒土",于是,开始操控 shell 和 makefile, 习练各种system call的使用,原来操作系统可以是这样的。

Java Web的程序需要与C++的功能服务通信,进程间通信主要是网络通信。这实际上是一个分布式系统,基于Corba 的体系结构,了解了当时的Orbix实现,自己对以后出现的web service 乃至REST API一点也不觉得意外。大神看过我的code,没有告诉我怎么改,还是老套路, 一本书《tcp ip illustrated》,只是当时是第一版的。

“纸上得来终觉浅,绝知此事要躬行”,破除了网络通信的神秘感,实际上,理解用socket直接编写协议栈,再往上的协议会觉得举重若轻。当磕磕绊绊地完成了基于Web 的管理运营平台时,居然从编程中感到了乐趣。

那是半年左右的时间,可能是自己成长最快的时间,就这样站到了程序员的行列,正像照片中的那样,学会了在雪地中的思考。从成为一名码农到现在,一晃就是20年了。庄子说,“人生天地之间,若白驹过隙,忽然而已.” 但是,老码农还是觉得:

  勤学如春起之苗,不见其增,日有所长。 
辍学如磨刀之石,不见其损,日有所亏。 
2