现代的 “Hello, World”,可不仅仅是几行代码而已

2020 年 3 月 17 日 CSDN


作者 | Charles R. Martin
译者 | 弯月,责编 | 夕颜
头图 | 付费下载自视觉中国
出品 | CSDN(ID:CSDNnews)

 

新手编写“Hello,World”程序的传统至少可以追溯到1978年。但是,对于现代的程序员而言,什么才是恰当的“Hello,World”?

 

不久之前,一位客户要求我在AS/400上用RPG编写程序。引用罗巴切夫斯基的话来说就是:“боже мой!”(我的天哪!)

 

虽然我不想暴露自己的年龄,但我上次用RPG编写程序的时候,恐怕本文的大多数读者都还没有出生。要想构建这样的程序,我需要回忆如何使用KEDIT等编辑器,学习如何使用AS/400软件开发工具、构建测试库、编辑实际的程序,然后再编译并弄清楚如何运行。

 

虽说客户的程序很简单,但我不想直接开始写程序。于是,我创建了一个“Hello,World”项目。

 

有意义的传统

 

“Hello,World”程序的概念可以追溯到Brian Kernighan和Dennis M. Ritchie的著作《C编程语言》(第一版),通过编写一个小程序来确认你掌握了这门语言和环境,已做好准备尝试更复杂的功能。大多数C语言程序员编写的第一个程序都像下面这样:

 

1 #include <stdio.h>
2
3int main() {
4    printf("Hello, world!\n");
5    return 0;
6}


将这些代码保存到‘hello.c’文件中,然后输入以下命令(在UNIX系统上):

 

1$ cc hello.c
2$ ./a.out 

 

然后,你就可以看到输出结果:

 

1Hello, world! 


以上代码可以证明你确实能够用C语言编写、编译和执行程序。

 

Brian Kernighan和Dennis M. Ritchie在书中写道,构建C语言的程序意味着你掌握了启动一个C语言项目的基本步骤。 

这是最大的困难。为了克服这些困难,你必须能够创建程序文本,成功地编译、加载、运行并输出结果。在掌握了这些技术细节后,其他操作相对都比较容易。

好吧,我承认“其他操作相对都比较容易”这种说法略显荒诞,然而,这确实是学习所有编程语言重要的一步。

 

虽然编写“Hello,World”程序已成为编程界的一种传统,然而与许多传统一样,很多人虽然这么做却没有意识到其中真正的目的或价值。于是,有人在网上总结了一个Hello World集合,其中包含用近600种语言编写的“Hello,World”程序,从Ada到ZIM。许多IDE都可以编写基本的“Hello,World”程序,对于许多解释型语言(如Python)来说,“Hello,World”只不过是在解释器的REPL中键入print("Hello, world!")

 

不幸的是,这并不能提供太多实际的洞察力,而用Richard Hamming的原话来说,计算的目的是洞察力,而不是文字字符串。


 

“Hello,World”真正的意义是什么?

 

原本Brian Kernighan和Dennis M. Ritchie让大家编写“Hello,World”程序的重点不是在终端上输出“Hello,World”。相反,是为了确保你具备所有的工具,并对编写C程序所需的C语言知识和UNIX编程环境有基本的了解,而且还对构建程序的工具和方法有一定的了解,这才是启动一个项目最重要的第一步。

 

这一步通常比最初看起来更为复杂。如今,实际的项目不仅需要编辑器和编译器,还需要了解如何打包程序,如何搭建环境,如何计划维护版本控制,如何实际构建程序以及所需交付的产品编程项目。因此,尽管基本的“Hello,World”程序可能仍然只有五行代码,但是构建最初那个看似非常容易的“ Hello,World”可能要复杂得多。

 

启动一个新项目必然需要在进入“其他操作相对都比较容易”阶段之前,解决许多开发上的问题。

 

项目的“Hello,World”程序

 

为了某个项目构建适当的“Hello,World”实际上比较复杂,但收益也很大。考虑一个需要交付的项目,例如一个Web应用程序。除了选择语言之外,通常还需要选择前端和后端的框架。此外,你还需要确定如何托管第一个应用程序,以及如何管理和交付代码。

 

对于一个项目来说,恰当的“Hello,World”程序不仅仅是显示输出。你需要证明你已做好准备添加功能(如果你们采用SCRUM则为添加用户案例),然后经过一系列的操作将其推到演示和测试的应用程序版本。对于产品而言,恰当的“Hello,World”程序就是最低版的最低可行产品,它表明随着开发的进行,你可以提供有用的产品进行测试和使用。

 

什么才是恰当的“Hello,World”?

 

