本文地址:http://cdai.sinaapp.com/archives/49,欢迎访问~
1. 并发编程
随着单机上CPU核数的不断增多,以及互联网中大型网站每天产生的海量数据,并发编程将会成为程序员必不可少的技能。
学习《Erlang程序设计》和Scala,理解函数式编程,搞清Actor模式以及并发编程的消息传递方式。
2. 汇编语言
懂一些计算机底层的知识才会明白咱们每天使用的计算机硬件是怎样运行的,操作系统是怎样启动的,写好的源代码是怎样编译成机器码被操作系统加载的。
学习《汇编语言》(第二版)、《80x86汇编语言程序设计教程》,了解计算机的构造CPU、内存、硬盘等,搞明白CPU是怎样寻址,什么是保护模式,保护模式和实模式有什么不同。
另外推荐《程序员的自我修养》、《天书夜读-从汇编语言到Windows内核编程》、《琢石成器:Windows32位汇编语言程序设计》。
3. 操作系统内核
Linux内核源码很多,里面包含很多算法和设计,学习起来真的很难。但挑重点的学习了解一下,对提高编程水平还是有很大帮助的。比如操作系统怎样通过Loader加载,进程的切换和调度等。
学习Linux四库全书:《Linux内核设计与分析》、《深入理解Linux内核》、《Linux内核源代码情景分析》、《Linux设备驱动开发》。再推荐一本《Orange's 一个操作系统的实现》。
最重要的一点:read the fucking source code!
4. 游戏开发
游戏尤其是3D游戏开发是学习数学和算法的一个好途径,由于3D游戏通常很耗费资源,因此也是学习代码优化的好方法。
比如怎样渲染图形的表面,怎样把空间坐标上的3D图形是怎样通过矩阵运算投射到摄影机屏幕上的,比如学习分析计算关键代码段的大O值并试着优化。
推荐《3D数学基础:图形与游戏开发》,以及DirectX的学习。
5. 数学和算法
这是编程的基础,编程一路学到底层东西时,自然而然就想补一补自己的数学和算法知识。
数学:《什么是数学》、《具体数学》。
算法:《计算机程序设计艺术》、《算法导论》。
通过做题检验自己,书后习题以及各大公司的笔试题。带着问题去看这些书,也许会增加一些动力。
6. 散文杂文
学累了,该放松一下了。
《代码之美》、《Java夜未眠》、《Unix编程艺术》、《疯狂的程序员》
看着看着就睡着了,梦到有一天自己成为武林中的编程高手。。。