如果要问:“如何做研究?”,那么这个问题实在是太大了,很难回答。不同的人站在不同的角度针对不同的专业和层次,会有各种各样的意见。如果换成英语,问题一下子就变得简单了:research=re-search。研究就好像在完拼图,要不断的找,才能把漏掉的补全。所以,研究就是“再找找”。在别人找过的地方继续找,发现一块拼图,摆上去正好合适,就算有研究成果了。玩拼图需要总结,假设你在玩一块儿巨大无比的拼图,那么你必须告诉下一个接替你继续玩的人所有你已经找好的部分。总结对于“研究”就更重要了,只有快速学习前人总结好的知识才能尽快地开始研究。
下面我来总结一下我关注了近3年的计算机编程学习的书籍。可以算是总结之“总结”吧(书是知识的总结,我来总结书)。
计算机编程语言多如牛毛,而且不断更新,从零开始应该怎么学呢?我上高中的时候,计算机是一门会考项目,编程语言是BASIC,所以对于我和很多像我一样的人接触的第一个编程语言是BASIC。我很难把高中这么一门根本不高考的科目算做真正的学习。如果不算BASIC,很多人的入门编程语言应该是C。这得得益于在全国大学理工科普遍开设的“C语言及其程序设计”的课。拜这门课所赐,一本写得并不怎么样的《C语言及其程序设计》(谭浩强主编,清华大学出版社出版)竟然创造了世界技术书销售史上的奇迹。我的大学同学曾经写过一篇《PASCAL语言比C语言更适合程序学习》的文章曾得到校领导的“高度”重视。可惜,出来中学生信息学竞赛的辅导材料和网站,现在很少见到有人再讨论PASCAL了。事实上,根据一份
美国的调查显示,现在PASCAL程序员的工资在所调查的程序员中排第三,高出C程序员很多。那么到底什么样的编程语言最适合初学者呢?这种语言应该简洁、规范、使学习者更容易将精力集中在程序、数据结构、算法方面,而且应该能培养编程者良好的编程习惯和格式。MIT曾经将
SCHEME做为推荐的编程入门语言,
现在改成了Python。我不想过多讨论,但这是一个值得注意的参考。
C语言虽然不适合初学,却是一种应用非常广泛的语言,尤其是在编写高效的程序的时候。绝大多数操作系统都是用C写的。而且开源社区对C也偏爱有加,C语言的开源项目也非常的多。关于编程语言的流行程度可以参考
这里。我没真正看过Python的书,所以关于书的讨论从C开始。
除了C,C++的书我也看过一点儿,也推荐一下吧。如果是初学者,可以考虑从
You Can Do It读起。当然,如果对于有一点编程基础的人来说,可以考虑
Ivor Horton's Beginning C++,不敢说多好,但至少我从头到尾都读了,比国内各种版本C++的书要好。提起C++就不能不提他的设计者
Bjarne Stroustrup,和他的那本
The C++ Programming Language。但这本书绝对不是一本入门的好书,适合在入门以后重新研读,重新审视C++的时候读,因为作者站在一个非常高的角度来阐述C++语言,有些玄妙之处非一般入门者能体会的。
编程语言入门的书读太多了没意义,数据结构和算法才是编程最核心和根本的东西。在这类书中国内编写的种种教材又输给了国外作者。数据结构经常是和算法放在一起讲,其中的原因恐怕不仅仅是因为数据结构和算法密不可分,还因为数据结构本身讲一个学期太长了。我暂时还没发现单讲数据结构的经典书籍,但数据结构和算法放在一起,
Data structures and algorithm analysis in C这本书可以考虑读一读。主要关注算法的书有MIT Open Course里用的著名的
Introduction to Algorithms。我觉得,
Chalmers的算法课程用的
Algorithm Design也值得推荐。提起算法就不能不提一个超级牛人
Donald E. Knuth,在他眼里计算机编程不是技术而是艺术。他的
The Art of Computer Programming简直就是编程界的圣经,可是书出的有点慢,不过已经出版的四卷足够研究个两三年了。
数据结构和算法搞定之后我觉得有必要研究一下软件工程中一些基本的要素,使自己编的程序不那么“难看”。关于编程风格没有统一的规定,只有一些原则,而且经常散落在各种书的各个角落。GNU软件的
coding standards我认为是个不错的参考,以C语言为例,有详细的例子而不只是那些指导原则。这方面的书籍我推荐
Code Complete。
到此为止,我觉得编程学习就因人而异了,关注的方向不同所需要的资料肯定也就不同。例子永远是学习最好的帮手,所以剩下的就是在
开放源代码的软件仓库中寻找自己需要的例子吧。