现在的位置: 首页 > 综合 > 正文

二十多年的程序开发之路: 感受篇—–(袁峰)

2013年08月07日 ⁄ 综合 ⁄ 共 13550字 ⁄ 字号 评论关闭
先开题, 慢慢议.
 
并不适合所有人, 并不一定适合现在的中国, 并不是成功的捷径, 只是我走过的路.
 

1) 基本功: 数学: 关键是分析问题, 解决问题的能力

     小学: 数学最好
       中学: 数学课代表, 数理化全校第一(苏州三中).
     大学: 想考数学系, 没考上, 上了上海工大(现为上海大学). 数学课代表,
          数学竞赛全校第一. 有机会转去复旦学数学, 回来要当老师, 那时已不肯.
 

2) 基本功: 英文: 技术的语言

     小学: 没有英文课
     中学: 英文书读完就扔
     大学: 上慢班, 重 ABC 学起. 三/四年级上全校唯一一个二十个人的英语口语班.
     研究生: 帮老外讲座翻译
     工作后: 出国展览, 第一份软件卖了 $6000 USD.
     来美后: 用英文写书
 

3) 基本功: 软件: 赚钱的金刚钻

 
大学上的是工业电子自动化专业, 系里最强的是数控机床, 慢慢转向软件应用. 有几门课老师还不错. 不过离散数学特差. 专业书很少, 只能看没人看的德文书, 瞎猜. 上机时间很少. 好在最后的课题找了一个好老师, 居然可以用微机, 每天两小时. 考研时就把本校留给弟兄们, 闯南京大学, 徐家福门下. 图书馆的书大概我借得最多. 上机的时间肯定是我最长.
 

4) 内向的好处

 
小时候性格内向. 邻居说等我弟弟有六个女朋友后我才会有. 现在想想, 内向有很多好处. 内向者怕犯错, 怕人拒绝, 怕人看不起. 所以有两条出路: 什么都不做, 或做事特别认真. 我选拔了后者. 认真后就较少犯错, 较少受拒绝, 自信就满满增加, 胆子就满满大了. 从外表, 你可能已看不到内向的我了, 但我自己知道, 我做事还是万分认真.
 
内向的人不太会怪别人, 内向的人会靠自己, ...
 

5) 独立思考

 
小时候老爸爱听新闻联播, 不过他经常自言自语发表评论. 当时是很少有人这样做的. 居然新闻联播也可以分析? 慢慢也学会了什么都分析一下. 不太会轻则信各种人, 各种权威.
 
离开新加坡时找了一个房屋经纪, 他要我签一个合同. 我读了一下, 拒签. 他和朋友说很多人都傻傻的上当.
 

6) 表达能力

 
中学里读了一本老爸夜校读的逻辑书, 论述文顿时很有道理, 可以放到橱窗展览. 做论文, 开展览, 面试, 公司内部的 EMAIL, 报告, BLOG, 写书到处要表达能力. 前几天化了半个小时, 让 Microsoft Press 对我写书的主意感兴趣.
 

7) 观察

 
内向的人的另一个特点是会观察周围的一切. 观察能给你带来很多. 谁是敌, 谁是友, 谁可合作, 谁在想什么, 看别人是如何做的, 读高手的书来学高手的思路.
 

8) 耐心

 
小时没有朋友, 也不愿出去玩. 每天在家化几个小时自学绘画. 耐心练得不错, 可以一个人做一件事作很长时间. 第一本书化了十一个月写, 2000 个小时.
 

9) 据理力争

 
读博的时侯老板让我带几个兄弟写一个编译系统, 要求用汇编写, 生成汇编. 有几个人敢不听徐家福的话?
 
我仔细分析一番, 回报说只能用高级语言写, 生成中间代码 (p-code). 据理力争成功, 八个月完工.
 
 

10) 语不惊人誓不休

 
小时没什么书看, 就看老爸的中国文学史(三卷). 学了一些什么 "语不惊人誓不休", "有感而发", "生当做人杰" 之类的话. 也就是立大志, 重质量, 重长远, 轻短期, 轻小利, 正直.
 
