读《编程珠玑》有感

读《编程珠玑》有感

最近在团队项目进展的同时,我拜读了Jon Bentley的著作《编程珠玑》,下面把我的一些个人感悟与各位分享一下。

精准的问题陈述

本书开篇就讨论了一个小问题:给10000000个7位整数排序(无重复的整数),但是你可能只有1MB的空闲主存,怎么才能又快又好地实现排序这一功能呢?通常的想法是归并,多几次就可以了。但是其实还有更好的方法,就是利用位图的位向量。例如如果集合是{1,2,3,5,8,13},那么可以存储在下面这个字符串中:

0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0

集合中代表数字的各个位设置为1,而其他的位全部都设置为0。这时候如果要个这10000000个整数排序,就可以分成这三步:1)初始化一个大数组。2)遍历一遍这10000000个数,出现过的就在数组中标注为1。3)最后再遍历一遍这个数组,把出现1的对应位置的数字输出一遍即可。看了作者给的方法,我恍然大悟,在惊叹只需遍历两次的同时,我也领悟到了精准描述问题带来的好处。在精准描述问题的时候,我们可以找到最佳的解决策略。因此我们需要解决一个问题时,需要花费一定的时间来分析问题本身,如果我们仅仅是想简单的解法,我们很有可能走一大段弯路。

编写正确的程序

本章的内容着眼于如何帮助现实中的程序员编写正确的程序,作者花费大量的篇幅举了二分查找的例子,让我明白了编码技能只构成了编写正确程序的一小部分。为了能对程序有很深的理解,我们需要用到程序验证技术,用它来表达对程序的理解。此外,这一部分内容让我感触最深的还是:熟悉各种先进技术的专业程序员经常在较为容易的部分犯错误,而且当他们在这些容易的部分遇到问题时,他们往往放弃采用功能强大的正规技术,而是转向古老的编程方式。因为我也会经常遇到一些情况,在上个学期的数据结构的上机实验中,我不只一次在极为简单的程序犯错,但是我总是不想使用IDE提供的设断点、单步执行的调试方式,而是一行一行代码看,认为自己能够在较短的时间内找到程序的错误,然而结果总是我浪费了很长的时间,但是仍然没有找到错误,只好向同学和老师求助,当他们帮我指出这些错误的时候,我才发现自己当初是多么的愚蠢。

代码优化

其实代码优化是程序员将来要长期进行的工作,但是现在我们大多数人都忽视代码优化这一步骤,只是想尽快写完代码,实现既定功能就行,并不打算在代码优化上花费时间。这是一个非常可怕的现象,因为以后我们在进入公司之后,不可能只是做出来一个项目而不进行维护,而且我们的大部分时间都将是花费在代码维护上,如果现在不建立起这种观念,将来对我们个人的发展将相当不利。本书中提到了代码优化的六大原则,让我印象深刻:

1.空间换时间原则

2.时间换空间原则

3.循环法则

4.逻辑法则

5.过程法则

6.表达式法则

作者较为详细地论述了这六大原则,我深受触动,因此,我下定决心,以后不能只是简简单单地写完代码就万事大吉,还要遵循这六条法则对已有代码进行进一步的优化。

猜你喜欢

转载自www.cnblogs.com/rjgcqth/p/9119408.html