细说10月24号为什么是程序员的节日?

今天是10曰24日,有人把这个日子定为程序员的节日,因为1024这个数字和程序员密切相关。

下面我就为大家解密,1024跟程序员有什么关系,程序员写程序又到底是怎么回事。

我们所使用的电脑和手机装着各种各样的软件,能帮我们完成各种各样的任务,帮我们工作,供我们娱乐,这部神奇的机器似乎无所不能。

但是你关掉显示器,拆开机箱, 会发现里面只有密密麻麻的电路, 这些电路以一种神奇的方式运转, 帮我们完成我们想要做的事情。

就拿机箱中最主要的部件CPU来说,他其实是由无数个逻辑开关组成,每个开关只能表示两种值0和1,开关闭上就是1,开关打开就是0,就像手电筒一样,开关闭合,点亮灯泡表示1,开关放开, 熄灭灯泡表示0。这无数多个逻辑开关通过一种叫做继电器的电子元件连接,经过各种奇妙的组合,最终就是我们所使用的CPU。虽然我们使用的现代集成电路型CPU比这个要先进无数倍,基础运行原理却没有本质的变化, 它们依然只能识别0和1这两个数字。

比如说你要让电脑的机箱报警1次,你跟CPU说:“你让电脑给我叫一下”,CPU是不会理你的。 CPU只认得由0和1组成的命令,你需要给CPU发送一条表示让机箱报警的命令,比如说11100101,它才会按照你的要求去完成任务。如果你要让机箱叫10下,那么同样的命令要发十次。

这些0和1组成的命令就是计算机程序的本质,任何软件最终都是以这种形态在计算机上运行的,我们把它称之为机器语言或者机器指令。

这种由0和1组成的命令对机器而言甚易理解,对人类而言却难以识别。这样的命令, 读个几条几十条还勉强能接受,几万条, 几十万条,几百万条呢?试想一下对着满屏幕的密密麻麻的0和1,会是什么感受? 任何一个智商落在天才智商界限以下的普通人,都没有办法高效的阅读这些指令。

为了克服这种障碍,有人发明出一种叫做汇编语言的东西,汇编语言是机器语言的人类可阅读形式。

比如说让机箱报警的指令11100101,如果使用汇编语言实现的话就是warn指令。汇编器最终会把warn指令转换成11100101,因为CPU只认得0和1,不认得英文字母,但是对于人而言,warn指令比11100101要友好的多。换句话说, 汇编语言的编译器会把人类看的懂,CPU看不懂的汇编语言命令代码转换成CPU看的懂,人类却很难看的懂的机器指令。就像你的身体, 需要蛋白质、脂肪、维生素等营养元素来维持身体的新城代谢,可你吃下去的食物是蔬菜、水果、肉类,你的嘴巴认识这些食物,你的身体却不认识。这个时候, 你的消化系统就充当起了转换器, 将食物转换为你身体所需的营养元素。 这其实和电脑运行是同样的道理, 你的身体好比电脑, 他需要营养元素也就是0和1组成的指令来维持运行,你吃下去的食物是汇编指令,你的消化系统就是将食物转化成营养元素也就是将汇编语言转换成机器语言的转换器。

读到这里,是不是感觉到了眉目,程序员的工作就是写汇编指令。事实上, 的确存在以写汇编代码为职业的程序员。 然而, 计算机技术发展日新月异, 现在,这类程序员只占到程序员总群体的极少一部分。 绝大多数程序员不用汇编语言写程序,他们使用的是比汇编语言更加高级更加易于使用的高级编程语言。

来看一个例子

这是一个供普通电脑用户使用的计算器软件,我们用它计算8加9的值,并将结果16显示。

假设我们不考虑软件的图形用户界面实现,只关注值的计算,此次运算的程序大概长这样子,代码以C语言为例

这便是大多数程序员使用的语言,也就是所谓的高级语言。

那我们可不可以使用汇编语言来实现这个程序呢,答案是可以的,下面是汇编语言的实现形式

使用高级语言和使用汇编语言实现这次计算,哪一种编码效率高,哪一种简单,哪一种可读性强,哪一种易于维护?不言而喻

因为高级语言比汇编语言好用,所以程序员们都放弃汇编语言转而使用高级语言。

可是我们电脑中的CPU是不认识高级语言的。这个时候高级语言编译器闪亮登场,它的作用就是将高级语言的代码转换成汇编语言的代码,就跟汇编语言转换器将汇编代码转换成机器代码是一样的道理。

这个时候,一切都已明朗, 软件的整个运行过程如下

我们假定某个软件是使用解释型语言开发的,那么, 当软件的使用者执行软件的某一个功能时

第一步,这个功能会被转换为开发这个软件的语言的代码

第二步,这门语言的代码会被语言的解释器转换成汇编代码

第三步,汇编语言转换器会把汇编代码转换成机器代码

第四步,CPU执行机器代码,完成用户的操作

