这是一个最著名的程序。对每一位程序员来说,这个程序几乎是每一门编程语言中的第一个示例程序。那么,这个著名的程序究竟从何而来呢?

实际上,这个程序的功能只是告知计算机显示 Hello World 这句话。传统意义上,程序员一般用这个程序测试一种新的系统或编程语言。对程序员来说,看到这两个单词显示在电脑屏幕上,往往表示他们的代码已经能够编译、装载以及正常运行了,这个输出结果就是为了证明这一点。

这个测试程序在一定程度上具有特殊的象征意义。在过去的几十年间,这个程序已经渐渐地演化成为了一个久负盛名的传统。几乎所有的程序员,无论是在你之前,或在你之后,当第一次实现与计算机成功沟通之后,在某种程度上,他们的肾上腺素就会急剧上升(激动不已)。以下就是这个著名程序的诞生故事。

Hello World 究竟从何而来?

Hello, World 最早是由 Brian Kernighan 创建的。1978年,Brian Kernighan 写了一本名叫《C 程序设计语言》的编程书,在程序员中广为流传。他在这本书中第一次引用的 Hello World 程序,源自他在1973年编写的一部讲授 B 语言的编程教程:

main(){

 extrn a,b,c;

 putchar(a); putchar(b); putchar(c); putchar('!*n');

 }

a 'hell';

b 'o, w';

c 'orld';

但是非常不幸的是,当 Forbes India 杂志采访他的时候,他自己对这段传奇故事中一些记忆已经有点儿模糊了。当他被问及为什么选择『Hello, World!』时,他回答说,『我只记得,我好像看过一幅漫画,讲述一枚鸡蛋和一只小鸡的故事,在那副漫画中,小鸡说了一句‘Hello World’』。

鉴于 Hello World 这个计算机程序的广泛流行程度,这个起因看起来还是蛮合适的。

那个时候,无论是 Kernighan,还是他的同事 Dennis Ritchie - C 语言之父,都无法想象 C 语言以及这本教程书将会在今天如此之流行。他们所做的工作只是贝尔实验室的一个研究项目,而在当时,贝尔实验室也只是美国电话电报公司(AT&T)的技术研究与开发机构而已。

尽管没人能够科学地解释为什么 Hello World 如此地流行,但是,Hello, World 程序的确在计算机发展历史上成为了一个具有重要意义的里程碑。我们一起来回顾一下当时的历史环境。

襁褓中的变革

现在你可能很难想象,但是在 Hello World 连同 Kernighan 的编程书出版之前,计算机对于公众来说,几乎隐含着一种负面的意义。在1970年代,主机时代的计算机,不仅运行缓慢,体积庞大到足以占用整个一间屋子,而且还需要一位全职的科学家或者研究者来维护它。事实上,在1970年代后期之前,计算机科学家在编程的时候还要使用大量的打孔卡!

通常情况下,一般人认为计算机是一种不可触碰、复杂,而且极其昂贵的设施,它们仅仅适用于学术、政府或者国防。事实上,即使是那些专注计算机领域的工业巨头们也在努力克服这些障碍。当时谁也无法想到,事隔多年之后,也就是现在,如果我们暂时失去了我们的个人数字设备(如手机等),我们甚至会感到焦虑。

第一个著名的计算机应用的案例发生在1890年 - 为了收集和统计超过六千万美国人口的相关数据。另一个案例出现在1940年,也就是二战期间,Bombes & Colossus 计算机被用于破解德国人的通讯密码。

在1950年,世界上迎来了第一代商用计算机,如 Zuse 3 和 UNIVAC,在当时主要应用于算术运算,但如果你想要买到这些设备,需要花费上百万美元。

从教育相关的角度来看,绝大多数早期的有关编程语言的图书,如 FORTRAN 或 BASIC,常常都会从一点入手:计算机非常有用。这是算法工程师和研究者 John Mount 的一个重要观点。Mount 认为,Hello World 大范围流行开启了一个崭新的时代 - 计算机科学家不再需要说服社会和大众,计算的工具化特征已经所处可见。

