注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > 移动开发 内容正文:二十年的程序开发之路之求学篇

二十年的程序开发之路之求学篇

发布时间: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
  • 曾竟红: 想了半天, 大概是的
  • 肖宁  : 美国
  展览会完了,开始做博士论文。在我们之前,老板有两批博士。第一批许满武一人,做的是基于 BACKUS 提出的函数式程序设计的一种智能机。第二批章翠和赵沁平,做的是基于 PROLOG 的一种智能机。当年最热的就是第五代计算机。到了我们,好象第五代计算机不那样红了,也可能硬件买板子太贵了,就转向做纯软件了,方向软件自动化。

  我们三个人一起做一个项目,陈小群,戴敏,我。吕建生病延误。戴敏当年是老板的得意弟子,用工,能写,能说会道。那几年,只要一提起南大计算机系,就有人回问起戴敏。国不可一日无君,所以我们小小的项目也要有个头。老板说,因为我们是两男一女,所以头就是戴敏当比较好。

  先设计软件规范语言,用的是 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。 肖宁用一书包的钱赔陪了国家十年培养费,出国。

  离开徐家师门前,老板问我想不想读博士后,不过要去北京,好像是北京有一个教授想跟他交换一个学生做博士后,不过当时我已经怕读书了。
相关文章
  • 64位程序开发中的性能优化技巧
  • 64位应用程序开发环境和工具简介
  • 程序开发:目前主流开发技术的分析和总结
【评论】【收藏本文】【打印】【关闭】
上一篇文章:程序员,做军官还是做特种兵?
下一篇文章:我的心声:让程序员成为正常人
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
程序员的灯下黑:坚持和良好心态近乎道
程序员的灯下黑:坚持和良好心态近乎道
一个三流学校程序员的奋斗!
一个三流学校程序员的奋斗!
推荐阅讯
  • 一个程序员如何月进万金的?
  • 月薪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必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载