“Hello, World!“ 历史由来

布莱恩·W.克尼汉(Brian W. Kernighan)—— Unix 和 C 语言背后的巨人

在这里插入图片描述
布莱恩·W.克尼汉在 1942 年出生在加拿大多伦多,他在普林斯顿大学取得了电气工程的博士学位,2000 年之后取得普林斯顿大学计算机科学的教授教职。

1973 年,他与 Shen Lin 合作共同完成了两个知名的 NP-complete 优化问题的解决方案:图划分问题和旅行推销员问题。

Graph partition 图形分区

在数学中,图分区是通过将图的节点集划分为互斥的组来将图简化为较小的图。在组之间交叉的原始图的边将在分区图中产生边。如果生成的边的数量与原始图相比较小,则分区图可能比原始图更适合分析和解决问题。

通常,图分区问题属于NP难题的范畴。这些问题的解决方案通常使用启发式和近似算法得出。然而,均匀图分区或平衡图分区问题可以证明在任何有限因子内都是 NP 完备的。

S. Lin and B. W. Kernighan.1970
An Efficient Heuristic Procedure for Partitioning Graphs
http://eda.ee.ucla.edu/EE201A-04Spring/kl.pdf

旅行推销员问题(Travelling Salesman Problem, 又称为旅行商问题)

TSP 问题是一个多局部最优的最优化问题:有 n 个城市,一个推销员要从其中某一个城市出发,唯一走遍所有的城市,再回到他出发的城市,求最短的路线。

S. Lin and B. W. Kernighan.1973
An Effective Heuristic Algorithm for the Traveling-Salesman Problem
https://www.cs.princeton.edu/~bwk/btl.mirror/tsp.pdf

布莱恩·W.克尼汉不仅是著名的 K&R(Kernighan and Ritchie)中的 K,是 AWK(Alfred Aho、Peter Weinberger 和 Brian Kernighan)中的 K,也是 AMLP(A Mathematical Programming Language,数学编程语言)的创造者之一。

在编译器 Ratfor、文档编制预处理器 Pic、Grap 和数学排版语言 Eqn 等这些重要研究成果背后都有布莱恩·W.克尼汉参与的身影。

1974 年,他写的第一本书,是和比尔・普劳格合著的《The Elements of Programming Style》,在这本书中出现了一个以他名字命名的定律 ——Kernighan’s Law

Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it?

– Brian Kernighan, 1974

Kernighan’s Law每个人都知道,调试在一开始就比编写程序困难一倍。那么,如果您在编写它时尽可能地巧妙,又如何来调试它?

1976 年,他和比尔・普劳格合著《Software Tools》,意在向非 UNIX 系统上编写 Fortran 的程序员传播 UNIX 工具理念。

软件工具

所谓 “软件工具” 就是计算机用户为了设计和实现其所要求的实用程序而运用的一整套方法和措施。

作者选用 Raton (Rational Fortran) 这种结构语言以试图广泛地阐述设计和实现较为理想的各种程序设计方法。

了解 Fortran,PL/1,Cobol,Algol,Pascal 等一类语言的读者很快就会掌握 Ratfor 这种结构语言程序。并以这种程序为基础,去理解掌握和设计书写具有广泛使用价值的好程序;去使用现有的一些方法或者改进一些原有的方法编写出高效而可靠的应用程序。

1978 年,他与 C 语言之父丹尼斯・里奇合著了《The C Programming Language》,该书广为人知,被 C 语言开发者们尊称为 “K&R 手册” 和 “C 语言圣经”,多年来被当作 C 语言的 K&R C 非正式的标准说明。作为 编程语言入门的示范传奇程序 "Hello, World!"—— 计算机行业人踏上代码征程的初始徽章,也源于本书

布莱恩·W.克尼还撰写了《The Unix Programming Environment》,本书对 UNIX 操作系统的编程环境做了详细而深入的讨论和指导。

布莱恩·W.克尼汉在普林斯顿大学为非计算机专业学生开设了一门介绍计算机技术基础的课程,根据课程讲义编写《D is for digital》。书中解释了当今计算和通信领域的工作方式,讨论了新技术带来的社会、政治和法律问题。

2011 - D is for digital – What a well-informed person should know about computers and communications

2017 - Understanding the Digital World – What You Need to Know about Computers, theInternet, Privacy, and Security

Hello World

1972 年,在贝尔实验室成员布莱恩·W.克尼汉撰写的内部技术文件《A Tutorial Introduction to the Language B》中首次提到了 “Hello World” 这一字符串。当时,他使用 B 语言撰写了一个用于演示外部变量的示例程序:

main( ) {extern a, b, c;putchar(a); putchar(b); putchar(c); putchar('!*n');
}a 'hell';
b 'o, w';
c 'orld';

