关于CS学习的东东不想浪费了,贴出来算了

来源:互联网 发布:js动态添加节点 编辑:程序博客网 时间:2024/04/29 18:28

这是我本科期间下铺同学所作。其人为大牛,全系排名第一,现已远赴大洋彼岸的princeton留学。在这里,把他关于计算机学习的文章共享出来,大家共勉。原文发表自未名BBS(http://bbs.pku.edu.cn)的CS版(http://cs.bdwm.net),不过在那里原文已湮没不可闻,这是我当时保存下来的。

嗯,本来是针对iolia写的,后来越想越觉得对他不会有什么用,但是又不想浪费了
就顺便贴出来.我想对大一大二的ddmm应该会有些帮助.我想本科前两年要是能
完成这些事情的话以后的日子就比较好过了.我自己基本上就是靠这些东东混过来的.

虽然说计算机科学并不仅仅是编程,但是我觉得从编程入手学习计算机科学却是一条捷径.
嗯,学过c语言是一个很大的优势,但是相信你应该还没有达到炉火纯青应用自如的程度.
所以,第一个忠告是学语言不要贪多务得.c语言一门足矣.可以稍微浏览一下c++的教材,
初步体会一下面向的思想(主要是封装).但是c++这门语言很复杂,所以先不要试图花时间
去掌握它的语法.等内功练好了以后一个小时学一门语言肯定没问题.
为了确保对计算机的基本结构有所了解,可以随便找一本微机原理的书翻一下(不应该超过1个下午,包括看书类了顺便灌灌水的时间),知道cpu,内存都是干什么的就行.注意一下其中关于寻址模式的讲解.这个步骤可以跳过.

嗯,然后第一本需要精读的书我认为是* <win32程序设计指南>作者是Jeffrey Richter.
不知道现在有没有过时.这本书很朴素,示例全都是c语言程序.看完这本书后你应该对
win32的API有很好的了解了, 同时对操作系统的核心内容,像进程,线程,同步,虚拟内存
等等有了很好的了解.里面有些内容可能和图形界面有关,可以忽略.注意图形界面并不是
操作系统的功能.在阅读的过程中需要不断的编程序演练你学到的API,并且不断查阅
win32 programmer reference或者MSDN(其实前者就够了).最后你会对win32 API
的命名规则有比较好的感觉.就象刚才有人问怎样改文件时间,你的反应就是改文件时间的API的名字中应该有Set, File和Time三部分,并能立刻在帮助中找到.
学习win32 API的另一个好处就是它完全使用面向对象的方法设计的.
所以你以后编程序的时候也会自然的模仿它的方式.
同时,你还会学到不少你以前不知道的c语言的特性.
这时候如果你再去读操作系统教材的话相信基本上就没什么难度了.

同时,找一本讲解Linux基础知识的书,并找一个系统装在自己的机器上.推荐Magic Linux
(因为这个系统至少不会让初学者觉得很frastrate).然后演练各种你在书上学到的命令.
学习vim编辑器,用它编辑程序能节约你大量的时间.嗯.下一本推荐的书是
*<Linux程序设计> Neil Matthew和Richard Stones 这本书的特点是内容非常丰富.当然
,你在阅读的时候可以略过关于term,图形界面编程和若干种语言,比如perl,tcl/tk的内容,而只专注与里面用c语言表述的那部分.这时候你会发现大量你直到的Win32换了个马甲又出现了,同时你也会发现
,虽然都是c语言,但是两者的风格有很大的不同.注意,这时候你学到的c语言才是真正的c语言.你很快就会
喜欢上它, 因为它很简洁优美. 举个例子,win32 API种创建进程用CreateProcess或者CreateProcessXXX
什么的,它们需要传递一大把参数,但是在Linux下的fork()一个参数都没有.
这时注意学习调试器gdb的学习,当熟练以后你会发现VC的调试器和它想必根本就不值一提

.
然后在找任何一本讲述unix/linux下socket编程的书,开始写你的第一个网络程序,一般来说它都会是一个聊天室.然后找一些RFC协议来读,看看ftp和http协议到底是怎么回事.试着编程从一个ftp站点下载一个文件.

接下来你可能需要读一下计算机系体系教材*omputer Organization & Design Hardware/Software interface
前面几章,到讲完指令系统那部分即可.

当然,理论方面数据结构肯定是不能不学的.许卓群唐世渭张乃孝在80年代初出的那本教材很不错.
可以边复习边做acm.pku.edu.cn上面的题,如果能做完50个的话数据结构就没有问题了.

然后是编译.嗯,形式语言和自动机那部分可以先粗粗略过.重要的是熟练掌握征则表达式和BNF范式的用法.
然后就是学lex和yacc.不要去图书馆找书,直接用google搜相关的网页学习即可.然后自己编一些小程序.
当然,你可以花时间设计一个简单的语言并实现它的编译器.学编译的一个好处就是这能让你在很短的时间内学会一门新的语言.

嗯,再写下去东西就多了,不写了. 对于大一大二的ddmm来说,一个经验是不要等到上某门课了才开始去学它的内容.

自己的一点看法, 板砖的拍过来吧.

原创粉丝点击