很多事看得较轻, 但我想做的事我会全力以付. 最重要的是重质量, 求深刻理解.
 

11) 老板要我做的

 
老板要我一见事, 我通常不会完全按老板的要求做. 我会想想要求有什么可改进的, 实现方法有什么可改进的, 最后到达更好的结果.
 
特别擅长从中写工具程序, 学新东西.
 

12) 不要找轻松的工作

 
在上海读大学时, 常听人问 "你工作轻松不轻松?". 我最不喜欢轻松的工作. 刚当讲师时, 工作应可以很轻松, 我有空就在编程序. 在 HP 时, 我和同事说我没天要写五十行程序, 把人家吓坏. HP 慢慢将工作移去印度, 我就跳到微软去了.
 

13) 名誉 reputation

 
中国古来多怀才不遇者, 一辈子等人三顾茅芦.
 
要成功, 你必须要非常注意你的名誉 (reputation). 我的方法是建立一个知识丰富, 说一不二, 乐与助人, 没有做不了的事的名誉. 该说话的时侯要说, 该争的时侯要争. 当然要很有把握才行.
 
你的名誉比你的才能更重要.
 

14) 严谨

 
很多人说话很不准确. 一般说来没什么问题, 但是思维不准确写程序就会错误百出. 我力求思维, 说话, 写程序的准确性, 严谨. 当然也不能过分, 信息不全时也要能当机立断.
 

15) 高手是自封的

 
要让别人认为你是高手, 首先你要想当高手, 然后把自己一步步提为高手, 最后再向别人证明你是高手. 关键在你自己: 选好适当的目标, 找到适你的途径, 努力, 调整, 最后达到你的目标.
 
我看很多人都肯努力, 但往往在原地踏步.
 
七年前我写了驱动程序几年后, 好称要写最好的 GDI 书, 然后闭门一年才写晚; 内功大进. 最近又想写书, 再闭门练功.
 

16) 要专还是要全

 
有一句话说: Know something about everything and everything about something.
 
全不太可能. 全而不专者可当启蒙老师. 专要有用. 有些领域的专家可能以没用武之地. 段期来说, 在你的领域专成最好的. 放眼长远, 保证你几年后还是某领域的专家. 要有转向的能力.
 
我专过的领域:
  1. 编译
  2. 软件自动化
  3. 人工智能语言
  4. 汉化
  5. 电脑绣花
  6. HP 计算器
  7. 打印驱动
  8. GDI
  9. GDI+, Avalon
  10. XPS
  11. ?
 

17) 自知之明

 
每个有都有优点和缺点, 优点反过来可能成为缺点或局限性. 扬长补短是较好的策略.
数学和理科数学比不够深, 做理论研究有困难, 但写程序游刃有余.
怕高, ..
学位有三个, 不过都是土的. 在国外的大学研究所就吃力点.
太直, 不会说假, 不适合搞推销, 广告类的工作.
太喜欢技术, 做有些事会觉得浪费时间
太喜欢求人, 做事最好有很大的独立性.
 
总之, 写程序还不错.
 

18) 小老板

 
小时读水浒, 上面说地主有安逸都没心思享受, 到是和尚最清晰. 到新家坡, 我的老板是物理博士, 做无损探伤赚钱起家, 又想转软件, 投资好几年不赚钱, 最后把钱掉走造房子, 员工就纷纷逃窜. 我软件推给一个小老板, 澳洲软件毕业, 继承父业, 管一小小纺织公司, 后悔莫及. 我老板的合伙人在 HP 做的很好, 出来闯业, 推美国的财务软件, 也混的很差. 我去新加坡 HP 的第一个老板, 澳洲双学士, 很聪明, 用功, 和几个好朋有开公司. 十几年后还靠大公司投资, 还住在以前的房子里.
 
小老板很不易. 我佩服他们的勇气, 但还不想家入他们的行列.
 
