研究生岁月 ——祝贺杨芙清院士执教50年

邵维忠,杨芙清院士1979年9月--1983年7月硕士生,北京大学信息科学技术学院教授、博士生导师,中国计算机学会理事。1970年毕业于北京大学数学力学系,1979—1983年在计算机科学技术系任教并攻读硕士学位。早期主要从事操作系统和软件工程领域的教学、科研与开发。1987—1989年在新加坡国立大学参加科技合作。回国后在导师杨芙清院士主持的国家“八五”、“九五”重点科技攻关课题“大型软件开发环境青鸟系统”和“软件工程环境工业化生产技术及系统”中担任主要技术负责人。自1991年起注重于面向对象建模方法的研究,并开设了研究生课程和本科生课程。组织研制了“青鸟面向对象建 模工具集”,并指导其新版本开发。写作和翻译了多部学术著作。最近几年在面向对象技术、软件复用与构件技术、中间件技术等领域承担了多项国家高技术研究发展计划(863)项目、国家重大基础研究(973)项目和国家自然科学基金项目。曾获国家科技进步二等奖及国家部委级奖励多项。联系方式:wzshao@pku.edu.cn
  我于1979年考取了北京大学计算机科学技术系的研究生,实现了多年以来的梦想——在杨芙清教授的指导下攻读硕士学位。那年是北大计算机系首次招收软件专业的研究生,只收了四名学生——方裕、柳纯禄、孙家肃和我。除方裕是脱产学习外,其余三人都是在职学习,学制四年。
回想四年的研究生岁月,导师为我们倾注了多少心血!从课堂上的精辟讲解到讨论班上的深入探讨,从对文章一丝不苟的批改到对科研工作的悉心指导,从为人处事中的言传身教到学术研究中的朝夕熏陶,无不历历在目,永难忘怀。
课程学习
  第一学年较多的时间是课程学习。杨芙清老师给我们讲的是操作系统课。其他给我们上过课的老师有本系的杜淑敏、杨天锡、王攻本、耿素云、朱慧珍、邹悦、王永宁等老师,数学系的江泽培、孙绳武老师,以及中科院的张锦文研究员。且不说这些老师们深湛的学术造诣,他们那种兢兢业业的教学态度更是感人至深。杨老师是计算机界全国闻名的权威专家,但是她对每一堂课并未因驾轻就熟而有丝毫疏忽大意,总是十分认真地准备。那时还没有像如今这么普及的多媒体教学设备,杨老师在备课时把要讲的程序和图用毛笔写在大幅的纸上,上课时一张张地挂出来,以节省板书时间。杨老师的字写得秀气,板书布局层次清晰,详略得当,重点突出,其中有很多讲究。她善于把艰深、复杂的道理讲得深入浅出,让人有豁然开朗之感。然而这些还不是杨老师讲授这门课程的主要特色,更重要的是,在这门课程的背后,有着杨老师和她领导的学术团队多年来亲手设计操作系统的丰富经验,有站在操作系统研究前沿深刻见解,而不是纸上谈兵、照本宣科。后来我们遇到一些曾经在北大进修过的兄弟院校教师,或者在研制150机时到北大参加协作的教师与技术人员,他们由衷地说:“我们是从杨老师那里真正学会了操作系统。”
翻译出书
  在课程学习的同时,我们师兄弟四人第一学年的另一件大事是在杨老师的带领下翻译了美国P. B. Hansen的学术专著《并发程序的系统结构》。该书作者首次提出管程(monitor)的概念,用来管理进程之间的共享资源,实现了一个并发程序设计语言——并发Pascal,用这种语言开发了若干操作系统。其学术思想当时在国际上是很先进的。翻译这本书,与其说是文字上的工作,不如说更多的是研究与探讨。杨老师要求我们首先通过阅读、研讨并分析书中的程序代码,从理论和技术上准确地理解全书的内容,然后在她主持讨论班上报告,与教研室的老师们一起讨论。经过这样一番研究和切磋,集中了集体的智慧,对书中的难点和疑点逐一澄清,最后才动笔翻译。初稿完成后由杨老师对全书进行审阅修改,并请吴允增教授对译文进行校阅。吴先生是老燕大出身,知识渊博,英文非常好。他一边听我们朗读译文,一边看着原书的英文进行对照,遇到不确切的地方就停下来讨论纠正。最后,杨老师再次对全书的内容进行审阅定稿。该书由国防工业出版社出版。这段经历使我看到了老一辈学者、教授对著作的严肃态度,对我日后的学术生涯产生了深远的影响。
