2020-12-10 为什么我们要学习Hello World

从Hello World开始

大部分开发者,甚至所有开发者,只要接触过编程,编写的第一个程序都会是Hello World,譬如梦开始的地方——C语言

#include<stdio.h>
int main(){
    printf("Hello World");
    return 0;
}

当然你也可能从Java,从Python,从其他的地方开始。

public class client{
    public static void main(String[] args){
        System.out.println("Hello World")
    }
}
print('Hello World')

Hello World成为大部分语言或者框架或者技术的起点,Java的Hello World,Python的Hello World,都是一个简单的打印Hello World到控制台当中的语句,所谓的控制台(console)就是初学者不满的黑框框,事实上这个黑框框会贯穿始终,甚至会觉得这个黑框框高效简洁,越来越喜欢这个黑框框,初学者可能还没有这样的体会,不过不影响我们的讲述。

当然也有其他形式的Hello World,譬如你在学习神经网络的时候,它的Hello World就是搭建一个识别手写数字的神经网络,听起来和打印到控制台上一个字符串是云泥之别,客观上来讲,这确实是神经网络学习上的一个Hello World项目。你在学习Vue框架的时候,你的Hello World也可以是一个vue文件,在网页上显示一个Hello World,也更可能是一个玩具网站,因为当你学习到Vue时,前者不能很好的满足你学习的欲望了。你在学习Spring Boot或者其他后端框架的时候,你的Hello World是一个发布的服务接口,请求这个接口,得到Hello World。

这些概念可能对于初学者来说十分的陌生,不过你需要知道的是,当你实现了Hello World的时候,你便可以学习更多,实现更多,就像你学说话一样,学会了简单的词汇,逐渐就能学会复杂的词汇与语句了。

那么Hello World到底是什么呢

诗意一些,Hello World是你通过另外一种方式向世界,尤其是向互联网世界打招呼的方式,是你学习某种技术的起点,迈出的第一步,你的学习过程中会不断的尝试不同的Hello World,大家都知道计算机技术更新换代速度快,不断的学习是我们要秉持的原则,也是我们能乘风破浪的内在驱动力。

直白一些,Hello World代表的是我们初步接触了某种技术的大门,我们能在这样的基础上去学习更多的技能,创造更多的可能,似乎这样讲也是比较诗意的。总而言之,你能完成Hello World,你可以骄傲的别人说我开始学习某种语言或者某种技术了,随着学习过程的深入,相信每个人都会对Hello World有自己独特的理解与羁绊,能感受到Hello World的魅力。

如果你是初学者,那么你可以认为他是你一种新的打招呼方式,也可以认为他是你学习的起点,也可能是终点(对于许多你浅尝辄止的技术,Hello World确实是终点了)。

从Hello World理解我们所编写的程序

依然以C语言为例,因为它是最基础,最通用,最直白的高级程序设计语言了。如果你觉得他不够高级,那你可以去学习学习汇编语言~

#include<stdio.h>
int main(){
    printf("Hello World");
    return 0;
}

相信逛CSDN的你一定写过这五行代码,首先抛开代码本身不谈,你是用什么编写的这五行代码呢?为什么使用文本编辑器敲出来的它们没法调出一个黑框框显示Hello World呢?我写的Hello World究竟是什么呢?

大学当中C语言几乎是所有专业的必修课程,老师推荐给大家使用的第一款写代码的程序,也就是我们说的编译器,常是Code Blocks(老款)或者Dev C++,扑面而来的二十一世纪初中小学信息课的味道,像素风的字体,单调的配色与不知所云的各种菜单名称,在颜值上就能劝退一大批学生了。然而实际上教授大家C语言的老师也很少使用这些编译器,纯粹是沿用教学方案下来的,对于我个人而言,其实这样“古老”的编译器也不无坏处,一些配置项的亲自实践是有助于日后掌握更加复杂的编译器的,也能帮助大家锻炼良好的心态以及编码习惯。也有同学直接上手Visual Stdio或者VS Code或者Clion去执行这样五行Hello World,发现行不太通,那么这时候你就需要根据提示信息修正你的Hello World了。

