《编程珠玑》学习小结

《编程珠玑》学习小结

一、性能监视工具

听诊器是一种简单工具,却给医生的工作带来了革命;

你现在用什么工具来研究程序?

复杂的软件工具也永远替代不了程序员用来监控程序的最简单工具——性能监视工具,用它来了解程序各部分的执行频率。

一个程序中不到4%的语句通常占用了一半以上的运行时间。

找到占用时间长的程序代码,检查。

二、程序员的忏悔

大多数程序员都会花很多时间去测试和调试,不过在他们写程序的时候,却很少注意这些问题。

脚手架方法:有点类似UT,程序员通过它们访问系统的各个组件。

用脚手架检查程序或运行段落。

三、劈开戈尔迪之结

简单是最好的做事方式。

分析问题,并设计一个简单易行的方法。

什么是用户真正的需求

成本与收益

别把问题弄得太复杂

别把问题想的太简单

用正确的方法使用正确的工具

去对付问题,而不是对付程序

四、计算机科学箴言集

编码:

注意细节;

你用说话都描述不清的东西就别指望用代码写了;

如果你发现特殊情况太多,那你肯定是用错方法了;

先把数据结构搞清楚,程序的其余部分自现;

用户界面:

尽可能让用户界面风格保持一致和可预测性;

手工填写的表单中20%都包含坏数据;

不要让用户提供那些系统已知的信息;

所有数据集的80%中,有95%的信息量都可以用清晰的图表示;

调试:

开发者自己完成错误检查和修正会大大减少系统测试阶段和交付阶段修正的成本;(意思是开发阶段将错误减少到最小最小)

不要站着调试程序;

程序错误中,只有极少一部分是困难问题导致的;(意思是程序中极大的错误都是因为简单的完全可以避免的错误造成的)

别在注释里陷入太深;

修正程序错误的第一步是要先重现这个错误;(发现一个错误第一件事将UT中加上这个条目)

性能:

请把结构体或记录中最常用的成员放在最前面;

在优化一个程序之前,先用性能监视工具找到热点;

文档:

纸上的工作没有结束,整个工作也就没有结束;

软件管理:

只有不到10%的代码用于完成这个程序的表面上的目的,余下的都在处理输入输出、数据验证、数据结构维护等家务活;

软件管理:

代码能借用就借用;

与客户保持良好关系可以使生产效率加倍;

原型方法可以将系统开发的工作量减少40%

拼命干活无法取代理解;

最后:

别轻信那些看似聪明的法则;^_^

五、粗略估计

需要多少程序员、多少时间来完成这个功能?

需要增加多少磁盘来存储数据?

当前使用的处理器速度是否能够将系统响应时间维持在合理的范围内?

C语言几种常见数值运算开销:

原理:对数值敏感、实验的欲望、良好的数学功底

六、文档设计

表格:三条设计原则

迭代:一篇好文档会使我们觉得努力没有白费;

一致性:寻求特定的设计风格,然后坚持下去;

简约:强文必简

插图:

大小合适;精致线宽;文字与插图紧密结合;

七、算法:绝妙的取样

Floyd算法

“在我自己设计困难算法的经验中,我发现了一个扩展自己能力的方法。一个具有挑战性的问题解决后,我从头再做一遍,回顾之前的方法中的闪光点。我重复这样做,直到解决方法如我所希望的那样明确和直接。然后我考虑类似问题的通用准则,这将促使我在起初的时候最有效的解决问题。通常,这样的法则具有永久的价值。”——图灵奖获得者Floyd

算法:编写数值计算程序

例子:三维空间中两点距离

原理:

上下文环境的重要性;(在一个什么样的问题域中)

牛顿迭代;(与库函数中sqrt比较)

编写代码的技巧;(大的改进通常归功于算法的改变,代码小的改进也能减少运行时间)

库函数的作用;(库函数稳健,但不是总能在任何场景下最优)

猜你喜欢

转载自www.cnblogs.com/sunnypoem/p/9702659.html