从本源看世界-读'Write Great Code'

以前曾经说过自己并非计算机科班出身。想想自己在大学时的学习过程未免有些底气不足,记得当时一直坚持去旁听计算机专业的课,但是鉴于本专业老师的点名和课堂作业,自己未免耽误了很多节课,弄得自己学的很不系统,效果不是很好。工作后一直从事应用级的开发,对计算机方面基础的本源性的知识也逐渐陌生起来。但我是那种知其然也要知其所以然的人,这两年也不间断的买了不少讲解计算机底层知识的书,目的是让那些计算机本源性的东西在我脑袋里逐渐清晰了起来。这不又一本好书问世了-'Write Great Code'第一卷,我很早就已经下载了其英文版,只是没来得急看,这两天看了其中几章,发现很适合我的口味。

在我眼中每个领域的大师级人物都是知其领域本源的人,他们把本领域的知识融汇贯通,而且大多时候我们在聆听大师级人物的讲解时都有一种豁然开朗的感觉,那其实就是因为他的知识体系很成形,他们会从本源去讲解,从最简单的原始状态去讲解,这样听起来印象深刻,收获自然颇丰。

'Write Great Code'(中文名:编程卓越之道)一系书的作者是Randall Hyde,他同时也是'The Art of Assembly Language'的作者。'The Art of Assembly Language'一书算是汇编领域的佼佼者了,虽然我没看过^_^,不过网友的评价也是很重肯的哟。当初刚刚下载'Write Great Code' Vol1时曾经浏览一遍目录,'Numeric Representation','Binary Arithmetic and Bit Operations'等这些章节的名字让我心动,我就喜欢这样的书,而且和一般的教材性质的计算机组织结构或者计算机系统结构相比,这本书是从程序员角度来讲的,更加适合我们这些人的口味。这本书所讲解的知识层次就在我们工作层次的下一层,对于想挖掘知识本源的我来说再合适不过了,东西要一点一点的吃,你说是不是^_^。

我没有从开篇'Numeric Representation'这张开始读,我直接跳到了第六章'Memory Organization and Access',因为前不久又对内存对齐等有新的认识,所以我也希望通过这章的阅读知道更多的东西,让我脑子中的知识点'串'起来。这本书没有令我失望,本章第一节关于三大总线的介绍就格外精彩:
The system bus connects the various components of a VNA machine.
-> A bus is a collection of wires on which electrical signals pass between components of the system.
-> Most CPUs have three major buses: the address bus, the data bus, and the control bus.
-> CPUs use the data bus to shuffle data between the various components in a computer system.
-> The data bus on an 80×86 family processor transfers information between a particular memory location or I/O device and the CPU. The only question is, 'Which memory location or I/O device?' The address bus answers that question.
-> The CPU uses the data bus to move data between itself and memory. This prompts the question, 'How does the system know whether it is sending or receiving data?' Well, the system uses two lines on the control bus, read and write, to determine the data flow direction (CPU to memory, or memory to CPU).

几句'关键意义'的句子循序渐进的把三大总线的用途描绘的淋漓尽致,其思路和方式完全符合认知的过程,同时让你的大脑里马上形成一个框架,带着这个框架再去读相关细节,只能让你越读越兴奋。

第6.2小节讲的是物理内存的组织以及CPU如何访问内存,但是你看完后再细致品味,实际上这节的内容完全可以作为'为什么要进行Data Alignment'的标准讲义,和我上次在'三谈内存对齐-背后的故事'一文中说的同出一辙,而且更加细致,让我对内存这块的内幕了解的更加透彻。

第6.3小节讲的则是'字节序'问题,讲解了'Big-endian'和'Little-endian'的由来,最后作者通过一个很实用的例子形象的说明了字节序带来的影响。

第6.4节和6.5节讲的略微有些深了,要细看才行,最好对更底层有所了解,可以参照别的书籍一起学。

我刚刚读到第7章-'Composite Data Types and Memory Objects',该章每一小节针对一种复合数据类型做深入分析,精彩在后头,我正准备继续呢,实在忍不住了,写下此篇,好让更多同仁知道有这么一本书,早读早受益,明天周末去书店买本中文版,坐在床上读更舒服。

从本源看世界,你会发现另一番天地。

'画蛇添足'招致的BUG

一般我们的系统在上线的初期都采用DEBUG版本,因为初期系统存在着很多潜在的问题,一旦暴露,DEBUG版本也便于我们进行问题查找。

昨天吉林割接测试过程中发现一个问题,我们的系统在处理一条内容为空的手机上行短信时系统dump core了。经过调试发现是一处assert导致的,这处的代码断言上行短信的内容不该为空, 即assert(消息内容长度 > 0)。

正常来说我们系统接收到的手机上行的短信内容都应该不为空的,以前的定势的思维也让我在这块无端放了一个assert语句,反倒画蛇添足了。其实想一想,用户一不小心发了一条空短信也是完全可能的,起码我就发过不止一次^_^。但是空短信导致系统进程出异常这是万万不应该的,虽说DEBUG版本也是导致这一问题的一个原因,但是我们在检查输入参数范围时的不细心终归是最大的问题所在。

以后注意!^_^

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats