胡侃学习(理论)计算机.doc

上传人:wux****ua 文档编号:7934225 上传时间:2020-03-25 格式:DOC 页数:7 大小:29KB
返回 下载 相关 举报
胡侃学习(理论)计算机.doc_第1页
第1页 / 共7页
胡侃学习(理论)计算机.doc_第2页
第2页 / 共7页
胡侃学习(理论)计算机.doc_第3页
第3页 / 共7页
点击查看更多>>
资源描述
胡侃学习(理论)计算机我也来冒充一回高手,谈谈学习计算机的一点个人体会。由于我是做理论的,所以先着重谈谈理论。记得当年大一,刚上本科的时候,每周六课时数学分析,六课时高等代数,天天作业不断(那时是六日工作制)。颇有些同学惊呼走错了门: 咱们这到底念的是什么系?不错,你没走错门,这就是(当时的)南大计算机系。系里的传统是培养做学术研究,尤其是理论研究的人。而计算机的理论研究,说到底了就是数学,虽然也许是正统数学家眼里非主流的数学。数学分析这个东东,咱们学计算机的人对它有很复杂的感情。爱它在于它是第一门,也是学分最多的一门数学课,又长期为考研课程94以前可以选考数学分析与高等代数,以后则并轨到著名的所谓“工科数学一”。其重要性可见一斑。恨它则在于它好象难得有用到的机会,而且思维跟咱们平常做的这些离散/有限的工作截然不同。当年出现的怪现象是:计算机系学生的高中数学基础在全校数一数二(希望没有冒犯其它系的同学),教学课时数也仅次于数学系,但学完之后的效果却几乎是倒数第一。其中原因何在,发人深思。我个人的浅见是:计算机类的学生,对数学的要求固然跟数学系不同,跟物理类差别则更大。通常非数学专业的所谓“高等数学”,无非是把数学分析中较困难的理论部分删去,强调套用公式计算而已。而对计算机系来说,数学分析里用处最大的恰恰是被删去的理论部分。说得难听一点,对计算机系学生而言,追求算来算去的所谓“工科数学一”已经彻底地走进了魔道。记上一堆曲面积分的公式,难道就能算懂了数学分析?中文的数学分析书,一般都认为以北大张筑生老师的“数学分析新讲”为最好。我个人认为南大数学系的“数学分析教程”也还不错,至少属于典型的南大风格,咱们看着亲切。随便学通哪一本都行。万一你的数学实在太好,这两本书都吃不饱,那就去看菲赫金哥尔茨的“微积分学教程”好了-但我认为没什么必要,毕竟你不想转到数学系去。吉米多维奇的“数学分析习题集”也基本上是计算型的东东。如果你打算去考那个什么“工科数学一”,可以做一做。否则,不做也罢。中国的所谓高等代数,就等于线性代数加上一点多项式理论。我以为这有好的一面,因为可以让学生较早感觉到代数是一种结构,而非一堆矩阵翻来覆去。当年我们用林成森,盛松柏两位老师编的“高等代数”,感觉相当舒服,我直到现在还保留着教材。此书相当全面地包含了关于多项式和线性代数的基本初等结果,同时还提供了一些有用的比较深的内容,如Sturm序列,Shermon-Morrison公式,广义逆矩阵等等。可以说,作为本科生如能吃透此书,就可以算高手。后来它得以在南大出版社出版,可惜好象并轨以后就没有再用了。国内较好的高等代数教材还有清华计算机系用的那本,清华出版社出版,书店里多多,一看就知道。特点嘛,跟南大那本差不太多。但以上两本书也不能说完美无缺。从抽象代数的观点来看,高等代数里的结果不过是代数系统性质的一些例子而已。莫宗坚先生的“代数学”里,对此进行了深刻的讨论。然而莫先生的书实在深得很,作为本科生恐怕难以接受,不妨等到自己以后成熟了一些再读。概率论与数理统计这门课很重要,可惜少了些东西。少了的东西是随机过程。到毕业还没有听说过Markov过程,此乃计算机系学生的耻辱。没有随机过程,你怎么分析网络和分布式系统?怎么设计随机化算法和协议?据说清华计算机系开有“随机数学”,早就是必修课。人家可是工科学校,作为自以为“理科计算机系”出身的人,我感到惭愧。另外,离散概率对计算机系学生来说有特殊的重要性。现在,美国已经有些学校开设了单纯的“离散概率论”课程,干脆把连续概率删去,把离散概率讲深些。我们不一定要这么做,但应该更加强调离散概率是没有疑问的。计算方法是最后一门由数学系给我们开的课。一般学生对这门课的重视程度有限,以为没什么用。其实,做图形图像可离不开它。而且,在很多科学工程中的应用计算,都以数值的为主。这门课有两个极端的讲法:一个是古典的“数值分析”,完全讲数学原理和算法;另一个是现在日趋流行的“科学与工程计算”,干脆教学生用软件包编程。南大数学系的几位老师做了件大好事,把前者的一本极为经典的教材翻译出版了:德国Stoer的“数值分析引论”。如果你能学会此书中最浅显的三分之一,就算没有白上过计算方法这门课!而后一种讲法似乎国内还没有跟上潮流?不过,只要你有机会在自己的电脑上装个matlab之类,完全可以无师自通。本系里,通常开一门离散数学,包括集合论,图论,和抽象代数,另外再单开一门数理逻辑。这样安排,主要由于南大的逻辑传统:系里很多老师都算莫先生的门人,就连孙先生都是逻辑专业出身(见孙先生自述)。不过,这么多内容挤在离散数学一门课里,是否时间太紧了点?另外,计算机系学生不懂组合和数论,也是巨大的缺陷。要做理论,不懂组合或者数论吃亏可就太大了。从理想的状态来看,最好分开六门课:集合,逻辑,图论,组合,代数,数论。这个当然不现实,因为没那么多课时。也许将来可以开三门课:集合与逻辑,图论与组合,代数与数论。不管课怎么开,学生总一样要学。下面分别谈谈上面的三组内容。古典集合论,北师大出过一本“基础集合论”不错。南大出版朱梧(木贾)老师的“集合论导引”也许观点更高些,但他的书形式化得太厉害,念起来吃力。数理逻辑,莫先生的书自然是经典。然而我们也不得不承认,此书年代久远,光读它恐怕不够。尤其是命题/谓词演算本身有好多种不同的讲法,多看几家能大大开阔自己的视野。例如陆钟万老师的“面向计算机科学的数理逻辑”就不错。朱老师也著有“数理逻辑教程”一书,但也同样读起来费力些。总的来说,学集合/逻辑起手不难,但越往后越感觉深不可测。建议有兴趣的同学读读朱老师的“数学基础引论”-此书有点时间简史的风格,讲到精彩处,所谓“天花乱坠,妙雨缤纷”,令人目不暇接。读完以后,你对这些数学/哲学中最根本的问题有了个大概了解,也知道了山有多高,海有多深。学完以上各书之后,如果你还有精力兴趣进一步深究,那么可以试一下GTM系列中的Introduction to Axiomatic Set Theory和A Course of Mathematical Logic。这两本都有世界图书的引进版。你如果能搞定这两本,可以说在逻辑方面真正入了门,也就不用再浪费时间听我瞎侃了。:)据说全中国最多只有三十个人懂图论(当年上课时陈道蓄老师转引张克民老师的话)。此言不虚。图论这东东,技巧性太强,几乎每题都有一个独特的方法,让人头痛。不过这也正是它魅力所在:只要你有创造性,它就能给你成就感。所以学图论没什么好说的,做题吧。国内的图论书中,王树禾老师的“图论及其算法”非常成功。一方面,其内容在国内教材里算非常全面的。另一方面,其对算法的强调非常适合计算机系(本来就是科大计算机系教材)。有了这本书为主,再参考几本翻译的,如Bondy & Murty的“图论及其应用”,邮电出版社翻译的“图论和电路网络”等等,就马马虎虎,对本科生足够了。再进一步,世界图书引进有GTM系列的Modern Graph Theory。此书确实经典!国内好象还有一家出版了个翻译版。不过,学到这个层次,还是读原版好。搞定这本书,也标志着图论入了门,呵呵。组合感觉没有太适合的国产书。还是读Graham和Knuth等人合著的经典“具体数学”吧,有翻译版,西电出的。抽象代数,国内经典为莫宗坚先生的“代数学”。此书是北大数学系教材,深得好评。然而对本科生来说,此书未免太深。可以先学习一些其它的教材,然后再回头来看“代数学”。国际上的经典可就多了,GTM系列里就有一大堆。推荐一本谈不上经典,但却最简单的,最容易学的:http:/www.math.miami.edu/ec/book/这本“Introduction to Linear and Abstract Algebra非常通俗易懂,而且把抽象代数和线性代数结合起来,对初学者来说非常理想。不过请注意版权问题,不要违反法律噢。数论方面,国内有经典而且以困难著称的”初等数论“(潘氏兄弟著,北大版)。再追溯一点,还有更加经典(可以算世界级)并且更加困难的”数论导引“(华罗庚先生的名著,科学版,九章书店重印)。把基础的几章搞定一个大概,对本科生来讲足够了。但这只是初等数论。本科毕业后要学计算数论,你必须看英文的书,如Bach的Introduction to Algorithmic Number Theory。理论计算机的根本,在于算法。现在系里给本科生开设算法设计与分析,确实非常正确。环顾西方世界,大约没有一个三流以上计算机系不把算法作为必修的。算法教材目前公认以Corman等著的Introduction to Algorithms为最优。对入门而言,这一本已经足够,不需要再参考其它书。南大曾翻译出版此书,中文名为”现代计算机常用数据结构与算法“。pie好象提供了网上课程的link,我也就不用废话。最后说说形式语言与自动机。我们用过北邮的教材,应该说写的还清楚。但是,有一点要强调:形式语言和自动机的作用主要在作为计算模型,而不是用来做编译。事实上,编译前端已经是死领域,没有任何open problem。如果为了这个,我们完全没必要去学形式语言用用yacc什么的就完了。北邮的那本,在深度上,在跟可计算性的联系上都有较大的局限,现代感也不足。所以建议有兴趣的同学去读英文书.不过英文书中好的也不多,而且国内似乎没引进这方面的教材。入门以后,把形式语言与自动机中定义的模型,和数理逻辑中用递归函数定义的模型比较一番,可以说非常有趣。现在才知道,什么叫”宫室之美,百官之富“!胡侃学习计算机理论之外如果计算机只有理论,那么它不过是数学的一个分支,而不成为一门独立的科学。事实上,在理论之外,计算机科学还有更广阔的天空。我一直认为,4年根本不够学习计算机的基础知识,因为面太宽了.一个一流计算机系的优秀学生决不该仅仅是一个编程高手,但他一定首先是一个编程高手。我上大学的时候,第一门专业课时程序设计,现在好象改成了计算机科学导论?不管叫什么名字,总之,念计算机的人就是靠程序吃饭。去年在计算机系版有过一场争论,关于第一程序设计语言该用哪一种。我个人认为,用哪种语言属于末节,关键在养成良好的编程习惯。当年老师对我们说,打好基础后学一门新语言只要一个星期。现在我觉得根本不用一个星期-前提是先把基础打好。数据结构有两种不同的上法:一种把它当成降低要求的初级算法课,另一种把它当成高级的程序设计课。现在国内的课程好象介乎两者之间,而稍偏向前者。我个人认为,假如已经另有必修的算法课,恐怕后一个目的更重要些。国内流行的数据结构书也有两种:北大的红皮书(许卓群等著,高教版)和清华的绿皮书(严蔚敏等著,清华版)。两书差距不大。红皮书在理论上稍深一些,当然离严格的算法书还差好远。绿皮书更易接受些,而且配有一本不错的习题集,但我觉得它让学生用伪代码写作业恐怕不见得太好。最好还是把算法都code以后debug一番,才能锻炼编程能力。汇编预言和微机原理是两门特烦人的课。你的数学/理论基础再好,也占不到什么便宜。这两门课之间的次序也好比先有鸡还是先有蛋,无论你先学哪门,都会牵扯另一门课里的东西。所以,只能静下来慢慢琢磨。这就是典型的工程课,不需要太多的聪明和顿悟,却需要水滴石穿的渐悟。有关这两门课的书,电脑书店里不难找到。弄几本最新的,对照着看吧。模拟电路这东东,如今不仅计算机系学生搞不定,电子系学生也多半害怕。如果你真想软硬件通吃,那么建议你先看看邱关源的“电路原理”,也许此后再看模拟电路底气会足些。教材:康华光的“电子技术基础”还是不错的。有兴趣也可以参考童诗白的书。数字电路比模拟电路要好懂得多。阎石的书也算一本好教材,遗憾的一点是集成电路讲少了些。真有兴趣,到东南无线电系去旁听他们的课。计算机系统结构该怎么教,国际上还在争论。国内能找到的较好教材为Stallings的Computer Organization and Architecture: Designing for Performance(清华影印本)。国际上最流行的则是“Computer architecture: a quantitative approach, by Patterson & Hennessy。操作系统可以随便选用Tanenbaum的Operating System Design and Implementation和Modern Operating System两书之一。这两部都可以算经典,唯一缺点就是理论上不够严格。不过这领域属于Hardcore System, 所以在理论上马虎一点也情有可原。如果先把形式语言学好了,则编译原理中的前端我看只要学四个算法:最容易实现的递归下降;最好的自顶向下算法LL(k);最好的自底向上算法LR(k);LR(1)的简化SLR(也许还有另一简化LALR?)。后端完全属于工程性质,自然又是another story。推荐教材:Aho等人的著名的Dragon Book: Compilers: Principles, Techniques and Tools. 或者Appel的Modern Compiler Implementation in C.学数据库的第一意义是告诉你,会用VFP编程不等于懂数据库。(这世界上自以为懂数据库的人太多了!)数据库设计既是科学又是艺术,数据库实现则是典型的工程。所以从某种意义上讲,数据库是最典型的一门计算机课。网络的标准教材还是来自Tanenbaum: Computer Networks(清华影印本)。不过,网络也属于Hardcore System,所以光看书是不够的。建议多读RFC,从IP的读起。等到能掌握10种左右常用协议,就没有几个人敢小看你了。必须结束这篇“胡侃”了,再侃下去非我力所能及。其实计算机还有很多基础课都值得一侃,如程序设计语言原理,图形图像处理,人工智能等等。怎奈我造诣有限,不敢再让内行耻笑。最后声明:前后的两篇“胡侃”只针对本科阶段的学习。即使把这些全弄通了,前面的路还长.关于胡侃学习计算机的一些补充说明大约两年以前,我写了胡侃一文并贴在本版,此后陆续有一些同学来信询问相关的问题。为了完整起见,在此我把一些比较重要的想法补充如下。(1)胡侃一文虽然覆盖面仅限于计算机系的本科课程,但总体要求甚高。在写作此文时,我的想法是更高的目标有利于激励学习的热情。因此,事实上本科生要在四年之内达到文中所说的水平,读完所给的所有的参考书,几乎没有可能。如果你能学到六七成,就可以算非常优秀的学生,不必再拘泥于胡侃一文所指的方向。而如果你在学习时遇到有困难,也完全不必感到灰心丧气。你遇到的困难,99.99%的人也同样会遇到。问题不在于有没有困难,而在于面对困难你能走多远。(2)坦率地说,胡侃一文中含有重大的偏见。因为我本人是从事理论研究的,所以我个人的想法不可避免地抬高了理论而贬低了计算机科学的其它分支。但就实际情况而言,并非所有的学生都会学习理论,甚至绝大部分学生的方向都不是理论。因此,每个人在学习时有必要根据自己的实际来取舍胡侃中提到的内容。据个例子讲,如果你准备做操作系统,那么集合论、数理逻辑对你来说几乎没有用处,完全可以舍弃;组合数学、图论也只要最浅显的一点就可以了;代数也一样.你需要的数学基础可能会包括一点排队论之类的东西。但更重要的,你需要大量的工程实践,需要去研究linux内核,X-Windows.需要去Hack各种常见的系统软件,需要对操作系统的工作有一个global picture。由于这样的工作并非我的长处,请不要期望能从胡侃一文中得到多少帮助。请记住,每个人的目光都有局限,胡侃的作者只不过比你多学了几年,成熟了的你很快会发现他的局限。(3)最理想的学习方法当然是从基础出发,每一步都扎扎实实。但我国的传统过分地强调了这一点。其实,由于种种原因,我们的研究生、高年级本科生常常并没有把基础课学得尽善尽美,甚至有很多必要的基础课根本没学过。那么应该怎么办?从头学起吗?你有足够的时间和精力从大一开始重学一遍吗?这样的热情很好,可惜一般不符合实际。看看美国为代表的教学体系,你就会发现还有另外一种学法,那就是需要什么的时候再补学什么。实践证明,美国的学生并不明显比其它国家的学生差-或者说他们有自己的长处。如果你也是一个正在给自己“补课”的研究生,为什么不能参照一下美国人的方法呢?
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!