卓越的代码需要利用现代编程语言的先进特性来实现软件功能。但软件最终都要运行在计算机上,无论它是采用哪种编程语言编写的。因此,卓越的软件代码也要充分地利用计算机中的各种资源,将计算机的性能发挥到极致。现代编程语言将这些知识隐藏了起来,容易被我们忽视。
因此,《编程卓越之道》系列的第一卷《深入理解计算机》将重点放在软件执行背后的计算机底层上,深入浅出地介绍了计算机体系结构的方方面面,帮助我们理解如何才能写出在计算机上高效运行的代码。本书具体内容包括:数字、字符串及复合数据结构在计算机中的表示形式,以及如何在内存层次结构中访问这些数据;基本的二进制运算、位运算、布尔逻辑,以及如何设计完成运算的中央处理器指令集;输入/输出、大容量存储等丰富多彩的外设,以及把这些外设和计算机相连进行通信的各种总线技术。
本书适合软/硬件开发人员及系统程序员、移动及嵌入式设备开发者、体系结构设计人员,以及高校计算机相关专业师生。
媲美高德纳TAOCP的程序设计领域经典系列||100本书都没有讲明白的事情被这本书说清楚了||环环相扣说透机器原理、底层语言、高级代码和团队生产力
译者简介
覃宇,Thoughtworks咨询师/应用架构专家,12年软件开发经验,移动应用开发专家,作为架构师和技术教练专注于辅导客户团队改进持续交付实践。译有《Kotlin实战》、《领域驱动设计精粹》、《Serverless架构:无服务器应用与AWS Lambda》和《云原生安全与DevOps保障》;合著有《代码管理核心技术及实践》。
作者简介
No Starch 出版社出版),以及Using 6502 Assembly Language和P-Source(均由 Datamost 出版社出版),合著有Microsoft Macro Assembler 6.0 Bible(由 The Waite Group 出版社出版)。过去40年,Hyde 作为嵌入式软/硬件工程师,为核反应堆、交通控制系统及其他消费电子设备开发过仪表工具。他还在加州州立理工大学波莫纳分校和加州大学河滨分校教授计算机科学这门课。
前言
译者序
回顾21世纪初以来计算机产业的发展,移动互联网的普及一定是绕不开的话题。计算机的性能按照摩尔的预测每18个月就提升一倍,计算机中的集成电路体积反而越来越小。从个人计算机进入手机、嵌入式设备时代,终端变得无处不在。网络技术的发展让终端能力可以近乎无限地扩展。
随着计算机性能的提升和应用的扩展,软件的规模和复杂度也在呈指数级增长,开发工作面临的挑战也越来越大。不断出现的新的高级编程语言通过先进的语法特性和编程范式来简化软件开发者的工作。利用这些高级编程语言提供的抽象技术,编写代码这项活动越来越接近人类对问题的分析和描述,与计算机内部的运行机制渐行渐远。我们对卓越代码的追求似乎过于重视优雅地让人理解代码背后的意图,逐渐忽略了代码在计算机上的运行效率,所以才有了对安迪比尔定律的吐槽:新软件总是会耗尽新硬件提升的全部计算能力。笔者作为一名移动应用开发者,对于应用动辄成百上千兆的体积和一段时间后磕磕跘跘的体验,着实汗颜。
好在计算机的基本组成在这20年中并没有发生根本性的变化。由中央处理器、存储、输入/输出设备构成的冯·诺依曼体系结构目前仍然是计算机界的绝对主流。本书的第1版于21世纪初面世,文笔浅显易懂,代码示例详尽,同时避免了晦涩难懂的汇编语言,是一部介绍计算机体系结构的佳作。现在本书第2版的出版恰逢其时,提醒我们不要忘记卓越的代码一定也是高效的。在保留第1版深入浅出特点的同时,作者对过去这些年计算机体系结构的发展和新兴的设备进行了总结,对原有的内容进行了删减和增补。第2版中的示例代码也采用近些年涌现出来的高级编程语言进行了重写,让年轻的读者朋友读起来更加亲切。阅读本书了解代码背后的运行原理,进而在编写代码时做出正确的选择,未为晚矣。
本书打开了笔者的记忆,仿佛又回到了大学时代学习计算机组成原理、模拟和数字电路的时光。有了第1版翻译的珠玉在前,第2版的翻译工作笔者不敢怠慢。一些当时新鲜的概念现在已成了业界主流,因此在第2版的翻译中对部分译法进行了更新。笔者也期望像作者那样与时俱进,但百密终有一疏,翻译中出现的错误也请读者们海涵并斧正。
最后,感谢在背后支持笔者完成翻译工作的家人和朋友们!
——覃宇
例如,二进制数值1100100₂等于 应为 例如,二进制数值11001010₂