推荐一些书籍
2009年12月17日 星期四 下午 10:22
本来是写给新同学作为参考的,难得写这么多文字,贴到 blog 上自我陶醉下。咔咔。
-------------------------------------------------------------------------------------- -- 学习资料/推荐书目 -- -- 一个人不可能把所有知识都掌握无余,本文只希望达到“在学习某一领域软件知识时,可很快 -- 找到一些比较不错的参考书籍”的目的,就好。开卷有益 :-) -- -- 对于程序员来说,多读、多写代码可以收获很多。现在有很多优秀的开源项目,可以选取与工 -- 作相关的一两个项目,认真研读其代码。有时比读书,更能带来更快的提高。 -- Source code always tell the truth. -------------------------------------------------------------------------------------- ************************************************************************** * 体系篇 ************************ +------------+------------------------+----------------+ | GUI(L4) | Network/DB(L5) | 2D/3D (L6) | +------------+------------------------+----------------+ | 系统API(L2) | compiler/tool(L3) | +-------------------------------------------------------+ | 硬件/操作系统(L1) | +-------------------------------------------------------+ ========================================================= ====== L1 - Layer 1 (硬件/操作系统) ====== ========================================================= 此 Layer 主要是介绍操作系统的实现。 《Intel 64 and IA-32 Architectures Software Developer's Manuals》 http://www.intel.com/products/processor/manuals/ x64/x86 体系结构权威手册,可以下载到 pdf 版本。 《深入理解计算机系统》 http://www.douban.com/subject/1230413/ 计算机软硬件体系结构深入浅出的介绍。 《LINUX内核源代码情景分析》 http://www.douban.com/subject/1240321/ 《Windows内核情景分析》 http://www.douban.com/subject/3715700/ 两本情景分析,是以代码为实例,解说了两大操作系统的具体实现。实践性比较强。 《深入解析Windows操作系统》 http://www.douban.com/subject/2031396/ Windows官方著作,理论多,实践少。 《自己动手写操作系统》 http://www.douban.com/subject/1422377/ 《Orange S:一个操作系统的实现》 http://www.douban.com/subject/3735649/ 一个作者同一系列的两本书,看一本即可。操作系统的入门材料。 ========================================================= ====== L2 - Layer 2 (系统API) ====== ========================================================= 系统级对象、API的使用,比如 Process, Thread, Mutex, Socket 等等。 《Windows核心编程》 http://www.douban.com/subject/3235659/ 《UNIX环境高级编程》 http://www.douban.com/subject/1692629/ ========================================================= ====== L3 - Layer 3 (libc/compiler) ====== ========================================================= 使用高级语言,用好编译器、调试工具是必不可少的基础。至于是否需要研究编译器原理,则只是个人爱好了。 《Compilers: Principles, Techniques, and Tools》 http://www.douban.com/subject/1866231/ 《Advanced Compiler Design and Implementation》 http://www.douban.com/subject/1821532/ 《Modern Compiler Implementation in C》 http://www.douban.com/subject/1886911/ 三本讲解编译器实现的大部头,喜爱编译器原理的同学可以参考下。 《Linkers and Loaders》, http://www.douban.com/subject/1436811/ 链接和装载方面的权威理论著作。 中文版下载,http://www.oldlinux.org/oldlinux/viewthread.php?tid=10713 《链接、装载与库》 http://www.douban.com/subject/3652388/ 可以看作是《Linkers and Loaders》的升级中文版。 《软件调试》 http://www.douban.com/subject/3088353/ 《Windows高级调试》 http://www.douban.com/subject/3781532/ Windows 下的两本 debugging 宝典。 《Makefile/GCC/GDB 学习》 网上很多资料,可以任意 google。当然,gcc/gdb manual 是最详细的,虽然有点枯燥。 http://sourceware.org/binutils/docs/gprof/index.html http://valgrind.org/ http://dmalloc.com/ linux 下几个性能、内存检查的常用工具。 ========================================================= ====== L4 - Layer 4 (GUI) ====== ========================================================= GUI app 算是 desktop app,虽然是做游戏,但也免不了写点小工具,比如:地图编辑器、资源打包工具等等。 所以 GUI 知识也是需要的。这里介绍的都是 C/C++ 的 GUI 库,一般我们的做法是把 C/C++ 库封装到脚本(lua/python),直接通过脚本写具体的逻辑。MFC 是 windows 官方的古老东西,廉颇老矣,可以不用学习了。 当然,其实用 C# 做界面也是很方便的。Java 也行,就是有点慢。 《Programming Windows Fifth Edition》 http://www.douban.com/subject/1456779/ 理解 C/C++ 版的 win app 是如何运作的,第五版是最经典的一个版本。 《深入浅出MFC》 http://www.douban.com/subject/1482240/ 这本书其实并不会告诉你MFC怎么用,而让你了解到一个 C++ GUI framework 应该具备哪些最基本的元素。如:消息传递、RTTI等等。 《MFC Windows程序设计》 http://www.douban.com/subject/1128016/ MFC 每个控件的详细介绍,不过不熟悉 MFC 的同学可以不用学了。 wxWidgets http://www.wxwidgets.org/ Qt http://www.qtsoftware.com/ GTK+ http://www.gtk.org/ 三者是跨平台的UI库,wx与MFC比较像。学一即可满足日常需求,实际工作中,我们用 wx 比较多。 ========================================================= ====== L5 - Layer 5 (Network/DB) ====== ========================================================= Network,如果只从 socket api 来说,只属于“系统API”,但网络游戏中,服务端程序还是非常重要的,所以我把其 单独分为一个 Layer,且同时涵盖了网络、数据存储两者。 《TCP/IP 详解》 Vol 1/2/3 http://www.douban.com/subject/1099252/ http://www.douban.com/subject/1231729/ http://www.douban.com/subject/1095214/ IPv4 原理的权威书籍 《UNIX Network Programming》 Vol 1/2 http://www.douban.com/subject/1174626/ http://www.douban.com/subject/1231788/ UNIX 网络编程的权威著作 libevent http://www.monkey.org/~provos/libevent/ RakNet http://www.jenkinssoftware.com/ ACE http://www.cse.wustl.edu/~schmidt/ACE.html Ice http://www.zeroc.com/ 四个跨平台的网络封装库,其中 libevent 是最轻量级的,而 RakNet 是专为游戏设计。 ACE/Ice 都是比较重量级的,可以阅读其代码,学习一些网络框架的设计思想。 MaNGOS http://getmangos.com/ WOW 的模拟服务端,C++ 代码还是很清晰的。 Mud OS http://www.mudos.org/ LDMud http://www.bearnip.com/lars/proj/ldmud.html 古老的 mud 游戏的服务端,虽然代码老了点,结构乱了点,但也是很多网络游戏的服务端雏形。 《深入浅出MySQL》 http://www.douban.com/subject/3012338/ 公司同事的作品,MySQL非常好的入门书籍。:-) 《High Performance MySQL》 http://www.douban.com/subject/3101726/ SQLite http://www.sqlite.org/ MySQL http://www.mysql.com/ SQLite 是基于文件的DB,配合 GUI 程序用来做存储,还是很不错的。 ========================================================= ====== L6 - Layer 6 (2D/3D) ====== ========================================================= 《游戏编程大师技巧》 Vol 1/2 http://www.douban.com/subject/1230286/ http://www.douban.com/subject/1321769/ 两本书本别介绍了 2D/3D 的基础。非常非常好的入门资料,特别是 3D 那本,介绍了写3D程序所需要的数学/3D知识。 《3D Engine Design》 http://www.china-pub.com/192098&ref=ps 介绍了主流的3D游戏引擎应如何设计。作者同时实现了 WildMagic,一款开源的3D引擎。 WindSoul http://blog.codingnow.com http://www.codingnow.com/2000/index.html 云风GG的力作,2D游戏引擎。 HGE http://hge.relishgames.com/ 2D 引擎的另一个发展方向,用 3D 渲染 2D。(利用硬件加速) Box2D http://www.box2d.org/ 2D 物理引擎 IrrLicht http://irrlicht.sourceforge.net/ 代码清晰,结构简单,适合入门阅读。 ogre http://www.ogre3d.org/ 结构清晰,但重量级的开源3D引擎 Bullet http://www.bulletphysics.com/wordpress/ ODE http://www.ode.org/ 两款开源的3D物理引擎 ************************************************************************** * 语言篇 ************************ 语言是工具,语言没有好坏,只有是否适用,以及你对其有多少的熟练度。 越熟悉,才能写出结构更好、效率更高的代码。 我只列出游戏部常用的开发语言,C#/Java/Lisp 不在此列。:-) ========================================================= ====== C/C++ ====== ========================================================= C++ 是门不算古老但足够复杂的语言。实践中,高级的 template 特性的滥用,回导致代码不好维护。 所以在考虑深入 C++ 的高级特性前,可以先读读此 blog。Just thinking, 项目中需要这么多高级特性么? http://blog.csdn.net/pongba/archive/2007/05/16/1611593.aspx 下面我就不列出我认为有点“偏”的 C++ 图书了。虽然只想列几本重点的,也发现列了不少。- -# 《The C Programming Language》《C++ Primer》《The C++ Programming Language》 http://www.douban.com/subject/1236999/ http://www.douban.com/subject/2696025/ http://www.douban.com/subject/1767741/ 三本基础书,C++ 的读其中一本即可。 《C陷阱与缺陷》 http://www.douban.com/subject/1102097/ 《C专家编程》 http://www.douban.com/subject/2377310/ 《C/C++ 深层探索》 http://www.douban.com/subject/1232030/ C/C++ 的提高篇 《Effective C++》《More Effective C++》《Effective STL》 http://www.douban.com/subject/1453373/ http://www.douban.com/subject/1457891/ http://www.douban.com/subject/1792179/ Effective 三套件 《C++ 编程规范》 http://www.douban.com/subject/1480481/ 编码规范的书很多,看一本就好,其他的东西,实践中慢慢体会。 《C++标准程序库自修教程与参考手册》 http://www.douban.com/subject/1110941/ 《STL 源码剖析》 http://www.douban.com/subject/1110934/ STL 最好的两本参考手册。 《Imperfect C++》 http://www.douban.com/subject/1470838/ 《深度探索C++对象模型》 http://www.douban.com/subject/1091086/ 提升 C++ 内力的两本书。 《道法自然:面向对象实践指南》 http://www.douban.com/subject/1231194/ 《C++实践之路》 http://www.douban.com/subject/1102104/ 上面的书,如果都还偏理论的话,这两本书就是用实践说话了。 ========================================================= ====== Lua ====== ========================================================= 《Programming Lua, 2nd》 http://www.douban.com/subject/3076942/ 《Lua Reference》 http://www.lua.org/manual/5.1/ 我最喜欢这种简单的语言 :-) 书籍少,好学,但又很实用。 ========================================================= ====== Python ====== ========================================================= Python 的书也很多,看完下面两本,剩下的再参考官方 manual 也就差不多了。 《Learning Python》 http://www.douban.com/subject/3243372/ 基础篇 《Python Cookbook》 http://www.douban.com/subject/1418172/ 提高篇 ************************************************************************** * 算法/数据结构篇 ************************ 算法涉及的范畴也很广泛,这里偏重介绍数据结构的基础书籍。 《算法导论》 http://www.douban.com/subject/1152912/ 理论基础篇 《Art of Computer Programming》 http://www.douban.com/subject/1418402/ 没啥可介绍的,算法著作中的《葵花宝典》。 ************************************************************************** * 软件设计篇 ************************ 设计模式就是些名词,方便大家交流时,更准确地了解对方用了怎样的程序结构。 《设计模式》 http://www.douban.com/subject/1099305/ 《Head First Design Pattern》 http://www.douban.com/subject/1400656/ 《大话设计模式》 http://www.douban.com/subject/2334288/ 第一本是经典著作,但有点理论化,稍显晦涩。后两本则是通俗易懂型的,老外的例子和我们生活上有点差异, 好像第三本更适合我们,呵呵。 《重构》 http://www.douban.com/subject/1229923/ 《UNIX编程艺术》 http://www.douban.com/subject/1467587/ 软件设计的 KISS 原则 (Keep It Simple, Stupid) 《Pattern-Oriented Software Architecture》 Vol 1/2/3/4/5 http://www.douban.com/subject/1232017/ http://www.douban.com/subject/1137259/ http://www.douban.com/subject/1444890/ 一共五卷,不过中文版似乎还只有三卷。其中卷二对网络框架的设计有比较大的参考意义。 ************************************************************************** * 开发方法篇 ************************ 不同的开发方法论,适用于不同规模的开发团队。传统的软件工程,比较适合需求固定的庞大的系统。而游戏 开发与之相反,团队规模小而需求变化快,所以 Agile Development (敏捷方法) 比较适合我们。 各种敏捷方法中,我个人比较喜欢 scrum,公司好几个工作室也在实施。下面是个人的一点总结,仅供参考: http://kasicass.blog.163.com/blog/static/39561920081289380384/ 最后一句话:方法是死的,灵活运用,找到属于自己团队最佳的实践。 《代码大全》 http://www.douban.com/subject/1477390/ http://blog.codingnow.com/cloud/CodeComplete 《人月神话》 http://www.douban.com/subject/2230248/ 说起项目管理,这本书总还是要去读读的。 《I. M. Wright's Hard Code》 http://www.douban.com/subject/3259433/ 来自 M$ 的项目管理经验书 《敏捷迭代开发管理者指南》 http://www.douban.com/subject/1801394/ 《Agile Software Development with Scrum》 http://www.douban.com/subject/1153186/ Scrum 发起者的著作,用于理解 scrum 的各种概念 《超越传统的软件开发》 http://www.douban.com/subject/1220623/ 上面的都是国外和尚念的经,这里强烈推荐一本国人的作品,写得很实在。可惜网上已经买不到了,公司图书馆里还有得借。 |
- 上一篇:反面模式(Anti-pattern)
- 下一篇:21世纪最需要的7种人才