从大二下学期开始,对编程的认识不再止步于ACM比赛写的控制台程序,开始接触更多的知识,之后读过一些相关的书,在大学回忆录里有总结过,现在看来还是挺有意义的,贴到这里作为一个读书的分享。以下文字节选自自己2012年6月写的大学回忆录。
————————————————————————————————————————————————
除了动手写程序,看书也是很重要的。在这里推荐几本好书,排在首位的必然是《windows核心编程》(清华大学出版社)。在读完这本书之后,会了解到操作系统关于进程管理,内存管理方面的原理。而动态链接库那一部分,更是其他书上少见的技术讲解。在弄懂了以后,我做了一个DLL注入器,也成功hook了一些普通windows程序,最后发现,不加壳的windows程序实在犹如敞开的大门,任意进出修改啊。反正这本书真的吐血推荐,想成为一名windows程序员,这是必读。
另外,关于编译器的书,推荐一本《程序员的自我修养——装载、链接、库》(电子工业出版社),这本书的名字的确有点囧,很容易联想到周星驰在喜剧之王里面的那本《演员的自我修养》。但这的确是一本好书,深入讲解了很多编译器的工作原理,预编译,编译,汇编,链接各部分细节都有讲解。还有关于静态链接库,动态链接库的知识,这些知识都是当之无愧的,程序员的修养。
汇编语言方面,推荐一本《Intel汇编语言程序设计》(电子工业出版社),这是一本很好的汇编入门书籍,它不想传统教科书只讲解汇编语法,而且会联系操作系统的原理和高级语言的很多现象来介绍汇编语言。例如函数调用的细节,栈平衡,返回地址,thiscall的本质等等。这样你就不会觉得你是在学习一门过时的,不实用的语言,而是在深入了解程序的本质。而且汇编语言的掌握,对于之前所说的DLL注入等黑客技术来讲,也是不可或缺的。所以,学习汇编语言还是很重要的。
至于DX编程方面,广泛推荐的龙书自然不提了,还有两本很值得一看的,一本是《DX3D游戏开发导引》(叶至军著),这本书不仅对于DX原理和接口的讲解很清楚,而且还给出了对于DX库的封装代码,在这基础上,你能很好的封装DX的接口从而做一个自己的小引擎。我的毕业设计,就是在他的基础上封装一个引擎,然后再实现的表现功能,这个过程令我对游戏引擎以及游戏架构有了更多的了解。还有一本是《计算机图形学(第2版)》(人民邮电出版社),这是一本纯数学的书,按照老大说法,只有纯爷们才啃得下,我也是好不容易啃了半本。说实在,你在以后的工作中不是做游戏引擎的话,真的很少机会接触到这些数学知识,但是作为一本学习的书,的确是一个很好的挑战。在看完一半之后,我按照书上的知识,自己编写所有矩阵变换,模拟3D变换的全部过程,最后只用setPixel画出一个3维的盒子,并且能控制摄像机转动从而在不同角度观察这个盒子。我都觉得这是我到目前为止写过,最有难度的程序。
还有一本关于计算机原理的书——《深入理解计算机系统》(中国电力出版社),这本书之所以放在后面介绍,是因为他讲解了编程的各方面知识,有汇编的,编译器的,有操作系统的,还有讲解网络编程,并发编程,程序效率的等等。感觉这是一本总览的书,所以应该在看了一定的基础书籍以后再来看。但据说这是国外计算机科学大学低年级的教材,瞬间亚历山大有木有!!
.Net平台也略有了解,不过没有深入,当时入门的书籍是《C#与.NET 3.5高级程序设计(第4版)》(人民邮电出版社)。这本书对于学习.Net平台来说很适合。但个人感觉.Net是一个封装的很好的平台,在上面开发真的相对轻松很多,但往往会掩盖很多操作系统等基础的细节。
关于面向对象编程方面,个人认为《Head First 设计模式》(中国电力出版社)很值得一读。虽然很多入门以后的人觉得这本书太简单,但我觉得对于刚接触面向对象编程,然后又没有面向对象设计经验的人来说,这本书通过很多浅显的例子说明了为什么要面向对象设计,这是很重要的一点。因为让你看到需求,才会真正深入了解学习,就像你不知道线性代数有什么用时,为了考试学了就忘了。但通过图形学变换入手学习线性代数,就印象深刻。当然,面向对象设计的学习,最重要的是靠实践,所以自己动手,全面去设计,把握一个有至少二十个类以上的工程,是一个很重要的锻炼。
还有一些关于工程经验的书,例如《代码大全》,《Effective C++》等,个人感觉真正进入项目组工作以后再看也不迟,因为里面很多工程的讲究是建立在有团队合作开发以及后续维护上的。不然看完了也没什么印象,很快忘记了。