例如,在1964年,一本名叫 My Computer Likes Me When I Speak Basic 的图书,在它的前言部分,专门讲述了计算机编程语言的一般性用途。而且,书中的第一个例子的输出结果就是『MY HUMAN UNDERSTANDS ME』。之所以使用这个示例的原因,目的是为了帮助人们理解计算机这个新生事物,并且希望告诉人们:你可以和计算机进行交流。实际上,动态规划(Dynamic Programming)在1956年才刚刚开启了将计算机应用于常规计算的实例。

在 C 语言以及 Hello World 程序流行起来之前,计算机并没有得到大范围的应用和普及,计算机行业也没有开始真正的腾飞。

Hello World,编程时代的真正来临

引发 Hello World 广泛传播的一个最主要催化剂,是 PDP-11 型计算机的面世,PDP-11 是一款在商业上极其成功的小型计算机。数字设备公司(DEC)以 $10,000 的单价,总共出售了六十万台。尽管如此,这种类型的计算机已经比当时价值几百万美元的大型机在价格上便宜了许多。另外,其中 PDP-11 16-bit 系列不要求使用打孔卡,你可以使用相应的编程语言直接与计算机进行沟通。在那个年代,这还是第一次。

有趣的是,为了加速社会的广泛接受度,数字设备公司并没有将其称为『计算机』。为了和以往那些大型主机相区别,数字设备公司改称其为『可编程的数据处理器』。当越来越多的机构开始采购越来越多的可编程计算机时,对于 C 语言编程书籍的需求也变得越来越旺盛了。

C 语言和 UNIX 操作系统首先在 PDP-11 这个机型上变得流行了起来。因此,在接下来的一段时间里,其他类型的商用计算机也开始支持这个 C 编程语言以及 UNIX,这种流行趋势最终促使成千上万的计算机相关工作者,开始阅读这本两百来页的《C 程序设计语言》。当然,这其中自然包括了 Hello World 这个例子程序。

在八十年代以及九十年代,几乎每一位曾在桌面软件领域工作过的程序员,都曾拥有一本《C 程序设计语言》。在当时,这本书大约售出了几百万本之多。

也许有很多不同的基本程序可供初学者动手尝试,但是截至目前为止,Hello World 则是其中最为著名的一个。每一位程序员都曾记得他们的第一个 Hello World 程序,因为对他们来说,这就是一个重大事件。也许有些人还没有意识到这一点,但是,当一名新程序员清除完一些障碍顺利抵达 Hello World 时,他的内心体验到的不仅仅是一种成功的喜悦,更重要的是,他正在亲身经历一个跨越历史的时刻。

原文:http://mp.weixin.qq.com/s/QdKvhUJAiHnmILKWqhG79Q