那上面讲的这些跟1024有什么关系呢?我们已经知道, 计算机CPU只认识0和1组成的指令,这种指令还有另外一个名称, 叫做二进制,而我们人类使用的数字系统是十进制。

零,一,二,三,四,五,六,七,八,九,十,我们是这样数数的,从零到九, 每一个数字都由一个字符表示,分别是0-9,而十并没有单独的字符表示,它使用一和零的组合“1”,“0”表示,所以,在十进制数字系统中,所有数值都是0-9的组合。

同样,在八进制数字系统中,只能用0-7范围内的数字进行表示。 零,一,二,三,四,五,六,七,接下来不是八, 像十进制的十一样, 八进制的八也用“1”和“0”的组合表示。

同样,二进制只能使用0-1范围内的数字来表示。零,一,不好意思,二进制没有二,如同八进制没有八一样,二进制的二也是用“1”和“0”的组合来表示,10在二进制系统中就表示2。

一,二,三,四,五,六...一千零二十四,我们从一数到一千零二十四,在十进制数字系统中,使用1024表示;在八进制数字系统中使用2000表示;在二进制数字系统中则使用10000000000表示,这像不像一串CPU的机器指令? 是的,CPU认得出这串数字。 如果使用科学计数法表示那么这串数字就是2的10次方。

1024 = 2的10次方 = 10000000000

512 = 2的9次方 = 1000000000

256 = 2的8次方 = 100000000

128 = 2的7次方 = 10000000

64 = 2的6次方 = 1000000

32 = 2的5次方 = 100000

16 = 2的4次方 = 10000

8 = 2的3次方 = 1000

4 = 2的2次方 = 100

2 = 2的1次方 = 10

1 = 2的0次方 = 1

看出来程序员和1024的关系了吗?我告诉你们,没什么关系,这一切只是 1024 = 2的10次方 = 10000000000 的偶然而已, 512、256、128这些数字对与程序员而言跟1024没有差别。

有同学说1KB = 1024Byte, 1MB = 1024KB, 1GB = 1024MB, 1TB = 1024GB, 1PB = 1024TB,这才是1024的意义!但是这些容量单位不仅仅跟程序员有关系吧?普通的电脑和手机用户甚至比程序员更关注这些单位

如果从这个角度讲,那么10月24日不但是程序员的节日,更是所有电脑用户的节日,我们所有电子设备爱好者应该普天同庆,大家一起嗨!

原文发布于微信公众号 - 带你撸出一手好代码(gh_afab56b37671)

原文发表时间:2017-10-24

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

Java语言的发展史

  Java的名字来自于一种咖啡的品种名称,所以Java语言的Logo是一杯热气腾腾的咖啡。

24410
来自专栏java工会

用JS编写一个Java虚拟机?谈谈哗众取宠的BicaVM

今日目睹某网络新闻,开篇明义便包含如下几行文字 【程序员Artur Ventura,这位超级大牛,用JavaScript写了一个java虚拟机BicaVM】 ...

12500
来自专栏程序员互动联盟

如何提高编写代码的速度?

如何提高代码编写的速度,一直是一个逃避不了的问题。在天朝你得像打字员一样做程序员,不然老板和上司都觉得你是在玩耍。对项目的贡献体现在哪里?码农难道不是以code...

43380
来自专栏函数式编程语言及工具

FunDA(0)- Functional Data Access accessible to all

   大数据、多核CPU驱动了函数式编程模式的兴起。因为函数式编程更适合多线程、复杂、安全的大型软件编程。但是,对许多有应用软件开发经验的编程者来说,函数式编程...

229100
来自专栏前端工程

浅谈前端/软件工程师的代码素养

“程序是写给人读的,只是偶尔让计算机执行一下。”

24460
来自专栏程序员互动联盟

面向对象语言真有那么棒嘛?

在我的整个编程生涯中,我一直反复思考关于面向对象编程的问题:用还是不用。不过,去年我终于确定下来,决定不再使用面向对象编程,下面我会说明具体原因。 先讲一个小...

37030
来自专栏PHP在线

整洁代码之道——重构

写在前面 现在的软件系统开发难度主要在于其复杂度和规模,客户需求也不再像Winston Royce瀑布模型期望那样在系统编码前完成所有的设计满足用户软件需求。...

44660
来自专栏企鹅号快讯

高级语言,高级在哪?

高级语言、低级语言,都是对计算机而言。人类语言不存在这种说法。 在上篇文章(一分钟认识你的电脑)中,柚子向大家介绍了内存。 内存的最小单位是bit,二进制表示,...

285100
来自专栏落影的专栏

新鲜出炉的iOS面试题

为防止背题,大部分题目不设标准答案,重点考察面试者的基础知识和思维逻辑,答案的提示见后面。

24220
来自专栏java工会

空格还是Tab,编程时使用空格比Tab的工资更高

如果你觉得使用空格还是Tab没什么区别,那就大错特错了。或许你从来没有关注过这个问题,但是我要告诉你的是——使用空格比使用Tab键的工资更高。这可不是危言耸听。

11630

扫码关注云+社区

领取腾讯云代金券