豆瓣阅读

    代码之髓:编程语言核心概念

    阅读
    ¥22.50
    • 导言
    • 目录
    • 作品信息

    作者从编程语言设计的角度出发,围绕语言中共通或特有的核心概念,通过语言演变过程中的纵向比较和在多门语言中的横向比较,清晰地呈现了程序设计语言中函数、类型、作用域、类、继承等核心知识。本书旨在帮助读者更好地理解各种概念是因何而起,并在此基础上更好地判断为何使用、何时使用及怎样使用。同时,在阅读本书后,读者对今后不断出现的新概念的理解能力也将得到提升。

    本书力求简明、通俗,注重可读性,可作为大学计算机科学和软件工程等专业程序设计语言概论教材、计算机等级考试的参考资料,也可作为软件开发人员的学习参考书。

    西尾·泰和(Nishio Hirokazu),24岁取得理学博士学位。2007年起在Cybozu实验室从事提高知识生产力的软件开发工作。曾担任“2011年全日本安全与程序设计实战集训”程序设计语言组组长。特别关注编程语言的多样性及发展。著作有《Jython语言程序设计》《程序员应该了解的程序设计基础知识》《WEB+DB PRESS》(第60期特辑)等。

    曾一鸣,2010年上海交通大学电子工程系研究生毕业,现就职于某国际独立软件开发商,从事软件售后支持工作。对面向对象程序设计、脚本语言及其在语音、图像等信号处理中的应用有着浓厚的兴趣。

    1. 前言
    2. 致谢
    3. 本书构成
    4. 示例代码下载
    5. 第 1 章 如何深入高效地学习语言
    6. 1.1 在比较中学习
    7. 语言不同,规则不同
    8. C 语言和 Ruby 语言中的真假值
    9. Java 语言中的真假值
    10. 1.2 在历史中学习
    11. 理解语言设计者的意图
    12. 应该学哪种语言,我们无从所知
    13. 学习适用于各种语言的知识
    14. 1.3 小结
    15. 第 2 章 程序设计语言诞生史
    16. 2.1 程序设计语言诞生的历史
    17. 连接电缆
    18. 程序内置
    19. FORTRAN 语言问世
    20. 2.2 程序设计语言产生的原因
    21. 懒惰:程序员的三大美德之一
    22. 语言们各有各的便捷
    23. 何为“便捷”
    24. 各有各的便捷
    25. 2.3 小结
    26. 第 3 章 语法的诞生
    27. 3.1 什么是语法
    28. 运算符的优先顺序
    29. 语法是语言设计者制定的规则
    30. 3.2 栈机器和 FORTH 语言
    31. 计算的流程
    32. 如何表达计算顺序
    33. 现在仍然使用的栈机器
    34. 3.3 语法树和 LISP 语言
    35. 计算流
    36. 如何表达计算顺序
    37. 现在仍然使用的语法树
    38. 3.4 中缀表达式
    39. 语法分析器
    40. 规则的竞争
    41. 3.5 小结
    42. 第 4 章 程序的流程控制
    43. 4.1 结构化程序设计的诞生
    44. 4.2 if 语句诞生以前
    45. 为什么会有 if 语句
    46. 为什么会有 if...else 语句
    47. 汇编语言中的表达方式
    48. C 语言中的表达方式
    49. 使用 if...else 语句的好处
    50. 4.3 while 语句——让反复执行的 if 语句更简洁
    51. 使用 while 语句的表达方式
    52. 不使用 while 语句的表达方式
    53. 4.4 for 语句——让数值渐增的 while 语句更简洁
    54. 使用 for 语句的表达方式
    55. 不使用 for 语句的表达方式
    56. foreach——根据处理的对象来控制循环操作
    57. 4.5 小结
    58. 第 5 章 函数
    59. 5.1 函数的作用
    60. 便于理解——如同一个组织
    61. 便于再利用——如同零部件
    62. 程序中再利用的特征
    63. 5.2 返回命令
    64. 函数的诞生
    65. 记录跳转目的地的专用内存
    66. 5.3 递归调用
    67. 嵌套结构体的高效处理
    68. 嵌套结构体的处理方法
    69. 无法用 for 语句实现
    70. 使用递归调用
    71. 递归调用执行时的程序流
    72. 5.4 小结
    73. 第 6 章 错误处理
    74. 6.1 程序也会出错
    75. 6.2 如何传达错误
    76. 通过返回值传达出错信息
    77. 遗漏错误
    78. 错误处理导致代码可读性下降
    79. 通过跳转集中进行错误处理
    80. 出错则跳转
    81. UNIVACI
    82. COBOL
    83. PL/I
    84. 6.3 将可能出错的代码括起来的语句结构
    85. John Goodenough 的观点
    86. 引入 CLU 语言
    87. 引入 C++ 语言
    88. 引入 Windows NT 3.1
    89. 6.4 出口只要一个
    90. 为什么引入 finally
    91. 成对操作的无遗漏执行
    92. 使用 finally 的解决方案
    93. 没有 finally 的 C++ 语言的解决方案
    94. D 语言中 scope (exit) 的解决方案
    95. 6.5 何时抛出异常
    96. 函数调用时参数不足的情况
    97. 数组越界的情况
    98. 出错后就要立刻抛出异常
    99. 6.6 异常传递
    100. 异常传递的问题
    101. Java 语言的检查型异常
    102. 检查型异常没有得到普及的原因
    103. 6.7 小结
    104. 第 7 章 名字和作用域
    105. 7.1 为什么要取名
    106. 怎样取名
    107. 名字冲突
    108. 如何避免冲突
    109. 取更长的变量名
    110. 使用作用域
    111. 7.2 作用域的演变
    112. 动态作用域
    113. 如何操作
    114. 问题点
    115. 静态作用域
    116. 动态作用域中的对照表能被全部代码读取
    117. 静态作用域按函数区分对照表
    118. 7.3 静态作用域是完美的吗
    119. 嵌套函数的问题
    120. 外部作用域的再绑定问题
    121. Python 语言中的解决方法
    122. Ruby 语言中的解决方法
    123. 7.4 小结
    124. 第 8 章 类型
    125. 8.1 什么是类型
    126. 8.2 数值的 on 和 off 的表达方式
    127. 数位的发明
    128. 七段数码管显示器
    129. 算盘
    130. 8.3 一个数位上需要几盏灯泡
    131. 从十进制到二进制
    132. 八进制与十六进制
    133. 八进制
    134. 十六进制
    135. 8.4 如何表达实数
    136. 定点数——小数点位置确定
    137. 浮点数——数值本身包含小数部分何处开始的信息
    138. 这是怎样一种思考方法
    139. IEEE 754 中规定的浮点数的构成
    140. 问题点
    141. 8.5 为什么会出现类型
    142. 没有类型带来的麻烦
    143. 早期的 FORTRAN 语言中的类型
    144. 告诉处理器变量的类型
    145. 隐性类型转换
    146. 整数之间、浮点数之间的运算
    147. 一边为整数一边为浮点数的运算
    148. 问题点
    149. 用写法来区别的语言
    150. 8.6 类型的各种展开
    151. 用户定义型和面向对象
    152. 作为功能的类型
    153. 区别公开与非公开
    154. 发展为接口
    155. 用类型实现所有功能的时代到来了吗
    156. 总称型、泛型和模板
    157. C++ 语言中
    158. Java 语言中
    159. Haskell 语言中
    160. 动态类型
    161. 如何实现
    162. 优势与不足
    163. 类型推断
    164. Haskell 语言和没有类型推断的 C 语言的比较
    165. Haskell 语言的类型推断
    166. Scala 语言的类型推断
    167. 强类型下是否可以做到程序没有 bug
    168. 8.7 小结
    169. 第 9 章 容器和字符串
    170. 9.1 容器种类多样
    171. 9.2 为什么存在不同种类的容器
    172. 数组与链表
    173. 往数组中插入数值
    174. 往链表中插入数值
    175. 链表的模式图
    176. 链表的长处与短处
    177. 语言的差异
    178. 9.3 字典、散列、关联数组
    179. 散列表
    180. 元素的读取时间
    181. 对于树
    182. 对于散列表
    183. 没有万能的容器
    184. 9.4 什么是字符
    185. 字符集和字符的编码方式
    186. 计算机诞生以前的编码
    187. 摩斯码
    188. 博多码
    189. EDSAC 的字符编码
    190. ASCII 时代和 EBCDIC 时代
    191. 日语的编码
    192. ISO-2022-JP
    193. Shift_JIS
    194. EUC-JP
    195. Shift_JIS 编码对程序的破坏
    196. 魔术注释符
    197. Unicode 带来了统一
    198. 9.5 什么是字符串
    199. 带有长度信息的 Pascal 语言字符串和不带这一信息的 C 语言字符串
    200. 用 NUL 字符表示字符串的终止
    201. NUL 字符导致的不便
    202. 1 个字符为 16 比特的 Java 语言字符串
    203. Python 3 中引入的设计变更
    204. Ruby 1.9 的挑战
    205. 9.6 小结
    206. 第 10 章 并发处理
    207. 10.1 什么是并发处理
    208. 10.2 细分后再执行
    209. 10.3 交替的两种方法
    210. 协作式多任务模式——在合适的节点交替
    211. 抢占式多任务模式——一定时间后进行交替
    212. 10.4 如何避免竞态条件
    213. 竞态条件成立的三个条件
    214. 没有共享——进程和 actor 模型
    215. 在进程中没有内存共享
    216. 没有共享的方式成功了吗
    217. actor 模型
    218. 不修改——const、val、Immutable
    219. 不介入
    220. 线程的协调——fibre、coroutine、green thread
    221. 表示不便介入的标志——锁、mutex、semaphore
    222. 10.5 锁的问题及对策
    223. 锁的问题
    224. 陷入死锁
    225. 无法组合
    226. 借助事务内存来解决
    227. 事务内存的历史
    228. 硬件事务内存
    229. 软件事务内存
    230. 事务内存成功吗
    231. 10.6 10.5小结
    232. 第 11 章 对象与类
    233. 11.1 什么是面向对象
    234. 内涵因语言而异的面向对象
    235. 对象是现实世界的模型
    236. 什么是类
    237. 11.2 归集变量与函数建立模型的方法
    238. 11.3 方法 1:模块、包
    239. 什么是模块、包
    240. 用 Perl 语言的包设计对象
    241. 光有模块不够用
    242. 分开保存数据
    243. 向参数传递不同的散列
    244. 把初始化处理也放入包中
    245. 把散列和包绑定在一起
    246. 11.4 方法 2:把函数也放入散列中
    247. first class
    248. 把函数放入散列中
    249. 创建多个计数器
    250. 把共享的属性放入原型中
    251. 原型的操作
    252. 用 new 运算符实现高效表达
    253. 这就是面向对象吗
    254. 11.5 方法 3:闭包
    255. 什么是闭包
    256. 为什么叫做闭包
    257. 11.6 方法 4:类
    258. 霍尔设想的类
    259. C++ 语言中的类
    260. 功能说明的作用
    261. 类的三大作用
    262. 11.7 小结
    263. 第 12 章 继承与代码再利用
    264. 12.1 什么是继承
    265. 继承的不同实现策略
    266. 一般化与专门化
    267. 共享部分的提取
    268. 差异实现
    269. 继承是把双刃剑
    270. 里氏置换原则
    271. 12.2 多重继承
    272. 一种事物在多个分类中
    273. 多重继承对于实现方式再利用非常便利
    274. 12.3 多重继承的问题——还是有冲突
    275. 解决方法 1:禁止多重继承
    276. 委托
    277. 接口
    278. 解决方法 2:按顺序进行搜索
    279. 深度优先搜索法的问题
    280. C3 线性化确定顺序
    281. 解决方法 3:混入式处理
    282. Python 语言中
    283. Ruby 语言中
    284. 解决方法 4:Trait
    285. 名字冲突时的程序行为
    286. 提供的方法和所需的方法
    287. 其他各功能
    288. Trait 逐渐被广泛采纳
    289. 12.4 小结
    290. 后记

    作者〔日〕西尾泰和

    译者曾一鸣

    类别 图书 / 非虚构

    出版社人民邮电出版社

    出版日期

    ISBN7115361533

    提供方图灵社区

    标签计算机(1314)编程(353)程序设计(159)

    喜欢这本书的人也喜欢

    来自豆瓣读书的评论6