【新书速递】计算机系统解密:从理解计算机到编写高效代码

2dc02bce44d41a1252e62e96f717d596.gif

许多程序员对使程序运行的底层技术并不熟悉。但是,如果希望程序运行良好,而不是充满了难以发现的bug,就要关心代码是如何正常运行的,谁都不希望自己因为代码安全问题而成为新闻的主角。

网上有很多技术细节,但都没有整理或收集到一个方便的地方。在本书中,资深工程师Jonathan E. Steinhart深入探讨了计算机背后的基础内容,比如计算机硬件、软件在硬件上的行为,以及随着时间的推移,人们如何解决问题等主题。

85ba8f2e1e4361946fdbcbe4d52794cd.png

就像你在书里看到的,理解内存是程序员的一个重要技能。学习编程时养成的习惯很难改掉。研究表明,在所谓的“安全”操场玩耍长大的孩子更容易受伤,大概是因为他们不知道摔倒的伤害。在编程领域也存在类似的情况。舒适的编程环境使入门不那么恐怖,但你还是需要做好准备,以面对复杂的外部环境。本书可以帮你实现这种转变。

01

底层知识的重要性

Mathematica和Wolfram语言的创造者Stephen Wolfram在一篇题为“How to Teach Computational Thinking”的博客帖子中表达了一个有趣且有些相悖的观点:他把计算思维定义为“把事件标准化得足够清晰,人可以通过一个足够系统化的方法告诉计算机怎么运行”。我完全认同这个定义。事实上,很大程度上这也是我写这本书的动力。

但我非常不认同Wolfram的一个观点,即那些学习编程的人应该使用强大的高级工具(比如他开发的那些工具)来培养计算思维能力,而不是学习底层基础技术。例如,从人们对统计学的兴趣日益超过对微积分的兴趣这一趋势中,我们可以清楚地看到,“数据整理”是一个正在发展的领域。但是,如果人们只是将大量的数据输入这些并不熟悉的程序中,又会发生什么呢?

一种可能是,它们产生的结果看起来很有趣,但没有意义或者不正确。例如,最近的一项研究(MarkZiemann、Yotam Eren和Assam El-Osta的“Gene Name Errors Are Widespread in the Scientific Literature”)显示,五分之一已发表的遗传学论文由于电子表格使用不当而出现错误。试想一下,如果有更多人使用更强大的工具,可能会产生怎样的错误和后果!当人们的生活受到影响时,正确处理好它才是至关重要的。

理解底层技术可以帮助你了解可能出现的问题。只知道高级工具很容易提出错误的问题。在学习钉枪之前,先学会使用锤子是值得的。学习底层系统和工具的另一个原因是,它能赋予你构建新工具的能力,这一点很重要,因为永远需要工具构建者,尽管工具用户更常见。学习有关计算机的知识使你能够编写更好的代码,程序的性能状态也就不再神秘了。

02

目标读者

本书是为想成为优秀程序员的人准备的。是什么成就了一个优秀的程序员?首先,一个优秀的程序员应该具备良好的批判性思维和分析能力。为了解决复杂的问题,程序员需要有能力评估程序是否能正确地解决恰当的问题。这比听起来要难得多。经常会见到有经验的程序员对别人写的程序冷嘲热讽:“将简单事情复杂化了,制造了不是问题的问题。”

你可能很熟悉一个经典的魔幻故事比喻:魔法师通过了解事物的真名来获得力量,如果忘了某个细节,魔法师就会遭殃。优秀的程序员就是那种能够牢牢把握住事物的本质,不放过任何一个细节的魔法师。

优秀的程序员也应该有一定的艺术修养,就像熟练的工匠一样。遇到让人完全无法理解的代码的情形并不少见,就像许多说英语的人对詹姆斯·乔伊斯(JamesJoyce)的小说《芬尼根的守灵夜》很困惑一样。优秀的程序员写出的代码不仅要能正常工作,而且要很容易让别人理解和维护。

最后,优秀的程序员需要对计算机的工作原理有深刻的理解。仅凭浅薄的知识基础无法很好地解决复杂问题。本书适合那些正在学习编程,但又对现有知识深度不满意的人。本书也适合已经在学习编程,但还想要学习更多的人。

03

计算机全景图

计算机设计和编程是一个巨大的学术领域,这里就不再赘述了。你可以像图1展示的那样分层想象计算机的结构。

963cc4f28e1779cfcc89c01670d47899.png

图1是简化后的结果,在实际中,各层之间界限并没有这么清晰明显。

04

本书涵盖

919289b1d7b367be5565bd1df4b633fe.png

本书在概念上分为三个部分。第一部分探讨计算机硬件,包括它是什么以及它是如何构建的。第二部分研究在硬件上运行的软件的行为和表现。最后一部分介绍编程的艺术—与他人合作写出好的程序。

第1章:计算机的内部语言

本章将开始探索计算机这个三岁小孩的心态。计算机是比特大玩家,它们靠“放牧”比特为生。本章将具体介绍它们是什么,可以用它们做什么,用像“过家家”一样的假想游戏来赋予比特和比特集合意义。

第2章:组合逻辑

本章将研究使用比特而不是数字的原理,并探讨数字计算机的合理性,还将讨论一些为我们现在的数字计算机出现铺平道路的旧技术。本章涵盖组合逻辑的基础知识,并介绍如何从位和逻辑实现更复杂的功能。

