专栏首页华章科技当年发明hello, world的大神,后来怎么样了?

当年发明hello, world的大神,后来怎么样了?

导读:对于程序员来说,"hello, world"就像小学一年级数学课上的1+1,一个简单而舒适的起点。也正如字面意思所说,它将引导你开启一个新的世界,一个等着你用好奇心去创造、去改变的新世界……

"hello, world"最初是布莱恩·柯尼汉(Brian Kernighan)在《B程序设计语言的入门教程》中最先使用的。本文的主角就是布莱恩·柯尼汉,除了“发明”了"hello, world"之外,他被网友和媒体戴上了各种头衔——“历史上最伟大的十大程序员”、“十五位计算先驱”等等,他与丹尼斯·里奇(Dennis Ritchie)共同写作了C语言的第一本著作《C程序设计语言》,当今的程序员们逃不开他的影响力。

▲年轻时的布莱恩·柯尼汉,图片来自于网络

与高高在上的“大神”形象形成反差的是,在普林斯顿大学任教的布莱恩·柯尼汉教授,每年秋天的开学季,都会给非计算机专业的学生,讲授一门名叫“我们世界中的计算机”的课程(COS 109: Computers in our World)。这门课的目的其实非常纯粹,就是科普有关计算机的最基本常识,让每一个人都能在工作和生活中更好地使用电脑。

本文写作时刚好赶上开学季和教师节,这里就先遥祝教授节日快乐吧!

01 "hello, world"的前世今生

1972年,在贝尔实验室内部技术文件《B程序设计语言的入门教程》("Introduction to the Language B")中,布莱恩·柯尼汉第一次使用了"hello, world"作为编程案例。后来在《C程序设计语言》中,布莱恩·柯尼汉再次将"hello, world"写进案例。随着这本经典著作的大卖,"hello, world"也流行起来,并逐渐成为具有特定象征意义的文化符号。

▲布莱恩·柯尼汉1974年写在纸上的"hello, world"程序C语言代码及签名

关于"hello, world"的准确来历,2011年,布莱恩·柯尼汉在接受福布斯印度采访时说:

我的记忆已经模糊了。我记得的是,我看过一个卡通片,里面一个鸡蛋和一只小鸡,小鸡说:“你好,世界”。

"hello, world"作为一个特定词组,它的标准写法是:两个单词的开头字母都是小写,单词间用英文半角逗号隔开,逗号后面有一个空格。因为这就是最初的"hello, world"程序输出结果的样子。当年的B语言程序是这样写的:

今天的几种的常见语言中,你可以这样输出"hello, world":

  • C
  • Java
  • Python 2
  • Python 3
  • Ruby
  • Kotlin

02 “历史上最伟大的十大程序员”

前些年,数据叔看过一篇网文《历史上最伟大的十大程序员》,布莱恩·柯尼汉跟比尔·盖茨、Java之父詹姆斯·高斯林(James Gosling)、Python之父吉多·范罗苏姆(Guido van Rossum)等伟大名字一起入围榜单。上榜的缘由显而易见,他关于C语言、Unix系统的很多工作,40年来一直对后人产生深远的影响。

▲布莱恩·柯尼汉在贝尔实验室“向丹尼斯·里奇致敬”活动中发表演讲,图片作者:Ben Lowe,来源:Flickr

1978年,布莱恩·柯尼汉和C语言之父丹尼斯·里奇合著了《C程序设计语言》,这本书毫无争议地成为C语言最权威的教材。由两位作者姓氏开头组成的短语"K & R"也如同"hello, world"成为固定词组。"K & R"除了指代两位作者之外,也被认为是最早的代码风格。

▲《C程序设计语言》,点击图片了解更多

此外,布莱恩·柯尼汉参加了UNIX系统、C语言和许多其他系统的开发。他是AWK语言和AMPL语言的发明者。

布莱恩·柯尼汉生于加拿大多伦多,曾在贝尔实验室计算科学研究中心担任高级研究人员,长期在普林斯顿大学任教。

▲听布莱恩·柯尼汉讲述C语言的往事,英文字幕,来源:Computerphile

03 普林斯顿计算机公开课

从1999年开始,布莱恩·柯尼汉教授在普林斯顿大学开设了一门名叫“我们世界中的计算机”的课程(COS109: Computers in Our World),这门课是向非计算机专业的学生介绍计算机基本常识的,多年来大受学生追捧。选修这门课的学生来自普林斯顿大学政治、历史、古典文学、经济、音乐和艺术等专业,几乎涵盖了人文和社会科学的各个专业。

