http://gc-daniel-0318.spaces.live.com/blog/cns!B6826F6CF83C99E!5031.entry
随手写几个,一是推荐几本书,二是交流一下学习体会
首先是编程语言,这个东西是最没必要挑书的。刚入门的时候找本简单点的,能马上上手的,最好比较薄——也就是比较便宜——的书看看,比方工具王谭浩强的系列,比方钱能的C++前半本,然后就可以转到手册或者编译器带的帮助之类,各种语言的手册都是免费的。至于所谓的深度讲解、核心编程之类,当资料查查就行了,看不看的意思不大,具体原因稍后解释
基本的语言概念有了,就可以看数据结构了。其实讲语言没有不讲数据结构的,像链表、堆栈什么的,所以单纯的数据结构书也不用挑剔,随便什么语言的都无所谓,根据自己需要,找著名出版社出的一线教师写的书,比方清华那本黄皮的C++版,好象是温冬婵等三人写的。数据结构也是为了解决实际问题,所以只要对基本的数据结构有印象就行了,也没必要选怎么怎么牛的书
然后就是算法,这个是肯定要下大力气学习的。讲数据结构的书也没有不谈算法的,排序、查找等基本算法在数据结构书里都有。学算法主要的是原理,什么语言都一样。最实惠的是复杂度分析,恰好算法优劣比较是设计算法的大问题,所以这部分是重点又是难点。但是似乎现在能见到的大多数算法书都对复杂度分析讲的很简单,把篇幅集中在具体的算法上,所以只好自己从书里分析每个算法的过程里去体会,上学的时候在图书馆也看到过一些书上对这块讲的很清楚。我读过的大部分算法书都还有一个共同问题,就是让我很不服气。里面列举了大量的经典问题和著名算法,看的我很起劲,但是一把书合起来,脑子里一过,就发现,我要是遇到一问题,能想得出这样的算法吗?实践证明,我还真想不出来,第一反应一般总会是个基本的但也是极笨的算法。我还真就从来没遇到过一本真正教会人设计算法的书。这类书,可遇而不可求了。TAOCP绝对是作为工具书的好材料,当然,读起来也很有意思,DEK确实是个好笔杆子,但对我来说就是关键时刻求助用
以上这些方面都是在实际编码过程里可以看得出的招数拳脚,还有一些就属于内功修炼了,一时看不到效果,但是关键时刻可以体现出水平
操作系统,这里指的是操作系统原理,而不是操作之类。要是入门的话,推荐stalling的,好象是叫什么概念内核和分析之类的吧,国内有中文版,我读的是灰绿色封面的一版,原版的也有。这本书把基本概念讲解的还算清楚,虽然作者没说,但我感觉是按经典的系统5的路子,而且这本书也是为数不多的讲解管程的一本教材。还有就是关于MINIX、XENIX之类结合代码讲解的。之后可以看的书就多了,什么分布式、高级OS等,要想深刻学习,可以读代码,比方莱昂氏代码分析和LINUX代码分析,这两本看完,OS问题基本上就全部解决了,读这些代码的时候还可以学习编程技巧。OS编程是最简单的编程,它完全是在硬件能力基础上建立,自己定义规则而不需要遵循别的规则,但同时OS编程也是最复杂的,因为涉及的数据结构和算法种类多,要考虑的问题也多。UNIX和LINUX用的人那么多,一旦有人执行特殊操作,后果不堪设想,所以WINDOWS不断有UPDATE包出现。读这些代码其实也很有意思。不过我只是上学的时候读了莱昂氏的文件管理,刚毕业的时候读了一点LINUX的I/O控制两部分,读的也不全,而且忘的很快
编译原理,别以为这个只有做编译器的人才需要读,其实读好这门课,再思考代码的时候会有高屋建瓴的感觉。读编译原理之后,很明显的一个变化就是对代码的理解完全不一样了,对于代码应该怎么写,为什么要那么写,怎么写更好,错误是如何出现的,如果出错的后果,都能有理论到实践的全面认识,而那些深度讲解、核心编程之类的书之所以可以不看,也是因为在有了OS概念和编译理论后,这些东西稍微一想就能明白,原理都是一样的。那些深度讲解、核心编程之类的书都是给非计算机专业的人看的,因为他们不熟悉OS原理和编译理论等基础,无法一下子建立起比如进程线程控制、内存管理等概念,所以这些书手把手的教他们写代码,而且也是只教方法不讲原理。编译书,入门的可以看张幸儿教授的那本,讲解的蛮清楚的,自学就能懂。我在学校的教材就是这本,基本上也是自学的。这本书最大的问题在于,稍微老了点,所以代码优化部分不看也罢,词法语法分析部分也只讲到LR1的难度。之后,可以去看著名的“龙书”,好象是叫做什么编译原理概念原理与实践,封面有一条红色的大龙。这本书在编译领域20多年不衰,可见其地位。这本书对理论讲的很明白,但是问题也在于,老了点。不过因为LRK到现在一直都还没被淘汰,而且对于内存部分讲的很实用。这个我也只读到了词法语法分析就没再继续下去。这本书国内有影印,但是很难买。还有一本“虎书”,封面是绿色,有一只老虎,这本书出版时间比较晚,内容还挺新,每部分还都有实践,学完后把代码拼起来基本上就是个编译器。这本书国内有卖的,公司bookshell上也放过,我上学的时候也读过,当时是为了应付考试,后来发现考试没那么难,所以没读完
这些基本功相关的书都过一遍,但不用看的很详细,所谓好读书不求甚解,然后就可以结合必要的数学、应用知识,深入各个领域了
有人提到离散数学方面,这是对计算机领域最有用的一个数学分支。那本ROSEN教授的书,最好买最新版,这个老家伙很坏,每次更新版本都有很多变化。不过这种基础理论课没必要看洋人的,理论基础研究中国一直没落后过。北大耿素云、屈婉玲等人的那本就不错,清华一个张XX写的也挺好。只是北大那本书里有个别错误和疏漏,不知道现在最新版的纠正了没有。如果想要学的深刻点,可以看东南大学朱一清教授的,这个也是上学的时候老师推荐我们看的。朱教授的书写的深浅搭配很好,她的课也有意思。我上学的时候专门跑到东南去听过几次,不但在知识上,而且从讲课方式到语言风格都受益非浅。她的书也秉承了这个作风,内容严谨清晰。尤其关于数理逻辑部分,可能是因为她和我的老师是一脉相承,所以我对她的理论体系更容易接受,都是希尔伯特的理论体系,不是甘岑的体系