第3章:时序逻辑

本章将介绍如何使用逻辑构建内存,包括如何生成时间,因为内存只不过是一种随时间而存在的状态。本章涵盖时序逻辑的基础知识,并讨论各种存储器技术。

第4章:计算机剖析

本章将介绍计算机如何由前面几章讨论的逻辑和内存元素构造出来,并介绍一些不同的实现方法。

第5章:计算机架构

本章将探讨我们在第4章中看到的计算机的基础附加组件,介绍它们如何提供基本功能并提高效率。

第6章:通信故障

计算机需要与外部世界进行交互。本章将介绍输入和输出,回顾数字量和模拟量的区别,以及如何让数字计算机在模拟世界中工作。

第7章:组织数据

了解了计算机的工作原理后,我们来看看如何高效地使用它们。计算机程序对内存中的数据进行操作,重要的是将内存的使用方式映射到需要解决的问题上。

第8章:语言处理

编程语言的发明是为了让人们更容易地在计算机上写出程序。本章着眼于将语言转换成在计算机上实际运行的程序的过程。

第9章:Web浏览器

很多程序都是为Web浏览器写的。本章主要介绍Web浏览器的工作原理以及它的主要组件。

第10章:应用程序和系统程序设计

本章将编写一个程序的两个版本,分别在图1中的两个不同的层上运行。

第11章:捷径和近似法

提高程序的效率很重要。本章将探讨一些通过省去不必要的工作来让程序更有效率的方法。

第12章:死锁和竞态条件

许多系统包含不止一个计算机。本章将研究让计算机相互合作时可能会出现的一些问题。

第13章:安全性

计算机安全是一个先进主题。本章在讲解基础知识的同时,还会着重讲解难消化的数学知识。

第14章:机器智能

机器智能也是一个先进主题。大数据、人工智能和机器学习的结合带来全新的应用—从自动驾驶到把你逼疯的广告。

第15章:现实世界的考虑

编程是一个非常有条理的过程,逻辑性很强。人类会参与决定编什么、如何编程,而人类往往缺乏逻辑性。本章将讨论现实世界中关于编程的一些问题。

在阅读本书时,请记住,很多解释都是已简化的,因此细究细节可能不完全正确。要解释得完美,就需要太多分散注意力的细节。如果你在深入学习的过程中发现了这一点,请不要惊讶。你可以把这本书看成是一本可以让你在计算机的太虚世界里神奇遨游的光鲜亮丽的旅行手册。本书不可能涵盖所有的细节,当你深入阅读时,就会发现很多细微的差别。

05

编辑推荐

计算机编程不是抽象的,程序是在机器上运行的。了解计算机如何工作以及程序如何在计算机上运行是成为一名更好的程序员的必要条件在本书中,资深工程师Jonathan E. Steinhart深入探讨了计算机背后的基础概念,比如计算机硬件,软件在硬件上的行为,如何编写高效的程序,计算机安全基础知识,以及在编写代码时需要考虑的现实问题。本书对底层知识的多个主题进行了公平的覆盖——介绍有助于提高整个系统质量的许多领域的知识(包括计算机硬件、组合逻辑、时序逻辑、计算机体系结构、计算机组成原理、操作系统、系统程序设计等)。每一章都以一种易于阅读的水平涵盖了一个重要的知识领域,并为那些有兴趣深入研究的人提供了参考。

通过阅读本书,你将学到:

  • 现实世界是如何转换成计算机能理解的形式的,比如位、逻辑、数字、文本和颜色。

  • 组成计算机的基本构件,包括逻辑门、加法器、译码器,寄存器和存储器。

  • 为什么设计与计算机硬件(特别是内存)相匹配的程序可以提高性能。

  • 如何将程序转换为计算机能够理解的机器语言。

  • 软件构建块是如何结合起来创造Web浏览器等程序的。

  • 让程序更高效的巧妙技巧,如循环不变式、强度削弱和递归细分等。

  • 计算机安全和机器智能的基础知识。

  • 项目设计、文档编制、日程安排、可移植性、维护和其他实用的编程经验。

了解代码在计算机上运行时到底发生了什么将帮助你编写更好、更高效的代码。

作者:[美]乔纳森·E.斯坦哈特 (Jonathan E. Steinhart )

译者:张开元、张淼

计算机程序硬件、软件从底层实现到高层展现的原理讲解

有助于提高整个系统质量的知识图谱

98210c2da4688898eae54ed3ed7a8f8f.gif

d17ac0332206d0c6ef3df06699037440.png

扫码关注【华章计算机】视频号

每天来听华章哥讲书

86f2263841dafb30a23f7ce59852988e.gif

更多精彩回顾

书讯 | 10月书讯(上) |  小长假我读这些新书

书讯 | 10月书讯(下) |  小长假我读这些新书

资讯 | 什么是ETL?一文掌握ETL设计过程

书单 | 8本书助你零基础转行数据分析岗

干货 | 架构设计的新思路,《架构之道》读书笔记

收藏 | 终于有人把微服务讲明白了

上新 | 【新书速递】构建高质量软件:持续集成与持续交付系统实践

赠书 | 你已选中了添加链接的内容

62fc7e44aac02032b37f189a508443a5.gif

d30566ee229322b53b33a34709d334a0.gif

点击阅读全文购买

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值