出品:科普中国
制作:科了个普杨阳
监制:中国科学院计算机网络信息中心
王国维在《人间词话》里写道:古今之成大事业、大学问者,必经过三种之境界:“昨夜西风凋碧树。独上高楼,望尽天涯路。”此第一境也。“衣带渐宽终不悔,为伊消得人憔悴。”此第二境也。“众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。”此第三境界。概括了一种锲而不舍的坚毅性格和执着态度。
“知道自己不懂”是为第一境界;“不知道自己懂”是为第二境界;“知道自己懂了”是为第三境界。
无论你是小白,还是小白,还是小白,你在学习编程的过程中都会深深的体会到这三句话太准确了。学习编程意味着我们将要进入一个与日常生活经验迥然不同的新领域,这最初的曲折辛酸,以及逐渐初窥门径、小有所成并最终笑傲江湖、独当一面的欣喜正是上面所说的学习三境界的真实写照。这篇文章将要介绍计算机编程的前世今生,如果你想要了解程序猿这一高收入人群的真实生态,这篇文章就是IT界的《物种起源》,为你道尽它们的演化历程和苦乐悲喜。
电脑的诞生
首先我们热烈欢迎世界上最早的电脑登场,对,它的名字就叫安提基特拉机械,被认为是最初的电脑,展示于雅典国家考古博物馆。
此机械是在希腊安提基特拉岛附近的安提基特拉沉船里发现的,所以叫安提基特拉机械。它诞生于公元前年左右,属于模拟计算机,至今已有二千多年历史。类似的复杂工艺技术直到14世纪时欧洲制造了天文钟后才重新出现。它是古代人类智慧的最高杰作之一。
那么,真正的近代的电脑诞生于什么时候呢?答案是年,诺伊曼发明数字式电脑。此处应该有掌声。
诺先生规定用二进制替代十进制运算,并将计算机分成五大组件,他的思想为电子计算机的逻辑结构设计奠定了基础,并且已成为计算机设计的基本原则。
年,EDVAC计算机宣告诞生。由于他在计算机逻辑结构设计上的伟大贡献,诺先生被誉为「计算机之父」。
由上图可以得知,直到93年,我们现在一般用户熟知的window操作系统才诞生。
电脑程序运行的基本原理是什么?
感谢诺先生,没有他的发明,小编今天就不能够在电脑面前给大家科普了。接下来小编首先给大家分析一下开启计算机主机的那一瞬间,桌面蹦出来的画面是怎么回事。
在一台电脑里有很多程序。其中,计算机做任何事情之前必须存在和运行的最重要的程序是操作系统程序。对,没错。就是你每次开机时候看到的那个熟悉的画面,伴随着叮当叮当的音乐,世界首富比尔盖茨的微软公司就是靠发明这个windows系统发大财的。这是计算机的主要“系统程序”。此操作系统程序不仅控制硬件部件,还控制其他软件(许多应用程序),还可让计算机用户与计算机本身进行互动(比如通过键盘,触摸屏,语音激活等等)。实在是万能之神啊。
什么是计算机语言?
与人类语言的复杂多变一样,现在世界上已经有种以上的计算机语言了。当然其中也有很多几乎很少使用的语言,实际经常用到的语言只有20到30种。尽管如此,一个人要掌握太多计算机语言的话还是比较难的。
在那么多的程序设计语言中,学习哪个才好?下面是最常用的语言,程序猿们的本事可不仅仅是直立行走那么简单,掌握这些工具中的大部分,并且精通其中的一两种,才是一只合格的现代程序猿。
人类语言是指,人类用特定的格式和词汇来向他人发出指令,表达意愿,进行交流。不同种类语言的词汇和格式不尽相同,但可以达到相同的交流目的。
同样,我们也可以用“语言”来控制电脑,让电脑为我们做事情,这种语言叫做编程语言(ProgrammingLanguage)。我们先简单介绍一下常用编程语言。编程语言也有固定的格式和词汇,我们必须学会使用,才能在此基础上编写程序控制电脑。常用的编程语言有C语言,C++,Java,C#,Python,PHP,JavaScript,Go语言,Objective-C,Swift等等,每种语言都有自己的优点。
计算机是如何听懂编程语言的呢?实际上,如果没有编译器(一种专门程序)的存在,计算机是无法理解编程语言的。编译器用来将编程语言编写的指令转换为机器语言。打个比方,人类有自己的人类语言,计算机也有自己的语言系统。它们使用只包含1和0的二进制代码,1表示“on”,0表示“off”。编程语言更容易被人类所学习和掌握,而编译器编译出的计算机语言则更容易让计算机接受。
程序猿使用编程语言编写的程序代码,编译器可以理解,编译器会将源代码转换为二进制代码(目标代码),然后汇编程序帮助这个目标代码转换为低级指令,指示机器执行,最后重新获取结果。
为什么要有编译器的存在呢?
简单的回答是,虽然编程语言已经编写代码告诉计算机该怎么做了,但计算机只能理解两种不同类型的数据:开和关。实际上,一台电脑实际上只是一个开/关(晶体管)的集合。计算机所做的任何事情背后的真相只不过是无数晶体管的开闭组合。
二进制码就是作为1和0的表示的组合,其中每个数字表示一个晶体管。二进制代码分为字节组,8位数组表示8个晶体管。例如,11101。现代计算机包含数百万甚至数十亿个晶体管,这意味着无法想象的大量组合。
于是这里出现了一个问题,为了能够编写一个计算机程序,打出数十亿的1和0将需要超人的脑力和精力,编一个小程序可能需要一两年的工作。编程语言和编译器中,前者对人友好,后者对机器友好,两者通力合作,才能将人类的想法快捷而准确的传达给计算机。
为什么会存在那么多的计算机语言?
数百种不同的编程语言使我们有可能创建计算机软件,应用程序和网站。而无需编写二进制代码,他们让我们相对容易的编写,阅读和理解代码。同时,每种语言都带有自己特殊的编译器程序,它负责翻译我们编写的二进制代码,让机器明白我们的意图。
那么,为什么我们有这么多语言呐?
这是因为不同的语言被设计为用于不同的目的,一些可用于Web开发,一些用于编写桌面软件,其他用于解决科学和数字问题等。此外,编程语言也可以是低级或高级的。低级语言更接近计算机所理解的二进制代码,而高级语言更容易编程,因为它们接近人类的语言和思维模式,设计简单易于编写。几乎所有的主流编程语言都是高级语言。
编程语言生成的程序代码是什么样的?
程序是一种用特定编码语言编写的文本文件。程序文件中的代码称为源代码。每个编码语言都有自己的文件扩展名,用于识别用该语言编写的代码文件。例如,Python是.py。要编写程序,可以在纯文本编辑器(如记事本)中编写代码,并将文件保存到计算机。
如何运行一个程序,并实际得到它来执行命令?编码语言之间有所不同。一些语言保存到计算机后可以生成可以直接运行的单独二进制文件,而其他语言的程序由某些软件间接运行。例如,JavaScript程序文件将通过Chrome浏览器等运行。PHP程序文件将由像LAMP这样的Web服务器运行。
以hello.py文件为例,Python语言附带一个命令行,它将显示程序的输出文本“Hello,world!”。如果要将代码输入命令行并按enter键,程序将运行并且命令将被执行。是不是成就感油然而生啊。
运行程序时会发生什么?
电脑实际上并不了解“Hello,world!”这个短语,不知道如何在屏幕上显示。它只能理解开关。所以要真正运行一个命令,如打印“Hello,world!”,它必须将程序中的所有代码翻译成一系列可以理解的代码。
首先,源代码被翻译成汇编语言。汇编代码被翻译成机器语言。机器语言直接作为二进制代码执行。我们再来理解一些细节。编码语言首先必须将其源代码转换为汇编语言,一种使用单词和数字来表示二进制模式的超低级语言。根据编程语言不同,这可以用解释器(程序被逐行翻译)或编译器(程序整体翻译)来完成。
然后,编码语言将汇编代码发送到计算机的汇编器,该汇编器将其转换为计算机可以直接理解并直接作为二进制代码执行的机器语言。
结论
像二进制代码(计算机的母语)一样简单和原始的东西可以创建计算机软件这样复杂的东西,这是不是很令人惊奇呢?屏幕,操作系统,照片,视频,互联网,