看来今天又是个看书的日子,原本的两节课网络和vhdl全取消了。早上8点起床,zz说要跑步,看来今天跑不成了,还是去图书馆吧。中午吃饭,吃完才诡异的发现,坐在我旁边的竟然是燕子,狂晕…竟然那样坐了20分钟,完全没发现……..
接着说书吧,这本是大名鼎鼎的K&R里的K写的,从风格、算法与数据结构、设计与实现、界面、排错、测试、性能、可移植性、和记法等方面,讨论了程序设计中实际的、又是非常深刻和具有广泛意义的思想、技术和方法。加上<programming pearls>,应该算是程序设计领域关于程序设计方面的两部经典,当然另一部大部头的<cc2>也是业界公认的经典了。
两本书都很短小,200页左右,从程序设计的实践出发,列举了很多作者实际开发中的实例,娓娓道来,读起来很舒服,难度也很小,是通俗易懂,里面的道理简单实用,也很贴近实践,经典就是经典。
简述一下各章的精华的主题吧,又是一篇读书笔记…….
打断一下,晚上回来接着写吧。。。
回来了,接着写。
风格:第一要素可读性,书写的程序应当容易被自己和别人理解。涉及到命名原则,缩排风格一致性,不要使用幻数,必要恰当的注释应起相应的作用。
算法与数据结构:程序设计的基础,掌握基本算法:检索和排序,基本数据结构:数组,栈,树,hash表。并灵活运用以适应实践的需求。具备选择合适的算法和数据结构的能力。
设计与实现:
以马尔科夫链算法生成随机语句为例。观点在首先确定合适的数据结构,其他的便随之确定。
主要利用了hash,同时涉及到一个经典的问题,随机选择链表元素。
该问题解决方法如下:
Node temp;
int i = 1;
for(;head != NULL;head = head -> next,i++)
if(rand() mod i == 0)
temp = head;
证明如下:对于k个元素的链表,其第i个元素被选择的概率为第i次被选择,而其后的i+1….k不会被替换,而单次被选择的概率为1/i,未被选择的概率为1-1/i.故这个概率为(1/i)*(i/i+1)*(i+1/i+2)*…(k-1/k)=1/k
界面:主要是指程序的接口设计原则,首要的便是封装,接口应当可以并行调用,避免使用全局变量,界面内部的变化不应当影响到外部调用者。
排错:首先应当了解可能的错误发生在程序本身,测试程序,环境(库,os,硬件)。当然绝大多数发生在程序本身。排错的方式有观察逆向推理,定位错误位置,利用工具查看堆栈状态,让错误重现,求助他人。
测试:测试是必须的,最好在编程时就进行,测试的自动化,搭建测试台,并保留测试日志
性能:优化的第一要义便是不做。首先要确定确实需要优化,当优化达到目的时便应立即停止。寻找程序瓶颈,优化那些关键部位。优化的方法:算法数据结构,编译器优化,调整代码
可移植性,记法。
程序设计还是从实践中求真知吧……