参加课题
  我们正式入学之前便已参加导师的研究课题。当时杨老师主持的研究课题是国产系列机DJS-240操作系统研制。DJS-200系列机是我国20世纪70年代后期统一规划设计的国产计算机系列,包括相互兼容的高、中、低三个档次,即DJS-260、 DJS-240和 DJS-220。先由电子工业部组织我国计算机界一批最高水平的专家(杨老师是其中之一)集中工作,研究制定了总体方案和技术规范,设计了统一的指令系统和软硬件接口,编制了工作文本,然后由各个承担单位分别进行研制和生产。
   杨老师主持研制的DJS-240机操作系统有两个最重要的创新。一是提出了管程层次结构,集中了进程结构和管程结构的优点,既可更有效地支持并发系统设计,又能更可靠地管理共享资源。二是采用高级语言编写大型操作系统的全部代码。与P. B. Hansen在70年代初期用并发Pascal实现了小型操作系统96%的代码相比,这是操作系统发展历程中的一个新的进步。实现上述目标需要相应的编程语言支持。杨老师和南京大学徐家幅教授、中科院软件所仲萃豪研究员合作设计了一个可全面支持操作系统设计的编程语言——XCY语言。这里要顺便澄清一个有趣的传言:当时计算机界有人传说,XCY是该语言的三位设计人的姓氏拼音缩写,实际上并非如此。XCY乃是“系统程序设计语言”的汉语拼音缩写。
  DJS-240操作系统包括一个批处理系统和一个分时系统,是两个相互独立的操作系统。我们三个研究生进入课题时,批处理系统已经编写了大部分源代码,分时系统的工作尚未启动。方裕和柳纯录分别在批处理系统中负责磁盘管理和磁带管理的开发,我的任务是负责分时系统的开发。预定的方针是:系统核心和作业管理等模块参考批处理系统进行重新设计,通道管理、设备管理等其他模块尽可能复用批处理系统的程序。这给了我一个极好的学习机会——对各位老师和同学所开发的批处理系统的每一部分都要读懂,对一些主要的部分必须熟练掌握。
杨老师那年已经47岁。她在领导着整个科研团队、主持项目的总体方案、把握技术路线、组织项目实施、并且担任计算机系领导工作的同时,仍然在第一线亲手写程序。杨老师自己设计和实现了DJS-240批处理系统的最关键部分——操作系统核心。那时的编程是名副其实的“写程序”,不是像现在这样在计算机上通过键盘和屏幕进行编辑。先要将程序写在纸上,然后让工人用穿孔机在纸带上穿成一排排的孔,方可能输入到计算机中。修改程序要用橡皮擦了再写。纸带上的局部错误用凿孔板手工修改。修改量比较大时,手上往往磨起血泡来。那时,搞软件的人对一副好用的凿孔板的感情,不亚于我们现在对笔记本电脑喜爱。
  与普通软件相比,操作系统的开发最能体现人的程序设计水平和基本功,而操作系统核心的开发又是其中难度最高的部分。不但要掌握各种通用的编程理论与技术,而且要清晰地了解计算机的硬件资源、指令系统、各种中断和软硬件接口,甚至要精确地了解程序状态字的每个二进制位和各级中断处理程序入口地址。我感到自己到真正学懂操作系统是从仔细地通读杨老师编写的操作系统核心程序开始的。
   “文如其人”这个成语说的是文章的风格反映了作者的性格和为人。其实写程序何尝不是如此。杨老师写的程序,从文字说明、数据结构、表格、示意图,到程序代码,都像她平常说话做事一样条理清晰、逻辑严谨、构思巧妙。她能把操作系统中难度最高的问题,以最清晰的逻辑思路和最巧妙的解决方案给予解决。从来没有那种含糊不清、绕弯子、把简单问题复杂化的现象。杨老师喜欢用细铅笔写程序,字体清秀,版面十分整洁,如同她平时的衣着一样清丽高雅。
  在1980年暑假期间,DJS-240操作系统的全体研制人员加班工作。到新学期开始时,批处理系统的编程已基本完成,而我负责的分时系统的编程工作则刚刚开始。