最佩服的是研究生同学, 孙钟秀的博士, 非常有才, 艰苦几年后总算成功了.  http://www.visviva.com/corporat/executive.htm
 

19) 当官

 
小时最大的衔是数学课代表. 读博刚开始, 导师叫我带兄弟做一 XCY2 编译系统, 四个博士生, 三个硕士生. 这大概是我管过最多的人. 项目做得很成功, 通过鉴定, 到北京参展, 获奖. 作为小头目, 我的任务是管设计, 做最难的编程, 和导师交融, 管机房; 最后作报告全让弟兄们露脸. 我最合适的工作大概就是这样的. 以后的工作我总是从 software design engineer 做到 senior software design engineer, 然后就走了.
在 HP, 官大了就开会多, 不做技术了. 有一个 ABC 同事升成 manager 了, 就号称要把 { 键从键盘上挖掉. 在 MS, 底层  manager 技术还是很强. 有一个 director 居然从 software design engineer 重新做起.
 

20) 炎黄子孙

 
前几天在 CSDN 上受到一条短消息, 和我讨论 "纯民族的感情, 刚出国小资的感觉, 需要记得我们都是炎黄的子孙". 起因是我的中文书上写着 作者为Feng Yuan(美).
 
实际上书的翻译是出版商安排的, 我根本不知道. 他们把我的中文名都写成 "袁枫" 了.
 
至于要记得我们都是炎黄的子孙, 我觉得作得还不错:
  1. 还是叫袁峰, 没有英文名; 连儿子都没有英文名.
  2. 书上写着我是南京大学博士. 有一个南大同学很高兴的拿了一本回去给大学 (UC Davis) 同事看.
  3. 书是献给我父母和故乡苏州的朋友的. 老外一般是献给太太的.
  4. 书中程序的 icon 是我专门设计的, 用中文字.
  5. 书中我专门加了围棋, 唐诗.
  6. 连苏联人都说: "chinese monography wow :)" http://avaxhome.ru/ebooks/2005/06/23/windows_graphics_programming_win32_gdi_and_directdraw/

 21) 学位

 
上大学算庆幸老邓恢复高考; 读硕是顺手牵羊, 本校还不想考; 读博也是顺手牵羊. 读完三个学位, 没有花钱, 人近二十七岁. 导师让我去北京读博士后, 我已不想再读了.
 
去新加坡碰到大学老师, 得了一个东洋博士, 让我读他的博士, 拒绝. 太太想去美国, 我说不想考 TOFEL, GRE 去美国那洋学位. 实际上我从来没有学过, 考过 TOFEL, GRE. 好在找了一个巨好的机会去美国工作, 连家具都免费搬.
 
如果当年有好工作, 可能也不会读这么多年的书.
 

22) 青春饭

 
软件界第一大谎言是程序员是吃青春饭的, 只能做到三十, 三十五岁. 老夫我刚过四十五岁生日. 前两天碰到一个比我大两岁的, 本科不是读电脑的. 有一个同学, 比我大十二岁, 三十好几去美国读硕士生, 还在 Cisco.
 
干了这么多年, 没有感道累, 没有感道比不上年轻人. 干到退休应该没问题.
 
只要我还在写程序, 你们都不许嫌自己老.
 

23) 钱

 
从小老爹老妈打工, 一个月共入 88.88 RMB. 0.88 给我们三人零花. 交学费后老爹老妈把钱分成两份, 各管各的. 老爹管伙食, 每天菜金五毛. 不算最穷的, 学费都没有免的. 但学费一次交不起, 要分几个月教. 到我读大学时, 我们家欠朋友亲戚两百多圆, 当时是很大的数字了. 读大学时, 我那了些助学金, 家里只要给我每月十五圆. 读大学没花几个钱. 读研的时侯就不用家里出钱了.
 
我对钱是: 节约但不抠门, 重视但不被钱控制.
----------------------------------------
二十多年的程序开发之路: 求学篇

原贴发在 CSDN 上: http://community.csdn.net/Expert/topic/4539/4539878.xml