除了向学生讲解计算机理论知识,这门课还有相应的实验课——学生可以试着用流行的编程语言写几行代码,大家一起讨论苹果、谷歌和微软的技术如何渗入日常生活的每个角落。

课程从CPU、RAM、硬盘、硬件、软件讲起,但并不是一些枯燥无味的陈词滥调。课程的内容还包括很多当今最热点的话题:社交网络、数据挖掘、云计算、隐私、安全、比特币……

2011年,柯尼汉教授将课程讲义整理成"D is for Digital"(中文版名为《世界是数字的》)一书出版。2017年,随着课程内容的更新和时代的进展,柯尼汉教授又编写了"Understanding the Digital World",今年4月,这本书的中文版《普林斯顿计算机公开课》上市。

▲《普林斯顿计算机公开课》,点击图片了解更多

在《普林斯顿计算机公开课》一书的前言中,柯尼汉教授提到了斯诺登的棱镜门事件和美国国家安全局对德国总统默克尔的窃听,并表示“科技并非人们想象的那么美好和神奇”。但其实他讲授的这门课程,正是致力于让科技创造美好和神奇。

也许是数据叔没上过段位太高的大学吧,总之,我是没见过哪位大神级的人物有耐心给兢兢业业地给非本专业的本科生讲课,也不知道听大神讲科普是怎样一种体验。这位"hello, world"的原创者,多年来一直手把手地教一代又一代的年轻人学会"hello, world",引领他们对计算机科学的新世界say hello。

04 致敬

最后,数据叔非常想在这个中国教师节即将来临的日子里对教授先生表达一下敬意。不过语文没学好的数据叔真的很词穷。我想,对于柯尼汉教授的课程、《普林斯顿计算机公开课》这本书,以及他在计算机科学多个领域的贡献和影响力,是很难用“感谢”“致敬”之类的苍白词汇表达的。

所以怎么办?要不,买本书吧……

相关参考:

  • Brian Kernighan - Wikipedia https://en.wikipedia.org/wiki/Brian_Kernighan
  • Brian Kernighan: No one Thought C Would Become So Big - Forbes India http://www.forbesindia.com/interview/special/brian-kernighan-no-one-thought-c-would-become-so-big/29982/1
  • 《普林斯顿计算机公开课》,作者:布莱恩·柯尼汉,译者:刘艺、刘哲雨、吴英,机械工业出版社,ISBN: 978-7-111-59310-2
  • 百度百科hello world词条
  • 盘点:十大历史上最伟大的程序员

本文分享自微信公众号 - 大数据(hzdashuju)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-09-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 安装和配置 Eclipse

    之前安装了 Java 并且配置好了 Java 的环境变量,现在来搞一下开发环境,下面就是下载安装和配置 Eclipse 的教程。

    伪君子
  • 网络层【第一篇】

    在当今我们是使用无连接的方式的。网络提供数据报服务,无连接的、尽最大努力交付的数据报服务。网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(...

    Java3y
  • 讨论微服务之前,你知道微服务的 4 个定义吗?

    关于“什么是微服务”的问题,其实并没有一个统一的认识。这些年在不同的场合里和不同背景的朋友都在探讨微服务。但聊得越多,就越发现大家聊的不是同一回事。和 Dev...

    顾宇
  • 关于ribbonClient配置的一个坑

    不知道从哪个版本起,给ribbon配置物理的server list起,单纯配置xxx.ribbon.listOfServers不起效果了,于是就开启了埋坑之旅。

    codecraft
  • 手把手教你爬取Instagram博主照片和视频

    原文:https://www.jianshu.com/p/b2e077c07c70

    用户2769421
  • RESTful API教程:学习关键的Web服务设计原则

    原题:RESTful APIs tutorial: Learn key web service design principles

    yuanyi928
  • 安装和配置 Java 环境

    下面的在 win7 32 位电脑上安装 Java 的过程,目前最新的是 Java 10,由于 Java 10 Windows x86 的版本,所以只能下载和安装...

    伪君子
  • 物理层

    物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。

    Java3y
  • webmagic小试牛刀

    codecraft
  • Java 实现区块链中的区块,BLOCK的实现

    区块6个属性的说明-Hash 区块的hash值是整个区块各个内容整体计算出的hash值

    吴生

扫码关注云+社区

领取腾讯云代金券