显然,根据不同的项目和环境,恰当的“Hello,World”程序也有所不同。我教过很多新手,一般我都会建议他们完成以下准备工作:

 

  • 一个单独的项目目录:保存所有代码的一个“文件夹”。
  • 在这个文件夹中初始化git代码库。没错,连我都开始使用git了。虽然这些基础的知识很容易学习,但我见过很多学生陷入了绝望,因为他们做了一些小的改动,结果并没有达到预期的结果,但他们不记得做了哪些改动,无法还原到旧版本。
  • 选择开发工具:编辑器或IDE,构建工具等等。
  • 与在命令行中调用编译器相比,可重复的构建过程更加健壮。
  • 然后才是实际的第一行代码。
 
在做完上述工作,而且还可以编辑、提交、构建和演示非常小的程序后,才算是准备好构建新功能了,同时这些工作还可以避免开发过程中遇到一些不愉快的错误。
 

建立一个专业的“Hello,World”
 
虽然很多人以为“Hello,World”程序只适合初学者,但实际上大多数项目都是从一个空目录开始的。一般,一个实际项目的“Hello,World”程序会遇到大量难题,而且过程很复杂。例如,在Maven中为Java程序创建非常基本的框架,通常需要建立十几个目录和子目录,才能用Java构建简单的“Hello,World”程序,而Maven生成和依赖项管理器程序还会将1350个文件下载到550多个目录中。
 
而且,不仅仅Java或Maven才会遇到这样的问题。使用create-react-app构建一个新的React应用也需要4304个目录和28678个文件。
 
显然,手工完成这些工作会让人发疯。这种复杂性迫使开发人员必须通过构建脚本来创建“Hello,World”级别的应用程序,但即使这些应用程序还不够完善,你仍然需要添加源代码控制,配置容器或持续集成管道或部署脚本。
 
虽然这些工作比原来的五行“Hello,World”复杂得多,但目的仍然是相同的:通过构建简单的应用程序,确保满足后续开发的要求。
 

良好的开端
 
任何规模的软件项目从一开始就面临着相同的问题:如何才能顺利启动项目、构建代 码、部署代码,才能让后续开发专注于构建满足实际客户需求的代码?
 
无论项目多么复杂,你都可以通过构建演示程序来确保一个良好的开端。虽然这个演示程序的功能非常有限,但你可以通过这个过程练习构建、测试甚至部署的整个过程。这才是最初提出“Hello,World”程序的初衷,如今这仍然是一个项目良好的开端。
 
原文链接:
https://stackoverflow.blog/2020/03/05/a-modern-hello-world-program-needs-more-than-just-code/

本文为CSDN翻译文章,转载请注明出处。  
【End】

推荐阅读 
百度工程师非法挖矿获利10万、被判3年;苹果反垄断案被罚11亿欧元;GitHub拟收购NPM | 极客头条
拿着 22 万美元年薪,混得还不如实习生?
如何用Jupyter Notebook制作新冠病毒疫情追踪器?

出生小镇、高考不顺、复旦执教、闯荡硅谷,59 岁陆奇为何如此“幸运”?

DevOps 转型时如何安全融入?对企业产出有何影响?2019年 DevOps 最新现状研究报告解读 | 原力计划

比特币最主流,以太坊大跌,区块链技术“万金油”红利已结束 | 区块链开发者年度报告

你点的每一个在看,我认真当成了喜欢
登录查看更多
0

相关内容

【硬核书】群论,Group Theory,135页pdf
专知会员服务
125+阅读 · 2020年6月25日
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
专知会员服务
171+阅读 · 2020年6月4日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
简明扼要!Python教程手册,206页pdf
专知会员服务
47+阅读 · 2020年3月24日
机器学习速查手册,135页pdf
专知会员服务
338+阅读 · 2020年3月15日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
21个必须知道的机器学习开源工具!
AI100
13+阅读 · 2019年9月13日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
已删除
创业邦杂志
5+阅读 · 2019年3月27日
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
资源 | 适合AI新手的9款人工智能开源软件
AI100
3+阅读 · 2017年11月13日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
用python和Tesseract实现光学字符识别(OCR)
Python程序员
7+阅读 · 2017年7月18日
Arxiv
20+阅读 · 2020年6月8日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
27+阅读 · 2017年12月6日
VIP会员
相关VIP内容
【硬核书】群论,Group Theory,135页pdf
专知会员服务
125+阅读 · 2020年6月25日
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
专知会员服务
171+阅读 · 2020年6月4日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
简明扼要!Python教程手册,206页pdf
专知会员服务
47+阅读 · 2020年3月24日
机器学习速查手册,135页pdf
专知会员服务
338+阅读 · 2020年3月15日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
相关资讯
21个必须知道的机器学习开源工具!
AI100
13+阅读 · 2019年9月13日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
已删除
创业邦杂志
5+阅读 · 2019年3月27日
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
资源 | 适合AI新手的9款人工智能开源软件
AI100
3+阅读 · 2017年11月13日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
用python和Tesseract实现光学字符识别(OCR)
Python程序员
7+阅读 · 2017年7月18日
Top
微信扫码咨询专知VIP会员