代码揭秘
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

前言

算下来这本书应该是我奉献给读者的第三本书了。一路写下来,自己也感觉非常庆幸,庆幸有许多读者如此地厚爱于我!更高兴地看到广大读者能够从我的书里汲取知识,获得启迪。在计算机图书的创作过程中,我不禁感慨:写一本好书不容易!更何况千里马常有,而伯乐不常有,能够让一本书找到它真正的读者同样有难度。因此我写下了后面的文字,希望这些介绍性的东西能够帮助读者理解本书要旨,明确所述内容。

本书缘起

我想有一个问题,很多读者都非常关心,那就是如何成为一名编程高手。这是以往很多读者向我写信讨教的话题。关于方法学上的问题本书附录中谈了很多,这里不再赘述。但是这里我想告诉读者的是本书能够帮助你做些什么。

通常认为一个计算机程序设计高手应当具备的条件是熟练掌握至少一门计算机程序设计语言,然后有比较扎实的数据结构与算法功底。这样,基本上他已经可以从一种比较高的视角来抽象现实问题并运用计算机来进行模拟和求解了。但是,这其实还不够,一个高效的计算机程序需要“内外兼修”。内功就是程序所使用的数据结构和算法,这是决定程序效率的根本因素;而外功就是程序编码是否符合计算机系统的口味,是否能够最大程度地调动和运用系统的资源。

这一点的作用是不容忽视的。但是由于目前很多程序员都是半路出家,没有接受过系统的计算机科学理论教育,因为他们不知道有这么回事,所以无法给予足够的重视就无可厚非了。就像古代人们不知道有细菌和病毒的存在,所以那时也就没有消毒的概念一样。

另外,我需要指出的是,很多计算机专业科班出身的学生也未必能够领悟这项“外功”的奥义。就目前中国的计算机教育来说,学校的课程设置仅仅是将各项知识独立地对待,这样对于悟性不是非常高的学生来说,在没有被点化的情况下就没有办法有机地将这么多课程串接起来。一个不能形成完整系统性的知识结构是空洞和脆弱的结构。

国外先进的计算机教育已经注意到了这一点,很多国外的大学都开设了这样一门从程序设计角度来让学生真切感受计算机组织机制和原理的课程。庆幸的是,国内很多人也已经意识到了这个问题,所以相关的课程和有关的书籍也在被逐步引入到国内。但是目前存在的一个问题是,原封不动地将国外的课程和教材搬到国内明显让这洋学问显得有点“水土不服”。

这种水土不服主要表现在三个方面。首先,这些书籍往往都是国外大学的教材,这些教材面向专业学生,这无疑将广大非专业学生和读者拒之门外了。其次,这些书是以国外大学的情况为参照而写作的,没有充分考虑中国的情况——当然,人家干嘛要考虑呀?这就让中国读者学起来非常不顺手。比如,某些例子可能是以UNIX或者Linux下的编程为基础设计的,中国绝大多数使用Windows的读者就很难完成这些实验。这极大地打击了他们继续学习的积极性和后劲。最后,引进版的书明显要比实际技术的发展老几代。现在都是多核时代了,书里可能还在讲奔腾2,这就让中国的读者只能在后面跟着人家跑,却永远没办法超越。

核心内容

基于上面的考虑我写了这样一本《代码揭秘》。或许很多人对这个名字感到困惑并充满疑问,因为直观上好像不能确定这本书的具体内容是什么。接下来我就要告诉读者这本书到底是写什么的。本书从程序设计角度出发(因为这是广大读者最熟悉、最容易接受的出发点),以C/C++为描述语言(因为这是目前最广为使用的计算机语言,另外,C/C++中像指针这样的底层特性也非常适合用来揭示系统深处的东西),以Visual C++为形式工具(因为它也是中国程序员所习惯使用的开发环境),将隐藏在代码背后的关于计算机组成原理、计算机操作系统等方面的原理和知识娓娓道来,不仅让读者知其然,更要让读者知其所以然。并让这些知识再反作用于编程实践,从而帮助读者写出更适合机器优化的高质量代码。揭开代码背后鲜为人知的秘密,让代码开口说话,告诉你一个真实的计算机,从而让你能够写出适合与计算机交流的优秀代码,这就是本书所能为你做到的。

