谁是世界上第一位程序员?

鲸小小是北京是科普资源联盟的成员单位,我们面向中小学生科普的核心是计算机科学相关的知识。9月25日,国庆节前,应该校家委会的邀请,我们去团结湖一小面向五年级和六年级的两个班的学生分别做了一次科普活动。

下面是六年级活动的介绍。

鲸小小的老师们到的时候, 六年级的同学都在操场上运动,教室里显得空荡荡的。

现场家委会的家长知道我们是做编程教育的,表示他们家的孩子学过机器人,挺好玩的。我们给家长介绍要分享的主题, “计算机科学科普—-杂谈”,不讲编程,而是讲计算机和计算机发明者的故事。之所以选择这样的主题,是因为学生们很少有机会接触这样的知识,对于计算机的认识,停留在玩游戏,编程序的使用上面。那些天才计算机的发明者们,所处的时代、经历、个性,以及他们做出发明的创新型想法,也许可以激发更多学生接触科技,学习科技知识的兴趣。 

为了引出话题,我们给学生们展示了一个计算机发展的表格,第一代是真空电子管计算机,ENIAC。 这台计算机是于1946年在美国宾夕法尼亚大学建造成功的。 这个时候,一个同学积极举手,给别的同学兴奋地介绍这台计算机有多大, 有多少真空管。这让我觉得很意外,没有想到有同学对这些知识还很了解,因为她似乎没有学过编程,也没有参加过信息学奥赛。 了解这些知识,说明这位同学的课外阅读非常广泛,对计算机科技的发展比较关注。

(本来准备了波士顿机器人的视频给学生们播放, 可惜呀, 教室里面的PPT比较古老,很遗憾,视频没有放出来。所以,去学校讲课,需要了解一下他们的系统是什么版本的,微软的系统是什么版本的。实在不行,也要问一下教室内的系统,可不可以接自己带的电脑。)

说起来可能不太相信,计算机发明之前,程序代码就已经出现了,同样的,程序员先于计算机出现了。

今天的故事就围绕着世界上第一位程序员,同样也是第一位女程序员Ada展开。

 Ada Byron Lovelace   The First Computer Programmer   1815 – 1852

有关计算机发展史上的关键人物,很多人知道图灵。 比如今天课堂上,当我提到图灵的时候,一个男同学就起立,给同学们分享了他所知道的图灵测试。虽然他有一点点紧张,但是大概意思是非常到位的,为这位同学点赞。但是很少有人知道在图灵之前100年,计算机还没有真正发明的时候,已经有一位女士,提出了计算机程序设计相关的非常重要的概念。

Ada是英国19世纪诗人拜伦(L.Byron)的女儿,既是一位数学家,也是一位发明者。 她继承了诗人父亲天马行空的想象力,同时也在母亲的熏陶和当时数学家的指导下,学习钻研过数学。

(同学们不知道拜伦,但是当我说拜伦是雪莱的朋友时,有些同学的深情有点恍然大悟的意思,似乎了解雪莱要多一点.)

她学习数学的原因,也很出乎人的意料 ”我应该做一些科学方面的事来控制我的想象力,避免胡思乱想“。  每个人都希望培养自己的想象力, Ada是我所知道的第一个想抑制自己想象力的人。她所采用的方法也与众不同,竟然是用大部分人感到头疼,想极力避开的数学来纠正自己。

而且,真的有人给她开了一个药方。

如果你想知道,这个药方是:

  1.  一付欧几里得几何
  2. 一点三角学
  3. 一点代数

在这个时候,给同学们普及了欧几里得几何就是平面几何,就是从公理出发, 通过严格的推理来论证结论,推导新的信息的。举了例子后,有同学开始明白了。

再接下来, 介绍了一下Ada当时生活的时代背景:工业革命。蒸汽机的出现,带动了科技的飞速发展,英国中部出现了很多的工厂。 Ada去参观之后,觉得非常兴奋。其中印象最深的是织布机。 后来, 她又认识了英国几位著名的女数学家和女科学家,在技术的应用上面产生了更多的兴趣。

在丰富想象力的基础之上, Ada可以把想象力应用到科学上,这是她与别人不同的地方。 她的父亲拜伦想象力丰富,但是对待技术的发展,却是一个十足的”反动派”。 他支持”卢德主义”。当时,机器生产逐渐替代手工劳动, 大批手工业者破产,工人失业,工资下跌。于是工人把机器视为贫苦的根源,用捣毁机器作为反对企业主,争取改善劳动条件的手段。 Ada不是这样的,她仔细观察当时先进的织布机,从中吸取重要的设计,这对于她后面的发明(对于分析引擎的设想)非常重要。

