我的外婆是个程序员
我是家里的第三代女程序员:我的外婆是第一代程序员,我的妈妈随着她也选择成为了程序员,而我延续了这个传统。在50年前的苏联,外婆开始了她的程序员生涯,下面我会讲述这段往事。
1954-1959.高等教育
我的外婆出生在乌克兰中部的第聂伯罗捷尔任斯克(位于乌克兰第聂伯河畔的港口城市)。为了得到更好的高等教育,她不得不选择其它城市。在考察了入学参考书上的所有大学、院系和专业之后,她选择了基辅塔拉斯·舍甫琴科国立大学并搬到了基辅生活。那个年代的入学竞争非常激烈,但由于外婆是高中的优秀毕业生(在苏联国家这被称作“银制奖章”),因此只做了简短介绍就通过了入学考试。
1969年之前,还没有控制论专业;当时,由力学和数学系负责培养数学和理论物理人才以及后来的程序员。经过2年的学习之后,学生可以选择他们的专业。我的外婆正好赶上了第一届“计算数学”专业招生。专业课中包括一些全新的理论课程:程序设计、模拟和数字电脑设计、计算方法(大多数是求解微分方程和线性代数问题)等等。参加课程的不仅有学生,还有乌克兰苏维埃社会主义共和国科学院科学计算中心的研究员,除了这里一般不会有其它地方教授这方面的知识。
要得到实际的练习机会更加困难。当时的计算机(那时叫“电子计算机”)体积庞大而且非常昂贵,大学买不起计算机。也就是为什么在学校里只教授理论,在暑假期间学生会被派到有计算机的地方实习。
大学三年级的暑假,外婆被分配到基辅电工研究所实习,那里有一台叫做MESM的计算机。当然,学生们不会被分配解决实际问题。事实上,我毫不怀疑MESM的工程师会拒绝让学生参与MESM的研制工作。因为在实习初期,一些富有同情心的学生看到设备不够整洁就将上面的灰尘擦掉了,结果所有被擦干净的晶体管都发生了问题需要重新调试。接下来学生们只能做一些练习任务,包括“游戏开发” ——一个学生选择一款游戏,像是三连棋游戏,从杂志上找一些游戏算法然后编程。接着会把程序放到计算机上运行查看结果。
大学四年级的时候,外婆被派到莫斯科国立大学实习,那里有一台大学自己的计算机——Strela。那里分配的任务比之前要重要一点,但主要还是类似线性代数计算的教学课题。
在西方世界发明了第一代高级编程语言Algol和Fortran之后,基辅的计算机界在格罗希柯夫的课上知道这一成果,但是他们并没有采用。此时,所有的程序都用特定计算机的机器语言编写。
译注:
MESM计算机:欧洲大陆第一台通用可编程电子计算机,由下谢尔盖·阿列克谢耶维奇列别捷夫领导的科学家团队在基辅电工研究所(现乌克兰)发明。MESM于1950年开始运作,大约有6000个真空管,功耗25千瓦,可以执行大约每分钟3000操作。
三连棋游戏:两人轮流在一有九格方盘上划加字或圆圈, 谁先把三个同一记号排成横线、直线、斜线, 即是胜者。
Strela计算机(俄语“箭头”):苏联制造的大型机(mainframe)系列,于1953年开始制造。拥有6200真空管和60000半导体二极管,每秒可执行2000次操作,支持浮点运算。
维克多·格罗希柯夫:乌克兰的计算机先驱,负责领导研制出乌克兰的第一台大型计算机“基辅”(Kiev 1959年),1961年又开发出了晶体管的通用控制计算机“第聂伯”Dnepr。
1959 – 1965. 乌克兰苏维埃社会主义共和国科学院科学计算中心
毕业之后,外婆去了计算中心上班——开始当一名工程师,接着晋升为高级工程师,最后成为了首席工程师。当时计算中心大约有300名员工:程序员、技术员、模拟计算机专家(大多数人工作使用的事数字计算机)以及测试人员,其中测试人员负责对比对比程序运行结果和使用Rheinmetalls(德国电动机械计算机)手工计算结果。
其中一些人忙于设计新型计算机,其他人(包括外婆)做的事情现在叫做外包。计算中心为公司解决某些需要数值分析的实际问题,公司代表会为问题给出一个正式的定义,中心的工程师求解问题后进行编程。例如,其中一个任务就是计算贝塞麦(转炉)炼钢法的最优模式,外婆则关注解决结构力学问题。
计算中心自主研发出一系列计算机——首先是“基辅”(”Kiev”),然后是BESM。在此之前,使用的是机器码、打孔卡(在此之前使用的是由曝光后的电影胶卷制作的打卡磁带)以及很多今天从未听说过的设备。人们紧张地把成堆的待打孔的卡片运来,这些卡片的主人则会报以狂躁的反应。那些对计算机没有概念的人会接受定期的培训,这些培训旨在解释计算机的基本原理。曾经有个人一直重复问同一个问题,老师在再一次做出解答之后愤怒一触即发,就在这时那个人大声抗议道:“不要再解释我已经理解了,但是它”,他平静地指着嗡嗡作响的机器说,“它理解了吗?”
计算机资源总是很宝贵的,因此程序员通常要等到很晚才能抓到一些额外的上机时间,然而打孔卡实验室(人们可以在那里用传统的机械方式修改他们的卡片)那个时候已经关门了。深夜里他们只能手工修改自己的卡片——将多余的孔裁掉,然后(利用白天打孔剩下的卡片)把新的孔用纸带补上。技师们反对这种做法 ——虽然可以容许额外打孔,但是粘上去的卡片是非常危险的——这些卡片会掉进输入设备损坏机器。这类斗争,胜利总是会站在弱势的程序员这边。
1965 – 1988. 实验性设计地区科学研究所(RSRIED —— 这不是官方认可的缩写,只在本文使用)
1988 – 1996. 建筑与城市规划理论科学研究所(SRIAUPT —— 同上)
1965年外婆以首席专家身份加入了RSIED,后来担任首席设计工程师。这个机构主要做自己的任务而不是给企业做外包,工作的内容有公寓和公共建筑设计、结构化建模方法编程以及设计任务自动化(也就是开发类似AutoCAD的专用绘图工具)。
有限的上机时间仍然是个问题。一部分上机时间租用的是前文提到的计算中心机器,一部分用的是RSRIED自己的计算机Nairi。这台机器来自亚美尼亚,它不仅支持机器代码还支持一种内部编程语言——Cyrillic(西里尔字母),但又有所区别。这种区别源自下面这件轶事。一组程序写完并经过调试以后,就可以发布使用。程序被汇总出版打印成册,接下来会依据这份手册将程序转换成其它机器语言或者授权给其它公司内部使用。出版这些程序手册是一件非常重要的事情,所以通常在交付印刷之前他们会非常仔细地进行校对。有一次,一个对工程师的俄语水品非常不屑且对编程一知半解的人校对一批用 Cyrillic写成的Nairi程序。校对的结果,虽然“校正过的”文本没有语法错误,但是这批Nairi程序完全不能运行。
译注:西里尔字母:源于希腊字母的格拉哥里字母,被斯拉夫民族广泛采用,因此有时也称为斯拉夫字母。
程序员通常需要出差——到苏联的各个城市拜访客户(确认客户要解决的问题)和去其他国家分享经验。当然,大多数人只愿意在苏联范围之内出差,所有与资本主义国家的交流都在最高级别的管制之下。当时,去保加利亚、匈牙利和捷克斯洛伐克出差是日常生活的很好的调剂。
在外人看来,很难说程序员这种职业有什么特别——外公和外婆的朋友都是程序员或是从事相关的职业。女性程序员也没有特别之处——很多女性从事这项职业,不足为奇。很明显,“喔,这个女孩会编程”这样的声音是在后来才出现的:-)