这个程序将在终端打印出 “hello, world”,然后附上一个换行符。之所以这一短语被拆分成多个变量记录,是因为 B 语言中的每个字符常量只能容纳 4 个 ASCII 字符。

1974 年,时值 C 语言取代 B 语言,在贝尔实验室的又一内部备忘录《Programming in C: A Tutorial》中,布莱恩·W.克尼汉用 C 语言再次编写了一个 Hello World 程序作为教学示例。这一程序在他和丹尼斯・里奇于 1978 年出版的《The C Programming Language》中得到继承:

main( ) {printf("hello, world\n");
}

由布莱恩·W.克尼汉撰写的“Hello, world”程序 (1978年)
在这里插入图片描述
在上例中,main () 函数定义了程序开始执行的位置。其主体由一条语句组成,即对 printf (print formatted,打印格式化)函数的调用,将使程序输出以参数传递给它的任何内容,在本例中是字符串 hello, world。

自此,Hello World 成为了电脑程序员学习新的编程语言的传统。但是,也有些人认为 hello, world 的字符串早于 1966 年的 BCPL 语言出现的时候已经出现。虽然相关的字词确实在发明者记录的文件出现,但是可以肯定的是,Hello World 在当时确实没有流行。因此,人们公认为布莱恩·W.克尼汉是令该字符串走进公众目光的人。

via : Hello World https://zh.wikipedia.org/wiki/Hello_World

纵观编程历史,“Hello World” 在向初学者介绍编码世界方面发挥了至关重要的作用。
虽然 “Hello World” 看似微不足道,但它不仅是一个初学者进入编程世界第一步的简单程序,也是承载着编码无限可能性之旅的开始。

Cover image for Say Hello to Programming: Writing "Hello, World!" in 50 Different Languages

扩展阅读

  1. “Hello, World”的历史 —— The History of ‘Hello, World’ - HackerRank Blog

    https://www.hackerrank.com/blog/the-history-of-hello-world/

  2. 300 种编程语言的 Hello World 程序列表 —— List of Hello World Programs in 300 Programming Languages – MYCPLUS

    https://www.mycplus.com/featured-articles/hello-world-programs-in-300-programming-languages/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/363604.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java--回顾方法的定义

1.修饰符 public 公共的 修饰String类型 2.返回类型 返回的值得类型 返回值为String(字符串)类型 3.break continue return的区别 break,结束整个循环 continue,结束本次循环 return,结束整…

21、matlab生成脉冲序列:pulstran()函数

1、matlab生成脉冲序列简介 MATLAB生成脉冲序列通常涉及到使用MATLAB中的函数或编程来创建具有特定时间间隔和幅度的脉冲信号。脉冲序列通常用于数字信号处理、通信系统测试等应用中。 生成脉冲序列可以采用以下方法之一: 使用MATLAB中的函数,例如squ…

mfc140.dll怎么安装?mfc140.dll丢失安装详细解决方法

当电脑出现找不到mfc140.dll丢失问题,我们需要怎么办?怎么解决mfc140.dll丢失问题?mfc140.dll到底是什么?下面我给大家详细介绍与分析,最重要的是mfc140.dll的解决方法! 一、文件丢失原因分析 在分析mfc14…

expandtabs()方法——tab符号转为空格

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 expandtabs()方法把字符串中的tab(\t)符号转为空格,tab(\t)符号默认的空格数是…

TS_开发一个项目

目录 一、编译一个TS文件 1.安装TypeScript 2.创建TS文件 3.编译文件 4.用Webpack打包TS ①下载依赖 ②创建文件 ③启动项目 TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或…

Keil5中:出现:failed to execute ‘...\ARMCC\bin\ArmCC‘

点三个点,去自己的磁盘找自己的ARM\ARMCC\bin

HBuilder X 小白日记01

1.创建项目 2.右击项目&#xff0c;可创建html文件 3.保存CtrlS&#xff0c;运行一下 我们写的内容&#xff0c;一般是写在body里面 注释的快捷键&#xff1a;Ctrl/ h标签 <h1> 定义重要等级最高的(最大)的标题。<h6> 定义最小的标题。 H标签起侧重、强调的作用…

《数据结构与算法基础 by王卓老师》学习笔记——1.4算法与算法分析

一、算法 1.1算法的研究内容 1.2算法的定义 1.3算法的描述 以下是算法的自然语言描述 以下是算法的传统流程图表示 以下是NS流程图表示 1.4算法和程序的区别与联系 1.5算法的五个特性 1.6算法设计的要求 Robustness也称为鲁棒性 二、算法分析 2.1算法时间效率的度量 2.1.1事…

