
二十年的程序开发之路之求学篇
发布时间:2006-03-02 12:41:42 来源:BLOG 网友评论 0 条 二十几年前的事了,听起来可能像是金庸的武侠小说,突然出现一个师叔师伯辈的人物,讲一些武侠旧事。其实我是喜欢平铺直叙,不喜欢多用形容词,不喜欢英雄人物。
大学: 纸上谈兵
1978 年二月的一天,苏州市三中,开学第一天。 教务长进来打断老师的讲课,掏出一纸公文,郑重其事宣布我被大学录取了。这可是文革后的第一次,市三中当年唯一一个。他们让我打电话给老爸,我说不会打。回家老妈问这么早回家了? 我说告诉你一个不坏的消息...,找了一个五十年代的旧木箱,漆了一下,就成了我的行李箱。
两天后我离开了我的第一个家苏州,来到上海机械学院 (后改为上海工业大学, 上海大学),工业自动化系,电子自动化专业。过了几天,我被换到电子七七一班,当数学课代表。要求换我过来的是学习委员蔡国钧,六十年代年代的高中生,比我大十几岁,我们都叫他老蔡。
系里最强的是数控机床,刚开始根本不知道计算机。上完数理逻辑后就讲6800芯片,不知什么时候系里来了一台DSJ-130机,要用手拨进十三条指令才能用。
高级语言上的是 ALGOL-60,Pascal 的前身。学校计算中心有一台 DSJ-709 机,可以用 ALGOL-60。我们就成立了一个编程兴趣小组, 每星期可用几个小时,不过这样贵的机器是不能碰的,我们要把程序写在纸上,打成纸带,交给管理员,等候运行,等打印结果。有时可能是语法错,就要去修纸带,为了省纸带, BEGIN END 要写成 $B$$E$,每个人要成为读纸带,补纸带专家。
那时的老师其实也没怎么用过计算机,全靠自己悟,再教我们。数据结构,操作系统,算法分析,编译教得很不错。上海还是有人才的, 而且上海人做事比较认真,不过离散,数据库的老师就很差。
编译是一个很年青有才的老师,沈祖梁,毕业设计他带了九个人,做三个语言的编译/解释系统: Forth,Lisp 和 Pascal。我想当时计算机界教授中也没几个知道这三个语言的,我做的是 Pascal 编译。
当时机房有了一台微机: Cromenco, 用CPM操作系统(DOS 的前身),八寸软盘。每天开机二十二小时,休息两小时。我们就派班轮流用, 有时还要抢。找了一些日文的资料, 几个月后做出了 Pascal 打 内部代码 p-code 的编译 和 p-code 解释系统,可以运行简单程序。
居然找到大学毕业论文的程序, 近二十五年了。
....
BEGIN (* MAIN PROGRAM *)
WRITELN('PASCAL/E COMPILER VERSION 00。01 ');
WRITELN(' 1981 SHANGHAI UNIVERSITY OF TECHNOLOGY ');
INITIALIZE;
IF ERR THEN EXIT;
CHECKNEXT(10,0,35); PUT(T1); PUT(T2);
CHECKNEXT(1,0,33);
NEWSYMB(NAME,ENDPROC,-1,0,0,0,TRUE); PUSH(PSTB);
CHECKNEXT(4,7,21);
GETSYMBOL;
BLOCK;
CHECK1(4,6,36); PUT(T1); PUT(T2);
REPEAT PUT($1A) UNTIL PNT2=1;
CLOSE(FCB2,RESULT); IF RESULT=255 THEN ERROR(65);
CLOSE(FCB1,RESULT); IF RESULT=255 THEN ERROR(64);
。。。
END。 (* PASCAL/E COMPILE *)
真是写得看不懂,不过这就是 1981 的水平。
考研时间到了,上海工大没几个研究生名额,所以最好的学生都往外校发展。我选了南京大学,徐家福,据说他有南霸天的外号,借了南大的数学,数理逻辑,操作系统书恶补,居然考上了,回想起来有点后怕, 考不上不知会分配到那里。
回首大学四年是我人生最高兴的四年。大学以前的人生我是不合群的'白专典型',以后的人生再也没有这么多的人关心, 爱护我。当然大学四年让我成熟,自信了很多,可以在各种环境下发展了。
第一二年, 数学学得不错。 可以和数学班的学生争高低。
第二三年, 英文学得不错。 可以上全校长唯一的英文口语班。
第三四年, 软件学得不错, 可以考上南大徐家福的研究生。
在我的心中, 上海是我第二个家,所以我的第二本书会献给上海的朋友。说起上海的朋友,我还和他们长有来往。去年还见了蔡国钧(上海亚太)。
研究生生涯
八二年春天,我离开了上海来到了省城南京。南大计算机系有两大派: 徐家福,孙钟秀,就象武当,少林。徐家福做语言,编译。孙钟秀做操作系统。徐家福的第一大将是郑国粱,当年他们一人招三个研究生。但郑国粱不久就去N.Wirth ( Pascal 发明者) 那进修,六个人就全被徐家福带。
当时重点项目是国产机 DSJ-200 系列系统软件,南大管语言,编译; 北大(杨芾青)管操作系统。高级语言是 XCY (X = 徐, C = 仲崒豪,Y = 杨)。
我的第一个任务是做一个编辑程序。当然不是现在这样的编辑程序,因为 DSJ-200 没有银幕。所谓的编辑程序是读进一个程序纸带,再读进一系列编辑命令,最后打出该程序的纸带,比手工补纸带先进多了。
我的第二个任务是写一个编译优化器,提取公共表达式,循环优化之类; 在当是算是较复杂的了。当然读了不少书,杂志。有时还专门出差出上海图书官找资历。
第一二个任务用的是 XCY 语言,所以要用 DJS-2xx 机,但南大没有,所以我们在南大只能有纸上谈兵。准备就绪才去常州和大连上机。一年里我们要去大连出差几个月,在大连海洋学院上机。晚上住在旅馆,白天坐车去学校,在学校食堂吃饭。那时的饭里用很多米虫,开始还想捡出来,后来就顾不上了,倒是营养不错。周末去海边玩,挖海红回去煮。在大连还碰到杨芙清的第子,邵维忠,方裕等来调试他们的操作系统。回南京时我们想坐海轮,六个人轮班排了一天一夜才买到票。
从大连回来后,不知为什么 DSJ-200 系列国产软件的事就无影无踪了。可能是科研项目完成了,可能是去大连出差太贵太麻烦了,可能是上边放弃了国产系统软件的路。
反正我就知道导师让我换方向,不做优化,改做软件复杂性度量。第一步就是看资料,当然全是英文的,看了就写了一份分析报告。徐先生觉得不错,就推荐给朱三元,不久在 <计算机应用与软件>上发表,第一卷,第六期,1984,不记得那了几块钱稿费。
接着我就想设计一个更好的软件复杂性度量,就乱看书,读了所有我能找到的认知心理学(cognitive phychology) 的书,设计了一个基于认知模型的软件复杂性度量。然后就写程序实现,用学生做实验,再做些调整,分析,写论文。徐先生又觉得不错,就让写英文文章,作为他出国讲课的题材之一。中文论文最后在 <计算机研究与发展>上发表,1987 年第 8 期。
硕士也就如此,帮老板干点活,读几门课,选一个题,做调研,设计点新东西,实现,写论文,答辩。国外的硕士也不过如此,有的更简单。
当时南大有了几台日本的AI m-16 机,用 UCSD-P 系统,终端属于智能终端,是联合国赞助进的。毕业设计就用 PASCAL 写了。好象当时没用符号调试器,所以我还要自己把屏幕分成两部分,上面显示调用栈。
南大的教授,徐家福比较重基本概念,条理; 孙钟秀讲科很不错,张福炎很实干。
师兄弟中,大师兄是许满武,当时在读博士,中国软件的第一个博士。和我同一届的徐家福子弟是: 吕建(南大), 章翠(UC-DAVIS), 何旭东(Florida International University),叶晓风(南大),陈小俞。
章翠提前读博士,和她同一届的是北航来的赵沁平(教育部)。所以老赵算是我师兄。
正式写论文时被告知我的字难看,只得叫GF代劳。论文答辩是八四年十一月,哪时我快到二十四周岁了。毕业后就留在南大了,当时硕士还是紧缺商品。
接着就考博。当是徐先生在写百科全书,脑里尽是各种术语的定义,幸好师妹戴敏透露天机,让我读了她的一篇文章,总算考上博士生。和我同届的博士生是吕建,周文达,戴敏,陈小群(吉林大学来的)。
当时赵沁平在读博士,可以有硕士生给他写程序,闲来无事就教我们下围棋。开始我们都不会,他就让我们抓一把棋子,随便放,然后再对下,最后还能让我们四到六个子。在机房里我就用 BASIC 写了一个可以自动提子的程序,可以忙里偷闲。
老赵长我十二岁,当年在工厂穿过电脑的磁心存储器; 孙长老赵十二岁,徐长孙赵十二岁,一串老鼠。
当了三个月的老师,不记得干了什么,八五年二月有回去当学生,攻博。老规矩,先帮老板干活。
前面提过,徐,仲,杨三位中国软件元老设计过 XCY 语言。PASCAL的发名者又开发了MODULA 和 MODULA-2。所以中国语言当然也该继续发展,于是就有了XCY-2。XCY-2 语言早已设计出来了,难的是实现。南大以前在 DSJ-200 系列上试图做过 XCY-2, 硬件软件环境都很差, 没做完。
有了新鲜血液,老板就让我们在微机上重新实现 XCY-2。人员是四个博士生: 我,吕建,周文达(提前读博),陈小群;三个硕士生:肖宁,吕建国,还有一个女生。居然派我当头,钱树人老师监工。有次碰大大师兄许满武,请教一番。师兄让我看三国,然后在分析复杂的关系,总之就是说凶多吉少。
做编译么,老板想的是用汇编写,生成汇编。仔细分析一番,我们根本不懂微机汇编,而且工作量巨大。我就跟老板磋商,改为用 PASCAL写,生成P-代码,和我大学论文相象,但要求复杂点。这样做,是知道能行的。通常徐先生是人人怕,谁都敢骂的人。我是很能坚持我坚信的东西的人,最后老板同意我的方案。于是开始总体设计,详细设计,还写了不少文档资料。编程时,吕建管分块编译,我写代码生成,陈小群管调试程序,文达老弟好像做语法分析。三个硕士生写编译测试系统,也就是一大堆例子程序。八个月完工。
请来一堆人鉴定,杨芙清,钱家骅,陈涵生,朱三元等,都是老板的朋友,号称国内先进水平。鉴定会上所有的报告全是弟兄们作的, 我就来了一个良将无功。
只个项目对我的技术,领导,交际能力都是很大的锻炼,甚至我还要管机房。进口的机器插口不一样,只能忍痛剪了换掉; 老板后来知道了还小有不满,组员有困难当然要权利帮助。总之,我们瘦了很多,但按期完成了一项国家 "六五" 重点攻关项目。
第二年 (1986) 春天,北京开了一个盛大的 '六五' 成果展览会。南大计算机系带了几个成果去,我管 XCY-2,带了一台长城 520 微机 (DOS 机, 也可以用 UCSD P-系统)。 第一次坐飞机,机票才 76 圆。机场说微机要托运,我就胡里胡涂说那是用三万大洋买的; 结果运费惊人,我只能改口说机器坏了,送去修。飞机下降时,耳朵痛的要命, 我发誓以后再也不坐了,那知到以后越飞越多, 越飞越远。 So, never say never。
展览会好象开了一个多月。 我写了一个自动表演程序, 但还是一刻不停守在那里向人介绍。目的当然是想 '推广应用',结果不过是 '不了了之', 原因可想是 '闭门造车'。
有一天展览会闭馆,有大人物来指导。真的见到了一大堆有头有脑的,其中就有赵大人,有照为证:
一晃二十年了。
快结束时,徐家福,孙钟秀请我们大餐一次烤鸭。
回想起来,XCY-2 是对我很大的锻炼,也是我管人最多的一次。不过项目刚下来的时侯当然不是美差, 而是苦差。
武侠小说常有掌门人有人个中意的弟子,美差非他(她)莫属。不过苦差练人,所谓塞翁失马,安知非福。
各位看官, 想看看二十年前中国的程序员?
XCY-2 全体成员:
从左到右:
- 周文达: 南京 苏福特
- 陈小群: 下落不明
- 我:
- 吕建国: University of Windsor, Canada, http://davinci。newcs。uwindsor。ca/~jlu/
- 吕建 : 南京大学, 博导, 计算机软件新技术国家重点实验室主任 http://cs。nju。edu。cn/cs2/shizi/szlvjian。html
- 曾竟红: 想了半天, 大概是的
- 肖宁 : 美国
我们三个人一起做一个项目,陈小群,戴敏,我。吕建生病延误。戴敏当年是老板的得意弟子,用工,能写,能说会道。那几年,只要一提起南大计算机系,就有人回问起戴敏。国不可一日无君,所以我们小小的项目也要有个头。老板说,因为我们是两男一女,所以头就是戴敏当比较好。
先设计软件规范语言,用的是 Abstract Data Type 和 一阶谓词逻辑,后来称为 GSPEC。接下来就是实现,戴敏管验证系统,我管转换系统,陈小群管规则库。戴敏比较'幸运',有人帮她写程序。小群常常抽烟,想着软件自动化规则库有多难做。我总有读不完的书,写不完的程序。
在做博士论文前,我读过很多人工智能的书,那时很多程序是用 LISP 写的。于是我就写了个 LISP 解释器。那时很时髦的是 PRODUCTION SYSTEM,规则匹配推理,在加我做过编译优化程序,加起来就有了软件自动化转换系统的基本构件,慢慢系统就成型了。
找到 NDAUTO 的原程序 (日期: 1987-8-7 16:07, 语言: Pascal)
Function Applyrule(rul: ruleindex;
var para: paraary;
parano: integer;
enviro: cellindex): cellindex;
{ Return rule matching instantiations of RUL and PARA }
var cond,rslt,ptns,bind,matchset: cellindex;
test,head: cellindex; i: integer;
begin
ptns:=rulearea[rul]。patterns; enviro:=cons(enviro,nilsy);
for i:=1 to parano do
if match(car(ptns),para[i],bind)
then [ ptns:=cdr(ptns); enviro:=or_composition(enviro,bind) ]
else [ applyrule:=nilsy; return ];
cond:=rulearea[rul]。conditin;
cond:=or_substitute(cons(cond,nilsy),enviro);
matchset:=nilsy;
while not isnull(cond) do
[ cr;
! writestr('Rule Condition : '); putexpr(car(cond)); cr;
if gx_class(car(cond))=evalgxp
then test:=evaleval(s2(car(cond)),s3(car(cond)),bind)
else [ test:=singleeval(car(cond)); bind:=nilsy ];
! writestr('Evaluate result: '); putexps(test); cr;
! writestr('Pattern Binding: '); print(bind); cr;
while not isnull(test) do
[ head:=car(test);
if not normalform(head) then head:=ask_user(head);
if equal(head,calltrue) then
[ rslt:=rulearea[rul]。result;
! writestr('Result : '); putexpr(rslt); cr;
rslt:=or_substitute(cons(rslt,nilsy),enviro);
if not isnull(bind) then
rslt:=or_substitute(rslt,cons(car(bind),nilsy));
rslt:=evaluate(rslt);
matchset:=setunion(matchset,rslt);
writestr('Using rule : ');
writestr(rulearea[rul]。rulename); cr;
writestr('Refine goal to : ');
if isnull(rslt)
then writestr('failure')
else [ indent(+8); cr;
while not isnull(rslt) do
[ putexpr(car(rslt)); rslt:=cdr(rslt);
if isnull(rslt)
then indent(-8)
else writestr(' or ');
cr
];
pause
]
];
test:=cdr(test);
if not isnull(bind) then bind:=cdr(bind)
];
cond:=cdr(cond)
];
applyrule:=matchset
end;
最后,戴敏论文写的是 GSPEC软件规范语言和验证系统,我写的是转换系统,从 GSPEC 语言自动生成pascal程序,系统命名为NDAUTO。有请来一群大人物鉴定,答辩,小群未能毕业,后来还有更多博士生没有毕业。我博士毕业是八七年九月,快二十七岁了.
有关 GSPEC 和 NDAUTO, 可参看徐家福,吕建写的<软件语言及其实现>
http://www。sciencep。com/sciencep/publish/bookdetails。php?searchingbookid=4273
第十章 软件设计规约语言GSPEC之设计
10·1 语言设计综述
10·2 GSPEC语言
第十一章 软件设计规约语言GSPEC之验证
11·1 引述
11·2 TREEL验证技术
11·3 ADTL验证技术
第十二章 软件设计规约语言GSPEC之实现
12·1 抽象数据类型实现技术
12·2 NDAUTO系统
毕业后,就留校了。博士当时非常稀有,上一届, 赵沁平回了北航(后教育部),章翠去了复旦(后 UC DAVIS)。去那个教研组我就没有选择了。 听说我是'卖'给了陈世福教研组,身价是十二万,还是二十万科研经费, 赞助徐家福的软件重点实验室。不过我还是先干了几个月, 把 NDAUTO 系统从 PC 移植到 SUN-3 工作站上。戴敏当然就留在徐家福教研组,俨然是第二代掌门人的样子。移植完后,我就想走了,戴敏劝我留下,我说再干下去可能就要吵架了。谁愿意在赏罚不明的环境下成为纯干活的。就象 God Father 里说的, it's not personal, it's bussiness。
于是乎, 五年半学徒, 三个月帮工, 我就里开了徐家福教授。
五年我的收获是:
1) 徐家福的用功的精神, 清晰的条理。
2) 上了几门课。
3) 读了无数的书, 计算机系图书馆很多书都有我的借书记录。
4) 写了不少程序, 虽然当时不写程序也能的博士。
5) 得了两个学位。
6) 没花父母一分钱。
7) 和同学的切磋。
8) 跟老赵学了围棋。
又一次我回到母校上海工业大学,英语口语班的老师大吃一惊问道,"你还没有出国?" 其实这五年我基本没有想过出国。有的一两个机会当然轮不到一个外校来的人,'人和'要重新建立。据说更多的机会是被徐家福挡住了,跟本没到系里。倒是省了不少学 TOFEL,GRE 的时间。
讲工作前先说说同门师兄弟的后况。大师兄许满武后去欧洲进修,现在南大当教授。二师兄赵沁平去了北航,九五年见过一次,大忙人。师姐章萃去了复旦,后去 UC DAVIS,现为教授,用中国的学位在美国当教授不简单。去年她来西雅图,送了一本我的书给她,特高兴。 戴敏后因出国和老板闹翻,无影无踪。我和吕建私交不错,吕建现为博导。 何旭东书没读完就公派出国了,现在 Florida International University。 叶晓风分在计算中心。陈小俞先去了南工。陈小群下落不明。周文达在苏富特。吕建国现在 University of Windsor。 肖宁用一书包的钱赔陪了国家十年培养费,出国。
离开徐家师门前,老板问我想不想读博士后,不过要去北京,好像是北京有一个教授想跟他交换一个学生做博士后,不过当时我已经怕读书了。
推荐阅讯
- 一个程序员如何月进万金的?
- 月薪3200 博客网架构师艰难浪迹于北京
- 一个大学生的感慨:从招聘看中国软件业
- Hibernate之父Gavin King
- 中国程序员的地域分布图
- 编写最酷的C语言代码
- 一个硅谷小程序员的故事:漫画闯天涯
- 一个大学生的网页设计生涯
- Spring之父Rod Johnson
- 微软员工开的餐厅
阅读排行
- 1.一个三流学校程序员的奋斗!
- 2.你该学什么程序语言
- 3.一个中专生的程序员之路
- 4.月薪3200 博客网架构师艰难浪迹于北京
- 5.如何成为一名Java初级程序员
- 6.成为编程高手的八大奥秘
- 7.10岁学编程 拥有19项专利的女程序员
- 8.一个程序员如何月进万金的?
- 9.程序人生:我刚工作的那些年 A
- 10.一个软件测试工程师20年的地位浮沉
专题教程
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册
- Picasa中文版_Picasa教程 专题:清除流氓软件
- Firefox专题 seo搜索引擎优化专区
- 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
