前段时间,人类登月 50 周年,我们推送阿波罗飞船制导软件的负责人 Margaret Hamilton 的文章,她是上世纪六七十年代的先锋人物。
此外,我们还在微博发了另外一个阿波罗计划女程序员的故事,母女两代都是程序员。
(有人误解成 Lin Clark 的妈妈是 Margaret,其实不是)
今天在 Reddit/programming 看到一篇热文,看标题的第一眼,我以为又是和阿波罗计划相关的故事。
打开后发现,虽然不像阿波罗计划故事那样伟大,但还也是一个两代都是程序员的故事。那个时代,大学里都没有编程课,我们可以从中了解到当年第一批程序员是怎么样学习和工作流程……
原作者 Emil Ernerfeldt 是一个瑞典斯德哥尔摩程序员,他妈妈 Marianne Ernerfeldt 出生于 1947 年,高中没毕业时就想当程序员。该文是 Emil 在 2018 年 12 月采访妈妈所写。
为什么你想当程序员?
大约是 1965~1966 年,我决定成为一名程序员。我读过一篇文章,上面有一幅流程图,看到我就想“这个适合我”。
1967 年我高中毕业,那时候的大学还没有教编程,但索尔纳有一个为期 6 个月的课程,后来变成了 12 个月的课程。而且我有资格申请学生贷款,于是我就申请了。
与此同时,瑞典的国有铁路公司 SJ 发布了招聘实习生的广告,提供为期一年的带薪培训项目,你可以学习了解 SJ 运营的所有不同部门。SJ 有一个计算机部门,所以我也申请了,希望能进。
然而,SJ 的 50 个实习生名额,结果有 700 人申请,所以有一个复杂的筛选过程和各种各样的测试。最终我进去了!
还要说一句,当 SJ 管理层发现实习生项目手册同时发给了男学生和女学生时,他们非常不高兴!被录取的女性并不多,但我们是少数。
在培训期间,我们参观了 SJ 的所有部门,了解了从火车和铁路到通信工作原理(SJ有自己的电线和电话线)。一年之后,我从实习生转正了,但那是一份无聊的工作。
终于在 1969 年,我听说 SJ 开始了一个内部编程培训项目,所以我申请了。经过更多的测试,我和另外三个人在 1969 年开始编程培训。我们是两个女生和两个男生。
(1976 年的 IBM System/370 )
编程培训是怎么样的?
首先,我们参观了 SJ 公司的计算机部门,并拿到了计算机是什么的纲要等材料。然后我们在 IBM 上课,IBM 在斯德哥尔摩的一栋大楼里有一台“训练机”。我们班上大概有50~100人,但我们被分开了,每个教室里有 8 个人。教室前面有 2 个电视屏幕。老师在另一个房间,每个老师大概对应 10 个教室,每个教室的人都可以用按钮吸引注意力,然后用麦克风提问。超现代的!
首先我们学习了一些关于 IBM OS 的知识,然后我们学习了 PL/I,这是 IBM 自己的编程语言。它是 Cobol 的一个更现代的版本,具有 Cobol 还没有(但以后会有)的特性,比如生成表和查询。所以 PL/I 在当时是一种更好的编程语言,也更简单。可以使用英语单词编写代码,比如 DO WHILE 等。它是一个非常好的编程语言!
在瑞典,政府机构处于数据处理的最前沿,银行和其他机构远远落后。因此,在 IBM 的课程中,虽然大多数是来自其他机构的人员,但 SJ 处于最前沿。
在学完第一个 IBM 课程之后,我回到了 SJ,开始了我的第一个实践项目。我们四个人做了一个约会程序,你可以输入男性和女性的特征,然后用我们自己发明的算法计算匹配,然后我们开始编写项目代码!
后来我学了更多的课程,比如汇编。我们有一位主管在工作中帮助我们。
(我画流程图的模板)
你的工作怎么样?
我们先画流程图,然后用铅笔写代码。然后把代码交给打孔机,代码将被打孔到打孔卡上。打孔卡有 80 列,其中 72 列用于代码,8 列用于排序,所以每一行代码最多可以有 72 个字符宽。
(程序员的那些事 注:打孔卡有 80 列,这个 80 是不是很熟悉呢? 现在有些编程规范中,仍然在强调每行代码不要 80 个字符。)
你必须把代码写清楚,这样操作打孔机的女性才能读懂。在 SJ 工作了几年之后,我们找到了几个专门负责读取我们代码的人,他们真是帮了大忙。他们主要会打数据卡:来自 SJ 的时间报告、每节火车车厢行驶了多远等等。打孔机看起来像一台普通的打字机,可以在卡片上打孔。在每一列上面,它还将以明文输入字母。
(IBM 的打孔卡)
我们也曾经在打孔卡上放蛋糕,所以打孔卡的用途很广的。
刚开始的时候,程序很小,但后来可能变成几米长的卡片盒。每一行代码都变成了一张打孔卡。每一行和每一张卡片有一条指令。所以打孔机会把程序(成千上万张卡片)还给我们。
我们还必须创建“控制卡”,由它来决定某个穿孔卡是要编译还是要执行,以及它是什么语言等等。控制卡有一个单独的颜色。第一张卡片是一张工作卡,上面有我的名字,所以打孔机操作员知道该把东西还给谁。
我们把打孔卡盒放在一张特殊的桌子上。操作员穿着白大褂来了,拿着盒子去运行程序。
有时候,我们每天只有一次运行程序的机会,因为我们程序员在机器大厅中的优先级最低。所以我们不得不同时做几个项目,以保持忙碌,不至于闲着。
最后,这些卡片连同“睡衣纸”一起送还,其中包含错误代码和行号。
(Pajama paper /睡衣纸)
我们有机会打几个孔,这样我们就可以自己做一些小的修正。
然后我们必须创建测试文件,看看程序是否产生了预期的结果。如果没有,你就会坐下来做“桌面测试”(用笔和纸思考),试着想想“到底出了什么问题?” 因此,要使程序正确运行,可能需要相当长的时间。
我们有几台机器。我们从一开始就有 IBM 360 大型机,还有一些更老的机器。后来我们得到了 IBM 370。
在 70 年代末,公司有了 Alfaskop 终端机,但我们没有个人的终端机,而是共用一个终端机室。如果我们想要对程序进行更改时,不得不争用终端机的时间。程序会在屏幕上出现,我们可以修改。在 1979 年离开 SJ 之前,我从未拥有过自己的终端机。
Alfaskop 3700
说说你的同事
SJ 的计算机部门大约有 40 名程序员和系统工程师。我所有的同事都像我一样,在公司内部接受培训,只有少数例外:有几个和我年龄相仿的人参加了我之前提到的索尔纳为期 6 个月的课程。但除此之外,没有其他的方法来学习编程——因为这是一个全新的职业!有些同事曾经是司机!大多数人甚至没有高中文凭。
系统工程师的工作主要与规格、程序的输入和输出等有关。作为程序员,我们是问题的解决者,我们制作流程图并找出解决问题的方法。
在机器大厅里大约有 10 名机器操作员。他们穿着白大褂,处理磁带存储、磁盘和打孔卡。我们很少被允许进入机器大厅的内室。入口处有一个“关门”的牌子。
机器大厅很大。早期的机器(IBM 1400)占地约 10~20 m²,但后来的机器是小冰箱那样的体积。
打孔卡部门由 50 名年轻女性组成。如果 SJ 其他部门想拜访计算机部门,最有趣的肯定是打孔卡部门,因为在 SJ 的大多数人是男性咯!
在我们 40 名程序员中,只有 5~6 个女性。我是这群年轻人中的一员,但大多数程序员都比我大 10 岁左右(我出生于 1947 年)。在 70 年代末,我们招了一些新员工,他们接受了为期 12 个月的培训。
你做了什么?
1969 年春天,SJ 在线预订服务推出了,24/7 运行时间。它在当时非常先进,完全是用汇编程序编写的。这是 SJ 非常出色的一点,在瑞典没有其他公司能和我们相提并论。我很幸运能在这样一家敢于冒险的公司接受教育!
我们创建程序,一旦完成并经过测试,就把交给别人。其他人负责维护,我们负责编写新的程序!主要是收集关于铁路运营的统计数据(例如工资单),然后这些程序将定期运行(例如每个月)。
1979 年,在 SJ 工作了十年之后,我跳槽去了银行部门工作。