《编程珠玑·续》读书笔记

作者Jon Bentley,世界著名计算机科学家,被誉为影响算法发展的十位大师之一。本书讲述了对于程序员有共性知识,通过一些精心设计的有趣而又颇具指导意义的程序,对实用程序设计技巧及基本设计原则进行透彻而睿智的描述,为复杂的编程问题提供清晰而完备的解决思路。

第一部分 编程技术

1、性能监视工具

听诊器是一种简单工具,却给医生的工作带来了革命:它让内科医生能有效地监控病人的身体。性能工具(profiler)对程序起着同样的作用。

使用性能监视工具。让本月成为性能监视工具月。请在随后的几周至少监视一个程序片段的性能,并且鼓励你的伙伴也这样做。记住,当一个程序员屈尊来帮助一个小程序时,并不总是高瞻远瞩的。

开发性能监视工具。如果你还没有方便的性能监视工具,就自造一个吧。大多数系统都提供基本的性能监视操作。20世纪60年代不得不观察控制台灯光来获得信息的程序员,现在可从个人工作站的图形窗口获得同样的信息。一个小程序通常足以把系统的命令特性包装成方便的工具。

2、关联数组

本章讨论Algol传统之外的一种语言特性:关联数组(associative array)。我熟悉的数组都用数值作下标,而关联数组则允许像count[“cat”]这样的引用。这样的数据结构出现在Snobol和Rexx这样的语言中,它允许我们用简单的程序来表达复杂的算法。

Awk可以使用程序事半功倍,我们目前看到的多数程序如果使用传统的语言编写,代码量恐怕会多出一个数量级。规模的减小归功于Awk的几个特性:输入行之上的隐士循环、自动分隔成字段、变量的初始化和转换,以及关联数组。

3、程序员的忏悔

大多数程序员都会花很多时间去测试和调试,不过在他们写程序的时候,却很少注意这些问题。大厦周围的脚手架使得工人能够接触到他们本来无法接触到的地方;软件中的脚手架由临时程序和数据组成,他们可以使程序员访问系统的各个组件。脚手架不会随着程序一起发给客户,然后在测试和调试中却是不可或缺的。

4、自描述数据

一些系统允许程序员将两个未指定类型的数值(从整数到复数矩阵)对象相乘。系统在运行时会先检查存储在操作数中的描述来决定其类型,进而执行合适的操作。标记体系结构(tagged-architecture)的机器为自描述对象提供了硬件支持,一些通信协议也将对数据格式和类型的描述与数据本身一同存储。最重要的文档助手是简洁的编程语言。名字-值对是一种简单而且实用的语言机制。程序文档的最佳位置就在源文件中。数据文件是保存该文件自身来历的好地方,不仅易于操作而且不易丢失。

第二部分 使用部分

5、劈开戈尔迪之结

在古希腊神话中,戈尔迪打了一个结,并许诺把整个亚洲给能解开这个结的人,可以当亚细亚之王。几百年来这个结纹丝不动,直到公元333年亚历山大大帝来了,他没有重蹈覆辙,而是拔出剑来,将结一劈两半,他随即征服了亚洲。从那时起,“劈开戈尔迪之结”意味着为复杂问题找出聪明的解法。

用现代的话说,亚历山大找到了捷径。主人公总是很懒惰,不肯用难的方法解决问题,最终找到了一个简单的方案。去对付问题,而不是对付程序。

6、计算机科学箴言集

如果还没想清楚,就用蛮力算法吧。如果你发现特殊情况太多,那你的肯定是用错方法了。测试智能证明程序有错误,而不能证明程序没有错误。对于那些快速算法,我们总是可以拿一些速度差不懂但是更容易理解的算法来替代它们。别轻信那些看似聪明的法则。

7、粗略估算

每一位程序员都应该对粗略估算并不陌生,当你尝试为数据库系统增加一条命令的时候,你可能要进行下面的估算:需要多少程序员、多少时间来写这段代码?需要增加多少磁盘来存储多出来的数据?当前使用的处理器速度是否能够将系统响应时间维持在合理的范围内?程序员的三大美德:对数值敏感、实验的欲望结良好的数学功底。

8、人员备忘录

添加备忘录,可以及时提醒自己,发现自己的不足之处。

第三部分 人性化I/O 

9、小语言

小语言是流行的第四代和第五代编程语言以及应用程序生成环境的重要组成部分,然而它们对计算本身的影响要更广。小语言通常为人类提供了一个优雅的界面,这既方便了人类控制复杂的程序,也便于大系统中的模块进行彼此间的交互。

10、文档设计

文档设计需要创意。如果所有人着装相同,所有车的车型和颜色也一样,那么这个世界是多么的乏味甚至令人生畏。一个所有风格看上去都差不多相同的文档库也是一样。综合考虑文档的许多属性,才能得到最佳的设计效果。好的文档风格就像好的编程风格和好的写作风格一样,是无形的。内容是文档的首要目的,文档风格只是达到这一目的辅助手段。

11、图形化输出

绘制生动的图需要多样的技术。图作者必须对应用程序足够理解才能决定应当概括哪些数据,必须足够领会数据的含义才能避免得出没有数据(或错误)的结论,而且必须选择合适的媒介(可能是墨或激光打印机)来设计并实现图。

12、对调查的研究

人们都知道调查,美国新闻界经常向民众发出民意调查,调查主题从总统的声望到喜欢吃哪种爆米花五花八门。我为民意调查公司安装个人电脑并为他们写自动化程序,帮助他们提高活动效率。

第四部分 算法

13、绝妙的取样

在纸牌游戏中,如果让计算机来发牌,该怎么做呢?如果给一副牌中每张牌指定从1到52的一个整数,就可以从1~52范围内“随机取样”5个整数来得到一手牌,例如 :4 8 31 46 47,随机取样也出现在各种不同应用中,如仿真、程序测试和统计学。

14、编写数值计算程序

行内的人给它起了个好听的名字叫“数值分析”,对于大多数程序员来说,数值计算这个领域很像管道工的活儿:我们经常用,但不去想太多的细节,除非有东西出了问题。但即使对于一个像我这样的外行来说,数值分析也是有用的。

15、选择

分析了Hoare的选择算法的两个方面:它的结果是正确的,并且它的计算很有效率。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,065评论 25 707
  • 天赐是某跨国公司的职员,业绩普普通通,同事关系不好不坏,在众多同事中,只能是众多平庸中的一个,一心想要得到领导的赏...
    南漂先生阅读 241评论 0 1
  • 你为了印证秋天不死 在我捡拾枯黄的落叶时 细润着我的掌心 黄昏来临 这是第多少个黄昏 我笑问母亲 很多东西都记不起...
    子夜的风2阅读 245评论 2 13
  • 导语 密切的社会关系意味着大量的流言蜚语,每个人的行为将会影响其声誉,而声誉对一个复杂的社会而言,是信任的重要基础...
    OneWing阅读 801评论 0 7