计算的本质:深入剖析程序和计算机
Tom Stuart
张伟 译
出版时间:2014年10月
我知道你是一位编程高手,写代码对你而言是手到擒来的事。但是,你确定自己多年练就的编程技能不是建立在某种想当然的假设基础上?确定自己不是每天都在“稀里糊涂”地写代码?确定真正理解自己的代码是如何运行的吗?
如果你想像“大牛”级的程序员一样做开发,或者想摆脱自己半路出家的知识“囧”境,本书能够为你真正讲明白计算理论和编程语言的工作原理与真切含义。本书使用简单的Ruby代码做示例,没有枯燥难记的数学符号。作者极力推崇循序渐进和从实践中学习,他从机器、语言讲到程序,又一路从最简单的机器(有限自动机)过渡到复杂的机器(图灵机),从设计实现简单的编程语言到极简的机器,而后又推理所谓“不可能”解决的问题,为读者完美打造了轻松有趣的阅读体验。

· 计算的基本概念,如语言中的图灵完备性
· 程序如何使用动态语义与机器交流思想
· 有限自动机的功能
· 通用图灵机如何催生了今天的通用计算机
· 使用简单语言和细胞自动机执行复杂计算
· 哪些语言特性对计算而言是必不可少的
· 停机和自引用为何会让计算问题无解
· 用抽象解释和类型系统分析程序
  1. 前言  
  2. 第1章 刚好够用的Ruby基础  
  3. 1.1 交互式Ruby Shell  
  4. 1.2 值  
  5. 1.2.1 基本数据  
  6. 1.2.2 数据结构  
  7. 1.2.3 proc  
  8. 1.3 控制流  
  9. 1.4 对象和方法  
  10. 1.5 类和模块  
  11. 1.6 其他特性  
  12. 1.6.1 局部变量和赋值  
  13. 1.6.2 字符串插值  
  14. 1.6.3 检查对象  
  15. 1.6.4 打印字符串  
  16. 1.6.5 可变参数方法(variadic method)  
  17. 1.6.6 代码块  
  18. 1.6.7 枚举类型
  19. 1.6.8 结构体
  20. 1.6.9 给内置对象扩展方法(Monkey Patching)
  21. 1.6.10 定义常量
  22. 1.6.11 删除常量
  23. 第一部分 程序和机器
  24. 第2章 程序的含义
  25. 2.1 “含义”的含义
  26. 2.2 语法
  27. 2.3 操作语义
  28. 2.3.1 小步语义
  29. 2.3.2 大步语义
  30. 2.4 指称语义
  31. 2.4.1 表达式
  32. 2.4.2 语句
  33. 2.4.3 应用
  34. 2.5 形式化语义实践
  35. 2.5.1 形式化
  36. 2.5.2 找到含义
  37. 2.5.3 备选方案
  38. 2.6 实现语法解析器
  39. 第3章 最简单的计算机
  40. 3.1 确定性有限自动机
  41. 3.1.1 状态、规则和输入
  42. 3.1.2 输出
  43. 3.1.3 确定性
  44. 3.1.4 模拟
  45. 3.2 非确定性有限自动机
  46. 3.2.1 非确定性
  47. 3.2.2 自由移动(free move)
  48. 3.3 正则表达式
  49. 3.3.1 语法
  50. 3.3.2 语义
  51. 3.3.3 解析
  52. 3.4 等价性
  53. 第4章 增加计算能力
  54. 4.1 确定性下推自动机
  55. 4.1.1 存储
  56. 4.1.2 规则
  57. 4.1.3 确定性
  58. 4.1.4 模拟
  59. 4.2 非确定性下推自动机
  60. 4.2.1 模拟
  61. 4.2.2 不等价
  62. 4.3 使用下推自动机进行分析
  63. 4.3.1 词法分析
  64. 4.3.2 语法分析
  65. 4.3.3 实践性
  66. 4.4 有多少能力
  67. 第5章 终极机器
  68. 5.1 确定型图灵机
  69. 5.1.1 存储
  70. 5.1.2 规则
  71. 5.1.3 确定性
  72. 5.1.4 模拟
  73. 5.2 非确定型图灵机
  74. 5.3 最大能力
  75. 5.3.1 内部存储
  76. 5.3.2 子例程
  77. 5.3.3 多纸带
  78. 5.3.4 多维纸带
  79. 5.4 通用机器
  80. 5.4.1 编码
  81. 5.4.2 模拟
  82. 第二部分 计算与可计算性
  83. 第6章 从零开始编程
  84. 6.1 模拟lambda演算
  85. 6.1.1 使用proc工作
  86. 6.1.2 问题
  87. 6.1.3 数字
  88. 6.1.4 布尔值
  89. 6.1.5 谓词
  90. 6.1.6 有序对
  91. 6.1.7 数值运算
  92. 6.1.8 列表
  93. 6.1.9 字符串
  94. 6.1.10 解决方案
  95. 6.1.11 高级编程技术
  96. 6.2 实现lambda演算
  97. 6.2.1 语法
  98. 6.2.2 语义
  99. 6.2.3 语法分析
  100. 第7章 通用性无处不在
  101. 7.1 lambda演算
  102. 7.2 部分递归函数
  103. 7.3 SKI组合子演算
  104. 7.4 约塔(Iota)
  105. 7.5 标签系统
  106. 7.6 循环标签系统
  107. 7.7 Conway的生命游戏
  108. 7.8 rule 110  
  109. 7.9 Wolfram的2,3图灵机
  110. 第8章 不可能的程序
  111. 8.1 基本事实
  112. 8.1.1 能执行算法的通用系统
  113. 8.1.2 能够替代图灵机的程序
  114. 8.1.3 代码即数据
  115. 8.1.4 可以永远循环的通用系统
  116. 8.1.5 能引用自身的程序
  117. 8.2 可判定性
  118. 8.3 停机问题
  119. 8.3.1 构建停机检查器
  120. 8.3.2 永远不会有结果
  121. 8.4 其他不可判定的问题
  122. 8.5 令人沮丧的暗示
  123. 8.6 发生上述情况的原因
  124. 8.7 处理不可计算性
  125. 第9章 在“玩偶国”中编程
  126. 9.1 抽象解释
  127. 9.1.1 路线规划
  128. 9.1.2 抽象:乘法的符号
  129. 9.1.3 安全和近似:增加符号
  130. 9.2 静态语义
  131. 9.2.1 实现
  132. 9.2.2 好处和限制
  133. 9.3 应用
  134. 后记
书名:计算的本质:深入剖析程序和计算机
作者:Tom Stuart
译者:张伟 译
国内出版社:人民邮电出版社
出版时间:2014年10月
书号:978-7-115-36154-7
原版书书名:Understanding Computation: From Simple Machines to Impossibl
原版书出版商:O'Reilly Media
Tom Stuart
 
Tom Stuart 伦敦数字产品咨询公司Codon的创始人、计算机科学家、程序员,擅长Ruby、Rails、Web应用、用户体验、面向对象设计和行为驱动开发。另外,作为顾问、导师和培训师,他经常通过网络帮助各家公司高质高效地创建软件产品。他还曾在剑桥大学做编译器优化方面的演讲,与人联合组织过Ruby大会(Ruby Manor),而且是伦敦Ruby用户组的成员。