给学习计算机的同僚们(初学者,进阶者,包括Linux爱好者)的学习建议
为什么我们要学习计算机,为什么我们要学习编程,有很多很多的原因,但当我们踏进计算机的世界里的时候
,我们找到了可以任由我们发挥,任由我们施展拳脚的天地,我们有了一种对学习计算机,甚至是学好计算机的渴望,
但是任何一门学科都不是那么容易学的好的,计算机更是如此,我想我们大多数人都是从编程开始学习的,逐渐形成了
对学习编程的兴趣,但是如果想真正的学好计算机,单单学习高级语言是不能达到效果的,就算你说我只想学好一门高
级语言,把它学的精通就可以了,但问题就是那么的简单么,我想不是吧。
计算机是一个整体,学习任何一门计算机课都是和其他课程联系在一起的,要学习就要有足够的深度和广度,不然不可能有深入的了解就像学习c语言一样,如果你想知道他是怎样在计算机的内存中分布的,具体是怎么运行的,就要学习汇编语言,当然计算机体系结构,计算机组成原理,是你理解计算机的基础,计算机大师knuth都非常重视汇编语言(汇编语言和机器语言是一一对应的)
,要想学好软件,脱离硬件是不可能,因为软件最终要靠硬件来运转的。当然了如果是初学者还是要一步步学的,如果你
想知道c语言是怎么运行的,想了解指针和数组的真正区别,那多学一门语言汇编语言吧,人们都说汇编语言是与机器相关的,不能移植的,但想在的pc机上用的几乎都是AMD,和intel的处理器,他们有都是互相兼容的,所以指令集的体系结构都是IA-32当然了现在都有64位的处理器了,但是这并没有什么很大的区别,仅仅是位数变多了,所能表达的数字变
大了,精度也变的更长了等等。就像学习高级语言一样学习汇编语言也是相通的,因为他们的功能都差不多,而且更加
简单,你会发现在高级语言中的语法会在汇编语言中消失,仅存的就只是指令的书写格式(相当如词法吧,当然了我可能也说的不太对,因为对汇编语言学的不是很深入,所以现在也正在有计划的去学习)。如果你学习的java,vb,c#等等那
么就请您多多看看c和c++吧,我们常常听说某种语言实现了垃圾回收机制,用某种算法不定期的把你程序中不再使用的内存回收掉,最好的例子就是JAVA
了(关于它的一句话说的挺好,一次编译到处运行,非常适用于嵌入式计算机程序的编写),不过你能用JAVA语言写出
内存回收的程序么
我想应该是不可能,JAVA对于这方面做了太多的限制,但在c/c++中却没有,你可以用库函数malloc等等去分配内存,
free去释放内存,
c++中对应的是(new,delete)实现的跟方便些,你也可以用系统调用brk(其实库函数也是调用了他,只不过做了一些
更加完善的工作而已)去分配,而且他可以直接去操作数据到位(&,|,~),如果说
高级语言是汇编语言的一个子集的话,那么JAVA在这方面就是C/C++的一个子集,我并没有说java不用学,不好,而
是在学习他之前
应该多去学学C/C++,(注意语法不是特别的重要,重要的是你怎么能在学完语言以后去灵活的运用他),计算机体系
结构对于你理解
软硬件非常的重要给大家推荐一本书,书名 :计算机组成与设计——硬件/软件接口 作者:David A.Patterson
John L. hennessy
出版社:机械工业出版社 ,这本书很不错,能够很好的把软硬件的关系数清楚,而且不像一些国内的体系结构教材,
看的非常的费劲
谁然讲的都是很清楚,但不能从读者的角度去考虑问题,这本书会让你看的爱不释手的,恩,对于我来说却是如此,不
适合初学c语言的
,要有一定的c语言基础。我想还有一点要和大家分享一下,就是学习计算机切忌浮躁,不要像追星族一样,看到一项
新出的技术就去
学习,新技术会不断的变的,而且很容易让你迷失方向,一定要打好基础,关于计算机基础的书一定要多看,不要死记
硬背,但你发现
你需要死记硬背去记住书中的知识的时候,那么我可以给你个建议把此书放在书架里,去看一些能够引导你一步步的从
本质上理解知识
的书,首选一些计算机科学丛书,图灵丛书(机械工业出版社,人民邮电出版社,电子工业出版社),我们学校用的是
清华大学自己出版
的计算机书籍,虽说清华大学在工科方面很不错,但是出版的计算机书籍就我个人来说真的不怎么好,相对于国外的计算机书籍来说
差的真是太远了,我很不明白为什么要用清华出的,有一本关于Linux/unix内核的书我觉得挺好的,书名是 Linux内核源代码情景分析
浙江大学出版的,我目前正在潜心学习这本书,虽然很难,但真的不错,很少有由我们自己写的关于Linux内核这方面
的好书,这本就是
不可多得的好书。说了太多关于计算机书籍的话题了,但我认为一本好的书籍真的能给我们很大的帮助
还能从中得到快乐。
如果你只想学习计算机去赚钱的话,那么你大可以不必去学习很多东西,对于你也没有用处,如果你是对计算机有着非常浓厚的
兴趣的话,那么就塌下心来,一步一步去在计算机的海洋里傲游吧,真是一件美妙的事情。
现在我告诉大家自己认为的关于学习计算机的路程
(1) c语言(可以去学谭浩强写的c语言的书,如果能找到K&R C 那就更好,自己是没有找到,要想进一步去学习的话
去看 c缺陷与陷阱,c专家编程
,这两本书很经典的)
(2)c++语言(c和c++其实并不一样,可以说c++是继承了c,增加了面向对象的思想,如果能找到c++program language
c++之父写的就很好,不过自己没有找到,要想进一步去学习的话去看 effective c++
more effective c++,挺不容易懂的,因为自己要看Linux内核所以没有多少时间去看,c++沉思录(c缺陷与陷阱 的作者
与他的妻子)也非常的不错,还是没有时间去看,只看了200多页,讲的太好了,有时间自己一定会去看完的,这本书
讲的主要是教你怎么运用C++语言去写出好的文章)
算法和数据之间的结构的理解也很重要,我想如果你有了c++的学习经验学习数据结构应该不太
困难,一直以来我都不是很明白抽象的数据结构(abstract data type ADT)的抽象是怎么回事是什么意思,之后看
了c++沉思录才恍然大悟,抽象就是把想关注事务的部分拿出来,不关心的不去考虑,就像我们人类,人有很多属性,
姓名,年龄,体重等等,当我们研究具体问题是
也许只关心人的属性的某些方面,例如姓名,年龄,那么就把它拿出来也就是术语抽象,在c/c++语言
就用用户自定义的数据类型来去定义人:
struct people{
char name[10];
int age;
};
struct 是structure(结构)的缩写,这样理解就非常简单了么,所以c++沉思录非常的好。
(3)算法与数据结构(有很多好的书籍,大家可以去找找,反正清华出的不敢恭维)
(4)汇编语言,计算机组成原理,计算机体系结构 微机原理(我认为刚才我说 计算机组成与设计——硬件/软件接口
就很好的包含了这些内容挺不错的,当然了学习是无止境的。
)
之后才能开始os的学习,我认为OS是让你在学习计算机上有一个质的飞跃,因为现代的程序设计一般都是基于OS的,如
果不了解OS,那么就不可能学好程序设计,就像建造房子一样,房子要建在地上,如果你不了解当地的环境,地质,这
么怎么能建造好的房子呢(5)操作系统原理的学习,数据库原理的学习(有一本挺好的书,自己是看完了一遍,电子
工业出版社
的操作系统设计与精髓 作者 stalling 忘了具体怎么拼了,理论性很强,不过是一本好书,要理解性的看)
至于网络原理,软件工程,通