二十几年前的事了, 听起来可能像是金庸的武侠小说, 突然出现一个师叔, 师伯辈的人物, 讲一些武侠旧事.  其实我是喜欢平铺直叙, 不喜欢多用形容词, 不喜欢英雄人物.

101) 大学: 纸上谈兵

 
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 的水平.
 
考研时间到了, 上海工大没几个研究生名额, 所以最好的学生都往外校发展. 我选了南京大学, 徐家福, 据说他有南霸天的外号. 借了南大的数学, 数理逻辑, 操作系统书恶补. 居然考上了. 回想起来有点后怕, 考不上不知会分配到那里.
 
回首大学四年是我人生最高兴的四年. 大学以前的人生我是不合群的'白专典型'. 以后的人生再也没有这么多的人关心, 爱护我. 当然大学四年让我成熟, 自信了很多, 可以在各种环境下发展了.
 
第一二年, 数学学得不错. 可以和数学班的学生争高低.
第二三年, 英文学得不错. 可以上全校长唯一的英文口语班.
第三四年, 软件学得不错, 可以考上南大徐家福的研究生.
 
在我的心中, 上海是我第二个家. 所以我的第二本书会献给上海的朋友. 说起上海的朋友, 我还和他们长有来往. 去年还见了蔡国钧(上海亚太).

102) 研究生涯

 
八二年春天, 我离开了上海来到了省城南京. 南大计算机系有两大派: 徐家福, 孙钟秀, 就象武当, 少林. 徐家福做语言, 编译. 孙钟秀做操作系统. 徐家福的第一大将是郑国粱, 当年他们一人招三个研究生. 但郑国粱不久就去 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 全体成员:

.

从左到右:
展览会完了, 开始做博士论文. 在我们之前, 老板有两批博士. 第一批许满武一人, 做的是基于 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, 可参看徐家福,吕建写的<软件语言及其实现> 
 
第十章 软件设计规约语言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. 肖宁用一书包的钱陪了国家十年培养费, 出国.

 
离开徐家师门前, 老板问我想不想读博士后. 不过要去北京. 好想是北京有一个教授想跟他交换一个学生做博士后. 当时我已经怕读书了.

----------------------------------------
二十多年的程序开发之路: 教书篇
当年南大计算机系可分为三个世界. 第一世界是徐家福, 孙钟秀教研组, 可招博士的. 第二世界徐洁磐, 张福炎, 郑国粱等, 可招硕士的. 其他为发展中国家, 好象硕士生都还没有.
 
1987 年底, 88 年初, 我博士毕业后分去的是陈世福的人工智能教研组. 陈世福跟我讲过一段他大哥的故事. 他大哥当年卖了壮丁, 家里得了一笔钱; 又逃回来, 再卖了一次壮丁, 一家人感激不尽. 正是穷则思变, 也很符合黑猫白猫论. 这种经历是会影响人生观的.
 
陈世福教研组除了上人工智能课外, 主要的科研项目是专家系统. 南大有一个很有名的肖楠森教授, 他有一套找水的神奇. 中国是严重缺水的国家. 陈世福和肖楠森合作做了一个找水专家系统, 用 Turbo Prolog 实现的. 从此出发, 慢慢做活了一片(围棋术语).
 
找水专家系统是给外行用的, 就要用汉字. 当时的汉字操作系统外壳是 UCDOS 之类. Turbo Prolog 等系统在汉字操作系统外壳用汉字有点小问题. 我们就做了一些汉化工作. 所谓汉化就是了英文软件允许汉字输入输出. 更进一步的是将英文菜单改为中文. 通常汉化也就是改几行汇编指令, 很简单. 不过当年, 这是可以卖'大钱'的. 除了软件汉化外, 陈世福下有一位大将潘金贵, 很热衷于翻译资料. 我们教研组翻了不少 Turbo C, Turbo Prolog, Turbo Pascal 之类的书. 至今还能找到有一本早期的 Turbo C 书上有我的名. 陈世福教研组慢慢变的较能吸引研究生.
【上篇】
【下篇】

抱歉!评论已关闭.