Hello World 程序的起源与历史的更多相关文章

  1. .NET程序员不加班——写在《华为工程师猝死,36岁,22月无休》之后

    我首先承认,有点标题党.因为这是我这个十年老码农——过了年就整整11年了,o(╥﹏╥)o——的个人观察.经验所得.如果有仍在加班的.NET童鞋,不要打我.一定要打的话,只有一个要求:不要打脸! 写这篇 ...

  2. 深入理解BS结构应用程序

    随着学习的深入,和编程经验的丰富,对BS应用程序有一些认识. 在一些讨论软件技术的QQ群里,或一些社区.BBS中,经常会有一些初学者会犯一些认知性的错误.比如经常会有一些朋友提这样的一些问题:“我怎么 ...

  3. 开发微信小程序必须要知道的事

    为什么是小程序? 为什么我们会开发小程序呢?或许是因为工作需要,或许是源于自己的追求(来自名利的欲望),但我要说--这是一种缘分,很美好的缘分,很多年后还值得庆幸的缘分 小程序目前可以分为三个阶段 一 ...

  4. 【转载】Java程序模拟公安局人员管理系统

    编程题:公安人员的管理系统1) 学生类:a) 属性:i. 身份号—默认没有,需要手动进行输入ii. 姓名iii. 性别iv. 年龄v. 密码vi. 居住地址vii. 注册日期viii. 人员的信誉程度 ...

  5. JavaScript---认识JavaScipt

    认识JavaScript 1.什么是JavaScript? JavaScript是属于网络的脚本语言,她被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies以及更多的应用,她更是因特 ...

  6. c语言的发展历程

    C语言的发展颇为有趣.它的原型ALGOL 60语言. 1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言. 1967年,剑桥大学 ...

  7. JavaScriptCore全面解析

    本文由云+社区发表 作者:殷源,专注移动客户端开发,微软Imagine Cup中国区特等奖获得者 JavaScript越来越多地出现在我们客户端开发的视野中,从ReactNative到JSpatch, ...

  8. The history of programming languages.(transshipment) + Personal understanding and prediction

    To finish this week's homework that introduce the history of programming languages , I surf the inte ...

  9. 1.揭开消息中间件RabbitMQ的神秘面纱

    当你看到这篇博文的时候,相信你至少已经知道RabbitMQ 是一个非常优秀的消息中间件,它使用专门处理高并发的Erlang 语言编写而成的消息中间件产品. 当然如果你不知道也没关系,读完本篇你将Get ...

随机推荐

  1. 洛谷 P1069 解题报告

    P1069 细胞分裂 题目描述 \(Hanks\)博士是\(BT\) (\(Bio-Tech\),生物技术) 领域的知名专家.现在,他正在为一个细胞实验做准备工作:培养细胞样本. \(Hanks\) ...

  2. .NET开发设计模式-获取某个接口下面所有的派生类

    using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...

  3. SSM-SpringMVC-16:SpringMVC中小论注解式开发之访问方式篇

     ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 访问方式可以指定,打个比方,你通过get方式进入登陆页面,通过post发送ajax数据库校验或者post提交 ...

  4. Linux时间子系统专题汇总

    关于Linux时间子系统有两个系列文章讲的非常好,分别是WowoTech和DroidPhone. 还有两本书分别是介绍: Linux用户空间时间子系统<Linux/UNIX系统编程手册>的 ...

  5. Eureka源码分析:Eureka不会进行二次Replication的原因

    Eureka不会进行二次同步注册信息 Eureka会将本实例中的注册信息同步到它的peer节点上,这是我们都知道的特性.然而,当peer节点收到同步数据后,并不会将这些信息再同步到它自己的peer节点 ...

  6. PHP异步请求

    正常情况下,PHP都是同步请求,脚本右上而下依次执行,必须等上一步请求好了,才能进行下一步操作,这种效率在某些时候是不必要的,如发送邮件等操作,是可以异步处理的. PHP异步也很不少插件,我们使用的是 ...

  7. .Net Core vs .Net Framework 如何为一个应用程序选择一个运行时

    .Net Core是下一件大事吗?我已经使用了一段时间了,我倾向认为它是.事实上,我们推测,在2018年,对这项技术熟练的开发人员将会有巨大的需求.但是它和.Net Framework的区别是什么?你 ...

  8. java处理图片--图片的缩放,旋转和马赛克化

    这是我自己结合网上的一些资料封装的java图片处理类,支持图片的缩放,旋转,马赛克化.(转载请注明出处:http://blog.csdn.net/u012116457) 不多说,上代码: packag ...

  9. [爬虫]scrapy框架

    Scrapy介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 所谓网络爬虫,就是一个在网上到处或定向抓取数据 ...

  10. https://blog.csdn.net/u011489043/article/details/68488459

    转自https://blog.csdn.net/u011489043/article/details/68488459 String 字符串常量   StringBuffer 字符串变量(线程安全) ...