读者对象

接下来我要回答的问题是本书为谁而写。

如果你是一名渴望在编程技艺上有所精进的程序设计爱好者,那么这本书就是助你成为编程高手的制胜法宝;

如果你是一名正苦于无法突破编程瓶颈的程序员,那么这本书就是帮你打通任督二脉的武林秘籍;

如果你是一名感觉书本知识仍然无法内化的计算机专业学生,那么本书就是替你拨云开雾、指点迷津的通天灯塔。

阅读建议

最后,我还希望和读者谈谈阅读及学习本书的建议。

第一,从整体上看全书共分9章,章节之间相互关联、层层递进,本着循序渐进的原则逐渐展开,因此阅读本书时切不可跳跃式地选读,这样非但不能领悟整个体系间的精髓,更会为进一步的阅读带来困难。特别是第2~7章尤不可拆分阅读,务必按其顺序来学习。

第二,为了帮助读者理解,书中绘制了大量图表。这些图表的作用不可小视,如果在文字理解上遇到困难,可以参照图表来学习。为了帮助读者加深理解,书中还设计了大量的实验,尽管书中给出了实验结果,但也请读者务必亲自动手实践一下这些例子,这样才能让知识凝固在你的脑中。

第三,本书所涉及的知识面比较广,在某些时候限于篇幅的考虑而未能把所有问题都展开来深入探究。对于那些并不是非常深入的知识点,如果读者有兴趣,建议读者多多查阅有关方面的资料,这样学习才能更加博文通识。

关于本书

排除前期构思和素材准备的时间,本书的写作时长也将近有一年之久。在这个过程中,笔者力求精益求精,对很多知识点再三推敲,并翻阅了大量资料和文献。这些工作和努力无非是希望能够写一本对得起读者的书。

在早先的两本书出版之后,我也收到了许多热心读者的来信,一部分人表达了对我作品的充分肯定,这当然是我所乐于见到的,能够获得来自读者的认可对于一个负责任的作者来说无疑是莫大的荣耀。而更多的人则向我问询了书中的一些问题,主要是他们在阅读过程中遇到的困难。这也是我非常高兴见到的事情,因为这让我真切地感知到确实有很多人在读我写的书。很多读者同问的一个问题是如何能够学好编程。为了回答这个问题,我特别撰写了一篇题为《浅谈编程能力的培养与提高》的文章附在本书正文之后,希望对那些仍处在迷茫之中的读者能够起到一定的帮助作用。

写一本好书真的很难,写一本没有错误的好书更是难如登天。我闻听计算机科学大师Knuth在《计算机程序设计艺术》丛书出版后也提出如果谁能够从他书中找到一个错误,就能够获得256美分的奖励,事实证明获得这项奖励的人还是大有人在的。这也客观地说明了即使作者很牛,即使作者很用心,书中出现纰漏和欠缺也的确是在所难免的事情,所以我也真心地希望广大读者能够不吝赐教和批评。不过以往的经验着实有点让我失望。给我写信的读者大有人在,但是指出我书中错误的读者却寥寥无几。我想这其中的一个非常重要的原因在于中国的教育更多的是让我们学会一味接受,而非大胆地思辨!我们太过盲从而迷信权威,只会聆听高人教诲,却不想自己思考。这对于学习来说不是一个好现象。古人云:尽信书则不如无书。我也希望广大读者能够以思辨的态度来看书,这样你将会获得更多。如果在这个过程中,读者有什么感想或者问题希望和作者交流的,欢迎给我写信,联系信箱:fzuo@yahoo.cn。

最后诚挚地祝愿每位读者都能够真正感受到编程的快乐,并在编程的路上行得更稳健,走得更长远!