那么什么是编译器呢,中华文化博大精深,翻译过来的这三个字让大家已经有了一个大概的猜想,编可能对应编写/编辑,译对应翻译,器就是一个工具嘛,其英文名称为Complier,直译的话便是翻译器,不如编译器这个名称来的恰到好处。再深入一些,编译器的工作便是将你编写的代码(高级语言)转换为机器代码(低级语言),让人所想表达的东西告知机器去执行,这就是编译器的大致工作了。这里又涉及到了高级与低级语言的区别,这里的高级与低级并无高低的意味,只是高级程序设计语言方便人类阅读、交流、维护,低级语言是面向机器的语言,最终转换到机器代码就是通篇的晦涩代码了,当然不是大家想象的通篇1010,虽然实际上电路执行的确实是1010,但大部分情况下,这种低级语言也不会是1010的形式。

那么为什么一个txt文件无法调出一个黑框框打印我的Hello World呢?常常探索计算机的同学可能觉得改一下后缀,将.txt改为.bat或者.c .cpp是不是就能执行了呢,遗憾的是都不可以,你的C语言可不会被bat执行掉,bat所执行的是另一套语言。编译器提供的功能包括编辑与翻译,这个翻译便对应《编译原理》当中的编译流程,这一部分的实现实际上是极为复杂的,与Hello World是天上地下之分,不过编译器帮助你解决了这个复杂的过程,让Hello World可以正确的显示在黑框中。如果你对这一过程感兴趣,可以去检索编译相关的知识,不感兴趣的话,你只需要知道你的代码被编译器交给了另一个程序去划分、分析、生成、执行了,C++/C语言中,这部分交给了Microsoft C++或者gcc与g++去完成,Python语言中,交给了python.exe去完成,Java语言中交给了Java虚拟机去完成,总之,高级语言都会有对应的翻译阶段,才能让你能读懂的高级语言让机器也懂。

回到代码本身,短短的五行代码实现的功能是将Hello World显示在黑框当中,可能你觉得这一过程似乎有些繁琐,远不如自己在黑框中敲打来的快,但是这两者的过程却截然不同。老师应该都会逐步讲解五行代码的意义,分别是引入stdio.h这个头文件,声明程序主函数,在控制台输出Hello World,主函数返回一个0,最后一行的“}”也是不可缺少的,它代表你的主函数到这里就结束了,如果不写,编译器会提示你这里发生了语法错误,因为这个花括号的缺失会导致语法分析无法正常进行。心细的同学可能会探寻主函数与返回0的关系,简单来说,主函数会被识别为执行的函数,与其他函数作区分,返回代表告知系统程序结束,一般的,C语言当中只包含一个主函数,多个主函数会报错,且多个主函数想实现的功能,一个主函数也可以完成。至于为什么有主函数以及主函数的名称以及返回类型,又是另外的故事了。

printf()会被大家当做一个用于打印结果语句,实际上他也是一个函数,后面的括号与printf是密不可分的(当你学的足够深入时,他们其实也可以分开,即函数指针的概念),括号中包含的内容是函数所接受的参数,当你去掉Hello World的引号时,会引发异常,这是因为引号括住的Hello World代表的是一个const char *类型的数据,是规定可以被接受的参数,去掉括号的Hello World无法被识别,因为他没有被定义,系统无法得知其含义。那么再来看一下Hello World,是不是感觉不太一样了

#include<stdio.h>  // 引入stdio.h
// 主函数声明
int main(){
    // 调用stdio.h中的printf(),接受一个常字符串参数
    printf("Hello World");
    // 程序结束 返回0
    return 0;
}

Hello World下还有什么

一般情况下,掌握了上述知识,可以说自己对于Hello World有了一个比较深的了解了,我可以说出每行代码的意义,作用,那么再来一个问题,你的Hello World是怎么样运行的呢?

软件层面上,可以预见的是你的代码经过了编译器的处理,转换成了机器可以执行的代码,准备命令系统执行,首先程序将会装载进入一个进程当中(为什么是进程,不是线程),系统为其分配所必需的空间(内存中还是硬盘中,缓存又是什么样的角色,我们说的堆栈与全局区又是什么),这些过程都是变相的“计算”过程,完成了一系列准备工作之后,系统将遵循你的命令,执行代码,调用出命令提示符窗口,显示Hello World,结束程序,释放空间。

硬件层面上,小小的Hello World调用了计算机的CPU、内存、总线等等硬件设备,为Hello World保驾护航。

所以,你懂了Hello World嘛?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值