【文|风万里】
老话说的好“内行看门道,外行看热闹。”前几天TIOBE公布了2017年3月全球编程语言排行榜,Java语言以16.384%占比稳居第一,高出第二名C语言二倍之多。
那由此证明Java是世界上最好的语言么?还是Php(不是拍黄片啊)是世界上最好的语言??
我以为,学编程如同习武。世上的武功没有高低之分,只有习武的人才有强弱之别。如何才能快速提升战斗力?如何在短时间内可以和高手对决?笔者接下来奉上干货,教你一套内功心法。
《编码——隐匿在计算机软硬件背后的语言》的作者Petzold从1984年开始编写个人计算机程序,曾经被微软公司授予Windows Pioneer奖。本书通俗易懂的讲述了一台计算机是如何工作的。作者使用电线、电灯泡、触发器等这些非常常见的零件,拼拼接接,最后令人惊异的建造了一台电子计算机。
本书的作者用丰富的想象和清晰的笔墨将看似繁杂的理论描述得生动、简单,使读者不会感到枯燥和生硬。即便读者不是计算机专业人士、程序员也可以轻松阅读此书。
作者在书中主要围绕的两大部分讲述:第一部分描述字母和数字在计算机中的编码,第二部分介绍计算机的硬件组成结构。下面我们分别来说明。
第一部分:字母和数字在计算机中的编码
什么是编码?对任何能听见我们的声音并理解我们所说的语言的人来说,我们发出的声音所形成的词语是一种可识别的编码。说是编码的过程,听是解码的而过程。
打个比方你喜欢一个阿拉伯女孩,你不会阿拉伯语,她也不会汉语。你想要对她表白说“我爱你”。当你从开始的想法到说出这句话,你的大脑(CPU)进行了编码的过程。
大脑把这句话“我爱你”编码成了汉语。而这个阿拉伯女孩,因为她无法解释你的编码,她听不懂汉语。
你还可以使用聋哑人使用的编码方式手语来表达。你还可以使用盲人使用的布莱叶盲文来表达。不过,这一切的前提是她都学习过这些编码。
你如何对计算机来表达“我爱你”呢?当程序员大侠敲击键盘输入我爱你时,计算机怎么会知道如何解码??它怎么知道你是爱它的???
本书前十三章都在解释计算机对人类语言编码和解码的过程。
第二章编码与组合中提到莫尔斯码(Morse Code)。莫尔斯码是伴随着电报机的问世而被发明的。我们在抗战片经常看到这样的场景:电报员头戴大耳麦,手里不停的拨弄着电键。电报机发出滴嗒滴嗒的声音。在电报机中一次快速的“滴-嗒”代表着“点”,一次慢速的“滴——嗒”代表着“划”。不同的“点”“划”组合可以代表不同的汉字。而更加耐人寻味的是,这个发明使用了二进制编码。
第九章二进制数中,提到在计算机的世界里全部的信息都是使用数字0和1来表示。0和1在计算机中是怎样编码的呢?是使用电灯泡的开关来表示。灯泡亮代表数字1,灯泡不亮代表数字0。不同的0和1的组合可以代表不同的数字和汉字。序列“01000001”代表字母A。序列“100111000101101”代表字符的“中”字。
第二部分:计算机的硬件组成结构
一台计算机包括很多部件:中央处理器、存储器、输入/输出设备等。通常这些部件按照功能被分别安装在两个或更多的电路板上。这些电路板之间通过总线通信。
用我们人类身体的组成结构做一个类比。中央处理器(CPU)类似于人体的大脑。存储器类似于人体的胃。输入设备类似于人体的耳朵、眼睛和鼻子等。输出设备类似于人体的手和脚。计算机的总线传输设备类似于人体的血管。
作者一边讲解了计算机的组成,一边回顾了计算机的发展史。如果大家想更进一步感性的了解这段历史,可以观看《模仿游戏》这部电影。这部电影讲述了图灵是如何发明一部计算机的。
有读者一定会疑惑,读完这本书真的就可以达到高级程序员的水平么?
举个栗子:内存溢出的bug是我们经常会碰到的棘手问题,这个问题发生之后,不同级别的程序员反应如何呢?
初级程序员的第一反应是:先来个{try catch}把异常捕获了,以后有时间再查下原因吧。而很快就没有以后了。
高级程序员第一反应是:哪块代码占用内存大?是图片占用内存空间大么?为什么占用这么大?调用了第三方库?第三方库实现的原理是什么?一定要查清楚具体原因,了解事物的原理。
在基础原理上的深刻理解,透过现象进而探索本质可以发现新事物;将复杂的事物简单化,可以发现解决问题的新方法。
我们需要在思想上有一个转变,达到高级程序员的思维高度,学习他们解决问题的方法。由这些方法作为指引,假以时日,你一定可以变得越来越优秀。
后记:一张图片到底占用多大内存?欢迎评论探讨。