当时提花织机织出来的发明者的像

那么,谁给Ada开的药方呢?

是一位叫巴贝奇的发明者(如下图)。 (Charles Babbage)

Charles Babbage

课堂上没有时间讲这位巴贝奇先生在家组织沙龙,邀请各个领域的科学家来讨论和分享科学方面的研究, 他也来宣传自己发明的机器:微分引擎,希望有人能够投资于他。

在给同学们展示了微分引擎机器的照片之后,提到了一点, 该机器是用来计算对数表,三角函数表来设计的。 它把操作分解成非常小的步骤, 每一步都只含加法和减法。这个就是算法的雏形。

然后简单介绍了这个机器如何求平方,验证用加法和减法的方法来求平方。

第一列是N的平方,第二列是相邻两个数的平方差,而第三列是平方的导数。 (虽然没有同学学过微积分,但是看上面的表格没有问题)。 我们知道第三列总是2(当然是,这是平方的导数值) 而第二列的值可以由前面一个数和导数相加得出。

比如, 我们知道了3, 下面一个数就是3+2 = 5, 再下面一个数就是 5+2 = 7 , 以此类推。

那么第一列的值,也就是平方的值,就是前面一个数加上第二列的值, 比如

4 = 1 + 3

9 = 4 + 5

16 = 9 + 7

只要持续计算下去,就能算出任意大的数字的平方值。

这种方法的确每一步都只涉及了加法和减法,用机器来实现就容易多了。

(由于时间有限, 这一部分在讲的时候一带而过,估计很多同学都没有看明白, 如果他们读了本文,可能会恍然大悟。)

巴贝奇先生发明的这个机器,由于在当时非常先进,以至于英国政府要投价值差不多两艘战舰的资金来让他生产。 可是,巴贝奇是一个停不下脚步的创造者,他脑袋中有了新的想法, 提出了设计一台通用计算机的想法,名叫分析引擎(Analytic Engine)。 

通用计算机和这种专门用来计算数值的计算机有本质的区别,因为它会涉及到编程。

巴贝奇在意大利都灵路演的时候,听众中有一位年轻的上尉,名叫路易吉·梅纳(后来成了意大利的首相)。 这位上尉用法语写了一篇文章介绍这太构想中的机器。 后来, Ada把这篇文章翻译成英文,并且添加了自己的一些想法,名为笔记。


路易吉·梅纳布雷亚上尉

Ada 的这篇笔记, 奠定了她计算机研究鼻祖的历史地位。

Scientific Memoirs, 登载Ada笔记的杂志

在这篇文章中, Ada的贡献主要有四个:

  1. 提出了可编程的通用机器的概念
  2. 提出机器不仅能做数学运算, 只要是可以用符号表示的逻辑,都可以用机器来计算
  3. 设计出了一步一步工作的程序,首次提出算法的概念,子程序的概念,递归循环的概念
  4. 发出人工智能第一问:机器能思考吗?  100年后, 图灵同学把这第一问命名为 “Lay Lovelace的反对” 因为Ada认为,机器永远不能有自己的独创的想法,也就是不会思考

最后, 给同学们总结了一下这次分享的故事中,希望学生们能够认识到

有关未来的创造和发明:

1. 数学是计算机科学的基础 (鼓励学生们学好数学)

2. 艺术和技术相结合的时候,更容易出现不同寻常的创造(鼓励学生们不仅要学好艺术,而且要学好 科学技术) ,培养对数学、艺术、技术的兴趣

3. 关注别人是怎么想到的, 别人思考问题的方式

4. 女生是可以学编程的

5. 发现你身边的问题,试着用技术来解决。

后记:

1. 美国国防部据说花了10年的时间,把所需软件的全部功能混合在一种计算机语言中,希望它能成为军方数千种电脑的标准。1981年,这种语言被正式命名为ADA(阿达)语言,以纪念这位“世界上第一位软件工程师”。

2. 计算机科普知识即使对于六年级的学生,采取纯叙述的方式,可能也不是太有效。 尽管如此, 能够发现班上有几位阅读面广的学生, 很是很欣慰的。这些学生如果愿意来学习编程,我们是非常高兴的。

课堂照片:

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用*标注