为什么是「Hello World」

前段时间我看了美国网络杂志 Slate 发布的一篇文章,他们邀请了计算机科学家、软件开发人员、历史学家、政策制定者以及新闻工作者,一起评选出 75 个改变世界的代码片段。 其中既有 HTML 超链接、IRC 这些有划时代意义的代码,也有让人又爱又恨的弹窗广告、PageView 跟踪像素,还有提高大家安全意识的病毒代码,如莫里斯蠕虫,以及产生了致命错误的代码,比如前几年波音 737 Max 发生的软件设计事故等。 代码对于程序员来说是既熟悉又陌生,可能它现在只是实现了某个功能,过个三五年再看,也许会“变了味”,成了你眼中的烂代码。 有些则历久弥新,越来越好,创造了互联网,甚至改变了人们的生活。 有些已经完全不受控制,成了无法维护的程序,散落在互联网的大潮里。 更多的代码还是安静的躺在那里,平平无奇,默默运行,支撑着无数应用和服务的正常运行…… 我们常说程序员是个充满创造性的工作,每个热爱编程的人都在编写代码的过程中享受着创世的乐趣,但几乎没人能预测出代码的未来。 正如《纽约时报》特邀撰稿人克莱夫·汤普森(Clive Thompson)所说,“代码产生的影响可能会让所有人感到惊讶,包括写代码的人在内。 我在 Slate 评选的 75 个改变世界的代码片段中选了 2 个比较有意思的: 一个是每个刚学编程的人都会敲出的“Hello,World”,另一个是知名的蠕虫病毒——莫里斯蠕虫。 下面,我就跟大家聊一聊这两个代码背后的故事。 先来说说“Hello,World”吧。 有一个笑话说,某程序员对书法十分感兴趣,于是退休后花重金买了上等的文房四宝。 一天,他饭后突然来了雅兴,决定沐浴更衣,焚香沏茶,磨墨拟纸,诚心正意,手起笔落写下: Hello,World! 对程序员来说,“Hello,World”真是再熟悉不过了,它是开发者用来测试系统的第一个程序,最早可以追溯到 1972 年。 当时,贝尔实验室成员布莱恩·柯林汉(Brian Kernighan)在《B程序设计语言的入门教程》中首次提到这个字符串。 后来,柯林汉和 C 语言之父丹尼斯·里奇合著的《C程序设计语言》中把“Hello,World”拿来做示例,随着这本书的畅销,“Hello,World”也越来越受欢迎,以至于现在几乎每种程序设计语言都拿它做第一个例子。 “Hello,World”这两个单词究竟是怎么想出来的? 连柯林汉自己也记不清了。 他在接受福布斯杂志访谈时说自己的记忆非常模糊,也许是看到了一个卡通片,里面有一个鸡蛋和一只母鸡,母鸡说了句: “Hello,World”,然后就拿来用了。 经典的诞生就是这么草率,但这并不影响“Hello,World”成为一个重要的程序。 它有多重要呢? C++ 之父本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)曾在《C++程序设计原理与实践》中这样描述:
“Hello,World”的目的是让我们熟悉基本的编程工具。 首先,我们通过“Hello,World”这种简单程序学习有关工具的基础知识,然后,我们再逐步学习更复杂的程序。
对于刚学习编程的人来说,“Hello,World”是一个很容易实现的小任务,也能让人早早获得成就感,从而激发学习的乐趣。 不过在 20 世纪 70 年代,“Hello,World”的作用远不止于此。 在当时,计算机在人们心中是带有贬义色彩的,因为它既复杂又昂贵,还需要专门的人进行维护保养。 直到 PDP-11 出现,才有越来越多的人接受计算机,并掀起了 C 语言学习热潮,成千上万的人开始阅读《C 程序设计语言》,认识“Hello,World”。 算法学家约翰·蒙特(John Mount)认为,“Hello,World”受到了爆炸性的追捧,这表明了一个时代的到来。 在那个时代里,计算机科学家不需要再说服别人去相信计算机的实用程序是有形的,一个简单的“Hello,World”就可以说明一切。 “Hello,World”还有一层意义,因为它翻译过来就是:你好,世界。IBM AI 设计主管克里斯·诺赛尔(Chris Noessel)这样评价:“Hello,World”天真、友善,而且有助于说明程序员的代码可产生的影响范围,那就是全世界。在准备用代码改变世界前,你确定不先和它打个招呼吗? 除了以上几层含义,很多程序员还会把自己输出的第一个“Hello,World”当做他们开始编程的一个仪式。 回想我当年第一次在计算机上输出“Hello,World”的时候,我感受到了计算机世界里的第一缕阳光。 说完了正面的,再和你聊聊产生负面影响的代码片段: 莫里斯蠕虫 ,作为第一个被主流媒体广泛关注的网络病毒,它背后的故事也很精彩。 莫里斯蠕虫设计的很简洁,但简洁并不等同于破坏力弱 哪怕只有一行代码,它也会成为杀伤力极强的病毒,例如“fork bomb”,算上空格只用了 13 个字符: :(){ :|:& };: 莫里斯蠕虫出现在 1988 年。 当时,23 岁的康奈尔大学研究生罗伯特·莫里斯想知道有多少台设备连接了互联网,于是他写了个可以在计算机之间进行传播的小程序,并要求每台机器将信号发送回控制服务器,以进行计数。 莫里斯最初的设计是当网络空闲时,程序会在计算机间“游荡”,当有机器负荷过重时,程序可以从空闲计算机“借取资源”,从而达到网络的负载平衡。 听上去是个无害的网络实验,但最终演变成了一场灾难。 因为莫里斯设计的这个程序在入侵计算机前会查询它是否已经被感染,即便得到了“是”的答案,程序也会按照 1/7 的几率进行复制,一些计算机会遭到重复感染,每次感染都导致运行变慢直到完全无法使用。 在当时,约有 6 万台设备接入互联网,遭到破坏的大概占到 10%,包括 NASA、知名大学,还有美国军事基地等,损失的资料不计其数。 美国政府审计办公室估算,莫里斯蠕虫造成的损失为 1000 万至 1 亿美元。 莫里斯蠕虫给当时蓬勃发展的互联网浇了一盆冷水,它让人们意识到互联网虽然发展很快,但安全却很难得到保障,也正是从那时开始,人们越来越重视网络安全。 可能莫里斯自己也没预料到,这段代码能产生这么大的影响,一切都超出了他的控制。 而他也受到了相应的惩罚,被判处 3 年缓刑,400 小时社区服务及一万美元罚金。 有时就是这样,使用不当或者心术不正,你写出来的代码就会变成凶器,害人害己。 我相信每个程序员最初的梦想都是好的,学习技术,改变世界,但如果忘了自己作为普通公民应该肩负的责任,哪怕代码写的再好,也是没有温度的。 代码安全是多么重要啊,最后继续推荐极客时间刚上线的安全专栏: 安全攻防技能 30 讲》,注册用户可以免费试读 4 篇。 时候口令码「ANQUAN000」支付再省 5 元。 为什么是「Hello World」_第1张图片

你可能感兴趣的:(为什么是「Hello World」)