在上海的日子
  DJS-240计算机硬件、系统程序设计语言和操作系统的研制分别由三个单位承担,同时启动,分头工作。这给操作系统开发带来了不少的困难。我们可以根据XCY的语言文本开始编程,但是却没有可运行的XCY语言系统进行编译检查和运行调试。南京大学负责实现的XCY语言在提供使用之前也需要调试,但是DJS-240计算机硬件的生产还正在进行中。好在当时上海、常州和大连已经各有一台DJS-220机投入使用。为了保证进度,项目组决定先利用DJS-220机来调试DJS-240机的语言和操作系统,最后再安装到目标机上。操作系统和XCY语言的开发是一种相互交织的关系:先在裸机上实现XCY语言,然后用它对操作系统程序进行编译,生成可执行程序安装到DJS-240机上,再在操作系统的调度下将XCY作为一个通用并发程序设计语言提供给用户。
1980年秋季开学不久,杨老师率领项目组成员奔赴上海调试操作系统。第一批共13人,其中包括用户单位西昌卫星发射指挥中心的4位同志。南京大学XCY语言研制人员也同时抵达。我们在愚园路一家军队的招待所包了几个套间,既当寝室,也当办公室。
  工作进展远不如预期的那么顺利。南京大学实现的XCY语言系统也是到上海后才开始调试,几个星期后才能对我们的程序做编译检查。这是对XCY的第一次试用,无论是用高级语言全面支持操作系统设计,还是全部用高级语言来编写操作系统,在当时的技术背景下都是首次尝试,因此每前进一步都会遇到大量的问题。值得欣慰的是两个单位的合作十分融洽。徐、杨两位教授至诚合作的精神和一切从国家大局着想的宽广胸怀传给了他们率领的学术团队。遇到问题总是齐心协力,共同研讨和切磋,找出解决办法。
上机也是一个大问题。当时上海只有一台DJS-220机,属上海无线电十三厂,要提供本市乃至外省市许多单位使用。每天要有好几个小时用于硬件维护,剩下的时间以小时为单位供用户预约。上无十三厂软件室总工程师金德鑫先生曾经到北京大学参加过杨老师主持的研究课题,对杨老师十分钦佩。靠了这层关系,厂领导和机房负责人对我们格外照顾,优先为我们分配机时。即使如此,每天最多也只能提供五、六个小时的上机时间。我们和南大那么多人的程序都要调试,每个人难得轮到一次上机时间。机时费也很昂贵,所以每次上机之前都是非常仔细、慎重地做好一切准备,对自己的程序反复审查,尽可能发现和排除其中的错误,以便在有限的上机时间内更有效地发挥计算机的作用。
  分时系统的开发还没到大量上机时候,我的大部分时间仍然是写程序。那时的计算机内存空间很小,DJS-240机的内存只有4096k。若操作系统占用的空间太大,可供用户使用的空间就更可怜了。所以当时养成的编程习惯是很讲究代码的精炼。我很热衷于将课堂和书本上学到的理论和技术运用到程序设计中,并且时常以杨老师的程序作为榜样。对一个已经完成的模块,一旦发现代码不够精练,结构不太合理,逻辑上不太清晰,数据结构不够精巧,或者思想上走了弯路,便朝思暮想寻找更好的解决方案,下狠心重新设计和编程。到项目结束时,整个分时系统的几乎每一个模块都改写了三编以上,穿孔纸带缩减了一多半。
  秋去冬来,天气渐渐冷了。上海地处江南,冬天不供暖,所以室内室外一样阴冷。把毛衣和棉袄都穿在身上,还觉得冷飕飕的。后来我们每人都买了个热水袋,工作时抱在怀里,不时地用它暖暖手。晚上工作到深夜,肚子饿了就用煤油炉煮点东西吃。杨老师年近半百的人也与我们同甘苦,这对整个队伍的士气是极大的鼓励。尽管工作条件和生活环境都很艰苦,但也觉得乐在其中。整个集体就像一个温暖的大家庭。师生之间。同事之间,同学之间相处非常融洽。讨论工作时可以很激烈地争论,学生也可以跟老师争论,我们几个年轻人之间有时甚至争得面红耳赤,但都是为了工作,事后仍然亲如兄弟。有时我们也玩玩扑克牌。虽然杨老师从来没有为此批评过我们,但我们还是瞒着她,尽可能不让她发现。
  在工作上,杨老师对我们要求很严,但是我们并不觉得拘束。跟杨老师讨论问题感觉最爽快,可以直抒己见。与老师见解不同也没关系,错了会得到纠正,正确的意见会得到鼓励和采纳。在日常生活中,杨老师是这个和睦的大家庭的慈祥家长,连每个人的生日她都记得。印象最深的一次是有三个人的生日很接近,我也是其中一个。杨老师张罗着给我们一起过生日。托人买来十来斤大闸蟹,又让邹悦老师到父母家拿来蒸锅、炒勺,杨老师和其他几位女老师各显厨艺,办了一桌很丰盛的生日晚宴。大家围坐在一起,把酒持螯,燃烛分糕,欢声笑语,其乐融融。