【C++课程设计——演讲比赛系统】

文章目录 前言一、演讲比赛程序需求二、每个功能模块的实现1. 创建管理类(.h文件)2.1. 创建管理类(.cpp文件)3.创建参赛选手类(.h)4.将整体逻辑进行封装 测试项目总结 前言 在学习完C的stl容器后&#xff0c;我们来写一下小项目对其进行应用&#xff01; 项目名称为&#xff1…

[渗透测试] 任意文件读取漏洞

任意文件读取漏洞 概述 漏洞成因 存在读取文件的功能&#xff08;Web应用开放了文件读取功能&#xff09;读取文件的路径客户端可控&#xff08;完全控制或者影响文件路径&#xff09;没有对文件路径进行校验或者校验不严格导致被绕过输出文件内容 漏洞危害 下载服务器中的…

入门机器视觉的正确打开方式——徒手撸一个python+opencv实现的机器视觉简易调试工具(下)

目录 1.引言2.框架思路3.图像处理流程化的实现3.1如何解析图像流程数据结构3.2 使用networkx网络图库3.3 python实现 4.结论5.python源码PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源ps3.移动小车相关文章资源 1.引言 在当今AI时代&#xff0c;关于视觉…

05 threeJs基础---阵列立方体和相机适配体验立方体

1.增加相机视角fov 注&#xff1a; 范围更大&#xff0c;意味着可以看到渲染范围更大&#xff0c;远小近大的视觉效果更明显 fov:眼球张开的角度&#xff0c;0时相当于闭眼。aspect:可视区域横纵比。near:眼睛能看到的最近垂直距离。far&#xff1a;眼睛能看到的最远垂直距离。…

天气网站爬虫及可视化

摘要&#xff1a;随着互联网的快速发展&#xff0c;人们对天气信息的需求也越来越高。本论文基于Python语言&#xff0c;设计并实现了一个天气网站爬虫及可视化系统。该系统通过网络爬虫技术从多个天气网站上获取实时的天气数据&#xff0c;并将数据进行清洗和存储。同时&#…

Vue2中管理$bus事件,统一移除事件

1. vue2中使用了,很多bus,在有些地方忘记清理了,导致重复事件bug. 对bus进行改造,实现清除遗留. 下面的简单实现. 1.eventbus.js // eventBus.js import Vue from vue;class EventBusClass extends Vue {constructor() {super();this.listeners [];}on(event, callback, con…

SwiftUI八与UIKIT交互

代码下载 SwiftUI可以在苹果全平台上无缝兼容现有的UI框架。例如&#xff0c;可以在SwiftUI视图中嵌入UIKit视图或UIKit视图控制器&#xff0c;反过来在UIKit视图或UIKit视图控制器中也可以嵌入SwiftUI视图。 本文展示如何把landmark应用的主页混合使用UIPageViewController和…

【深度学习】服务器炼丹代码配置、Python使用指定gpu显卡运行代码

【显卡】服务器炼丹代码配置 写在最前面一、查看哪几块显卡能用二、使用指定gpu运行代码1、指定使用GPU0运行脚本&#xff08;默认是第一张显卡, 0代表第一张显卡的id,其他的以此类推&#xff09;2、指定使用多张显卡运行脚本 三、如何使用1、单块显卡使用2、多GPU训练使用Data…

使用minio搭建oss

文章目录 1.minio安装1.拉取镜像2.启动容器3.开启端口1.9090端口2.9000端口 4.访问1.网址http://:9090/ 5.创建一个桶 2.minio文件服务基本环境搭建1.创建一个文件模块2.目录结构3.配置依赖3.application.yml 配置4.编写配置类MinioConfig.java&#xff0c;构建minioClient5.Fi…

FullScreen API与F11快捷键的相关问题排查与解决

前言 某个项目需要点击全屏按钮将页面中某个容器内的元素进行全屏显示便于用户操作&#xff0c;点击退出全屏时显示原来的页面内容 问题 1&#xff1a;指定元素全屏存在部分元素无法显示 记得之前看 FullScreen 相关API时有印象可以让某一元素直接全屏显示&#xff0c;随即…

LeetCode 算法:翻转二叉树 c++

原题链接&#x1f517;&#xff1a;翻转二叉树 难度&#xff1a;简单⭐️ 题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 …

面对.rmallox勒索病毒:如何有效防范及应对

引言&#xff1a; 在当今数字化社会&#xff0c;网络安全问题日益严重&#xff0c;勒索病毒成为企业和个人不可忽视的威胁之一。最近出现的.rmallox勒索病毒更是给全球各地的用户带来了严重的数据安全问题。本文将探讨.rmallox勒索病毒的特点、感染方式及应对策略&#xff0c;…