程序员书籍推荐

时间:2021-04-30 04:05:05
 -- 学习资料/推荐书目
--
-- 一个人不可能把所有知识都掌握无余,本文只希望达到“在学习某一领域软件知识时,可很快
-- 找到一些比较不错的参考书籍”的目的,就好。开卷有益 :-)
--
-- 对于程序员来说,多读、多写代码可以收获很多。现在有很多优秀的开源项目,可以选取与工
-- 作相关的一两个项目,认真研读其代码。有时比读书,更能带来更快的提高。
-- 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/
上面的都是国外和尚念的经,这里强烈推荐一本国人的作品,写得很实在。可惜网上已经买不到了,公司图书馆里还有得借。