保证你的程式简单易读,否则退费

易读程式之美学:提升程式码可读性的简单法则
前几天ㄚ琪在舒读无瑕的程式码 : 敏捷软体开发技巧守则一阵子之后,今天开始换易读程式之美学:提升程式码可读性的简单法则来读了,看来两本书的性质颇为相似,不过外观上却是让人惊讶不少,首先,就CP值来比的话,这真是贵的不像话,因为这本书真是超薄的,可是价格要400元,打完79折后也要379元,对于手头银根有点紧的我来说,根本不可能买得下手,但是当我翻到了前言,作者说这本书一两个礼拜就可以读完,喔,那不就是说,原本的厚书你可能要读好几个月,现在因为超薄的书,你可以节省好几个礼拜去写好程式赚小朋友,这才是物超所值啊。

[adsense][/adsense]

嗯,到现在应该还买不下手吧,那就先看看介绍再说:

易读程式之美学主题是介绍如何写出有高度可读性的程式码,主要概念是程式码必需易于理解,更精确地说,撰写程式码时应将他人理解程式码所需的时间缩到最短。

这书使用许多不同程式语言的范例解释这个概念,包含了 C++、Python、JavaScript 以及 Java;避开了程式语言的进阶特性,即使不熟悉这些程式语言的读者,也能够轻易理解内 容(毕竟,可读性概念大多与程式语言本身无关)。

本书各章节由程式设计的不同层面说明如何让程式“更易于理解”,共分为四个部份;

表层改善
名称、注解与美学:使用在每一行程式码的简单技巧。

简化回圈与逻辑
透过改善程式的回圈、逻辑与变数,提高可读性的方法。

重新组织程式码
组织大区块程式以及从函数层面解决问题的高阶作法。

精选主题
将“易于理解”原则应用在测试以及大型资料结构的程式。

作者简介

Dustin Boswell

毕业于 CalTech,任职于 Google 五年,负责网页抓取基础设施(web crawling infrastructure)以及广告相关程式。他建立了多个网站,喜欢海量资料与机器学习等领域。

Trevor Foucher

曾任职于微软十余年,担任 Windows 与安全相关产品的工程师、经理以及技术负责人,目前任职于 Google 负责广告程式与搜寻基础设施。

目录:

前言

1 程式码应该易于理解
“更好”的意义?
可读性基本定理
比较短的程式都比较好吗?
最短理解所需时间与其他目标是否冲突
困难所在

第一部份 表层改善

2 富含资讯的名称
选择词汇
避免 tmp 与 retval 之类的通用名称
优先使用具体名称而非抽象名称
在名称中加入额外资讯
名称该有多长?
利用名称格式加入更多意义
结语

3 不被误解的名称
范例:Filter()
范例:Clip(text, length)
包含边界的极值优先使用 min 与 max
闭区间优先使用 first 与 last
半开放开区间优先使用 begin 与 end
布林值名称
符合使用者的预期
范例:评估多个可用名称
结语

4 美学
美学为何重要?
调整断行让程式更加一致与简洁
使用方法(method)消除混乱
适当使用列对齐
选择有意义的顺序并坚守到底
将宣告组织成区块
区分程式码“段落”
个人风格与一致性
结语

5 认识注解
不该注解的部份
记录自己的想法
为读者设想
最后 – 避免作者区块
结语

6 让注解精确与简洁
维持注解简洁
避免模棱两可的代名词
修整草率的语句
精确描述函数行为
使用具代表性的输入∕输出范例
表达程式意图
“函数参数名称”的注解
使用讯息密集的词汇
结语

第二部份 简化回圈与逻辑

7 提高控制流程可读性
条件式中的条件顺序
if/else 区块顺序
□: 条件式(也称为“三元运算子”)
避免 do/while 回圈
尽早由函数中返回
恶名昭彰的 goto
减少巢状结构
能否理解执行流程?
结语

8 分解巨大表示式
解释性变数
摘要变数
利用笛摩根定律
误用捷径逻辑
范例:与复杂逻辑搏斗
分解巨大的叙述
另一个有创意的简化手法
结语

9 变数与可读性
消除变数
缩限变数的范围(scope)
偏好单次写入的变数
最后的范例
结语

第三部份 重新组织程式码

10 抽离不相关子问题
说明范例:findClosestLocation()
纯工具程式码
其他通用程式码
建立大量通用程式码
专案专属功能
简化既有介面
依需求重塑介面
过犹不及
结语

11 一次一项工作
工作可以很小
从物件抽取数值
较大的范例
结语

12 将想法转化为程式码
清述描述逻辑
认识函式库能提供的协助
在较大问题应用本方法
结语

13 撰写较少程式码
不开发那些功能 – 不会需要
询问与分解需求
维持程式码小而美
熟悉使用的函式库
范例:用 Unix 工具代替撰写程式
结语

第四部份 精选主题

14 测试与可读性
让测试易读与维护
这些测试有何问题?
让测试更易读
让错误讯息易读
选择良好的测试输入
测试函数的命名
那些测试有何问题?
测试友善的开发
过度应用本原则
结语

15 “分∕时计数器”的设计与实作
问题说明
定义类别介面

第一次尝试:粗略的解决方案
第二次尝试:输送带式设计
第三次尝试:时间区段(Time-Bucketed)设计
比较三种解决方案
结语

A 延伸阅读

索引

↑↑↑↑↑↑↑

再跟你说一下,更好康的事,除了打79折外,现在购买填写姓名邮件地址,经确认即送1点,让你有机会赢得09/09~10/08的新加坡机票一张。说真的我还是比较不喜欢读书,倒是比较想去新加坡走走说~