经过四个多月的艰苦工作,各人写的程序基本上分调通过。回到北京时已临近春节。我们每人都获得了几件奖品,有钢笔、自动铅笔和计算器。
系统联调和安装
  在上海完成了操作系统各部分的分调以后,后面的调试任务还很艰巨,整个系统还需要合在一起进行联调。学校的教学与科研工作全局不允许我们把大量的人力长期地投入这一个项目。杨老师把批处理系统的联调任务交给刘永进和苏渭珍负责,每个具体部分的开发者在必要时协助他们工作。我仍然负责分时系统。上海无线电十三厂不能再继续提供那么多机时了,杨老师另为我们联系了常州无线电厂和大连海运学院,他们也各有一台的DJS-220机。此后就是多次在这两个城市出差,最终完成了联调。在大连通过了专家的测试和验收,然后在北京成功地通过了专家鉴定,最后在西昌卫星发射指挥中心安装到DJS-240机上。在常州和大连期间,北京大学和南京大学先后有许多研究生被派到这个项目中参加实习。如今他们在海内外各自的各种岗位上都已经成为栋梁之材。
毕业论文
  因为是职读研,所以我到1983年夏季才进行论文答辩。杨老师常对我们说:“学位论文是一个人的学术生涯中一个重要的历史记录。”我的论文在毕业前一年多已经在导师的指导下确定了研究内容,随着DJS-240项目的进展,主要技术问题也已经解决。但是最后一个学期还是在写作上下了很多工夫,力求把论文写得漂亮些。现在回忆起来,仍然感觉文章中不乏得意之笔,例如对当时国际上讨论很热烈的管程嵌套调用问题,提出了一种通过适当的低级调度策略而防止死锁的解决方案。时过25年,与现今的计算机科学技术相比,那篇文章的具体内容已经不足称道,但是导师传给我们的治学精神却是一份永不贬值的财富。杨老师领导的学术团队给我提供了接触前沿研究课题的机会,让我承担其中的重要任务,这为我的论文选题创造了极好的条件。在日常的研究和讨论中,从导师那里一点一滴地学会了如何做研究。杨老师在批阅我们的论文时那种一丝不苟的态度和不辞辛苦精神,更使我深受感染。
在杨老师从教50年之际,回忆自己四年的研究生岁月,往事历历在目,难以尽述。从研究生毕业到现在,转眼已经四分之一世纪。我们第一届研究生都已经成为年逾花甲的人。在我们这届之后,杨老师培养了一批又一批的弟子,我们自己也带了许多届学生。后浪推前浪,导师交给我们的宝贵精神财富将永远传承下去。
  最后我想用八个字结束全文——岁月易逝,师道永存!