资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
这篇文章大致上是我上次的一个回帖,今天有空就把它整理了出来,希望能造福更多的人。首先我想说的是,人各有志,不是每一个计算机专业出生的人以后都会去“编程”的, 以前和我同寝室的同学,现在在编程的人只有两个,另外的六个有的去当公务员了,有的去 类似银行、法院这样的地方做计算机维护什么的,还有一个改行了,现在在做“信贷”所以 你完全有别的选择,如果对编程没有兴趣,建议你还是去干点别的,因为没兴趣的话你坚持 不下去的,就算硬着头皮去学,永远也只能跟在别人后面跑,很痛苦的。另外,考研其实是 个不错的选择,只可惜要考“政治”和“英语”,不然我也去考了。:)如果你是一名本科在校生的话,下面的文章就是为你写的;如果你刚刚开始工作不久, 也希望下面的内容能对你有所帮助。一。关于计算机本科大学四年的各种必修课我首先想说的是,并不是每一门必修课都是有用的,而且确实如此。1。“显然没用”的课是:“大学物理”,这门课你只要做到能有60分就行了。“大学物理”我 们是大一学的,由于高中带来的惯性,我学得很认真,可是现在回头来看,它是最没用的一 门课,一点用都没有,当然,也许某某会说这是个“素质”问题,当然,如果你这么想的话 也行,但是我觉得如果你不是对它十分的感兴趣的话,还是别在这上面花太多的时间,时间 宝贵呀。2。“更显然没用”的如:“XX革命史”、“XX品德”我也就不废话了。3。“十分有用”的,它们是:“程序设计”、“数据结构”、“操作系统原理”。这三门课,我觉 得是整个大学四年最有用的三门课了,而且是直接的有用。“程序设计”,在我们的课表上全 称叫做“C+程序设计”,其实就是教会你使用一门高级语言,重要性不言而喻;而且学到后 面,比如在学“编译原理”的时候,讲到各种词法分析方法时它就会用C+ (我看的那本书 用的是C+)来写一些例子,再接着讲,也就是说“程序设计”这门课同时也是用来学习后 面很多的课程的工具。“数据结构”可以说是“编程整件事”要使用到的核心技术之一,必须 要很好的理解、完全掌握这门课。“操作系统原理”包括了很多东西,都应该很好的掌握,比 如“进程和线程”的基础知识如果你掌握的不好,那你以后编“多线程”程序的时候就会碰 到很多麻烦;而且,只有理解了操作系统,才有可能编好应用软件,道理很简单,所用的应 用软件都必须运行在操作系统之上,都必须调用它的功能。对于这三门课,最好不要看国人写的教材。“操作系统原理”建议看操作系统:设计与 实现(第二版),作者AnderwS.Tanenbaum等。此书中译本分上下两册,上册为原理,下册 为Minix操作系统的源代码,上册必看,下册根据各人情况有选择的读一些也是好的。“数据 结构”建议看数据结构一+语言描述,作者William Ford等,但是裘宗燕的一本数 据结构一+与面向对象的途径也还行,如果你们学校用它做教材的话,那你勉强看看也 就凑合了。至于“程序设计”,书太多了,The C+Programming Language、C+Prime、 Thinking In C+、Thinking In Java都是好书。另外,说到这里,不得不提到一个问 题:以前经常看到有人争论一个问题,就是C+、Java、(现在又多了一门C#)这三种语言到 底哪种好?我们应该学习哪一种?这其实是一个无聊的争论,因为它们的80%都是相同的, 所以你用“用来争论的这点时间”已经可以在“掌握它们其中之一”的前提下学完另外的两 种了,等你精通了这三门语言后,也就不屑于这种争论了,语言本身只是表现思想的一种手 段罢了,它们是何等的容易学习!4。“有用”的课。这些课,不能算是“直接的有用”也就是说,它们的很多内容你过几年也 许就忘得差不多了,竟然也不会影响你当前的工作。但是,它们是铺垫,是基石。对于这些 课,我们的态度应该是,注重基本概念,做到“弄清楚大致的框架”就可以了,但可以忽略 不必要的细节(但也许考试的时候会考到一些细节,那你就自己看着办了)。这些课是:“微 机系统与汇编语言”、“计算机组成原理”、“计算机网络”、“软件工程”、“数据库原理”、“计 算机接口原理”、“编译原理”、“计算方法”、“离散数学”。“汇编”还是有用的,它是你理解 和学习“计算机组成原理”和“计算机接口原理”的钥匙。“计算机组成原理”和“计算机接 口原理”其实是给你讲一遍计算机的硬件结构,比如CPU内部是怎么回事,它是怎么计算和 缓存的,DMA传输方式是怎么样的等等,弄清楚(或者说曾经弄清楚过,毕竟它们的很多东 西你以后会慢慢忘记的)这些东西心里会感觉比较有底。“计算机网络”感觉上和实际的网络 编程联系不大,也是为你解释了一些原理性的东西,看了心理比较有底:)。另外“数据库原 理”除了讲一些原理以外,一般还会教你SQL语法,其中最难的是各种“查询”语法了,但 是到了实际用的时候你会发现,这些是不必要的,一般的“复杂查询语句”都有工具可以自 动生成的,不用你自己写的,所以对此你不必担心。“软件工程”其实作为一个本科生来说是 不可能很好的理解它的,它必须要有很多实践经验以后,才能体会其中的一些道理,而且国 内的“软件工程”教材一般都比较“教条主义建议浏览一遍即可,知道个大概,了解一下 大型软件的开发流程是怎么样的,就可以了(并且也是需要的),至于其中的诸多概念,重在 理解,能理解多少就理解多少,千万不要去“背”,没有用的。“计算方法”这门课现在可以 说是实用价值剧减,因为基本上所有的算法都有现成的程序库可以调用的,所以大概了解一 下就行了,真到要自己开发算法的时候,不管你当时学得再好,肯定还要回过头来看这些书 的,因为这之间你根本不曾使用过它们,早忘记了。至于“编译原理”有人认为它很重要, 我认为做个了解,大致上知道是怎么回事就行了,因为你不太可能会去开发一个编译器,但 是在实际中用到的机会也是有的,比如我有一次编程时就需要用到“编译原理”的知识来做 一个“词法分析程序”,用来处理用户输入的函数表达式,再调用几个库函数来做定积分,但 总的来说“编译原理”只对很有限的一部分程序的编写起到了实际的作用,所以,先了解一 下,等到用时,再来细看。“离散数学”是前面提到的“数据结构”的理论基础,如果“离散 数学”学得好,理解“数据结构”会更容易些,所以还是花点时间看看吧。推荐一本书:编译原理及实践,作者Kenneth C.Louden,此书附录中有一份Tiny语言编 译器的源代码,对照着前面的理论来看就不会像清华版的编译原理那样不知所云(我们 当时用的就是这本教材,后来我去买了 Kenneth C.Louden的编译原理及实践来看,很多 问题才豁然开朗)。另外,我想说的是,“软件工程学”其实现在才处在一个初级的发展阶段,CMM、XP等等 的理论打得不可开交,各说各的理,几乎达到了互相对骂的程度。作为一个初学者,特别是 “实践经验缺乏”的初学者,我建议你对各种理论多了解,注意我指的是“了解”,不是去“背” 其中的条条框框,当你了解了大多数现在的主流软件工程思想以后,就会形成你自己的比较 客观的思想了,当然还需要结合一些实践的经验,这是以后的事了。至于看哪些书,太多太 多了,自己去找吧。5。“不太有用”的。其实说这些课“不太有用”已经是客气的了,它们其中的一些其实就是 “没用”。这些课是:“自动控制原理”、“通信原理”、“电路原理”、“数字电路原理”、“模拟 电路原理”、“复变函数与积分变换”、“线性代数”、“概率论与数理统计”、“高等数学”。其中,“自动控制原理”和“通信原理”我感觉和实际的编程相差得实在是太远了,我学过它们可 是现在全忘了,也不影响我现在的任何东西。“电路原理”、“数字电路原理”、“模拟电路原理” 这三门课讲起来也是计算机学科的基础课,我只觉得“数字电路原理”对于理解比如“计算 机组成原理”和“计算机接口原理”这样的课还有一些帮助,但是另两门课,我实在发现不 了它们到底有用在哪里,比如“模拟电路原理”主要是教你“三极管的内部构造”之类的东 西,如果你觉得这也属于“必须要掌握的东西”的话,那我也无话可说。另外,“复变函数与 积分变换”是“数字图象处理”(这是一门研究生课程)的基础,如果以后想到Adobe去工作 的人,还是应该趁早学好它们,但是除此以外,好像也是别无他用。“线性代数”、“概率论与 数理统计”和“高等数学”我倒觉得是属于所谓的“素质”了,这些东西不懂好像就说不过 去了,但是要懂到什么程度,各人自己看了。另,“高等数学”也是“复变函数与积分变换” 的基础。6。英语。这门课很特殊,很有用,总之一句话,现在学好了以后绝对不会后悔。:)二。关于课外的学习首先我想说的是,如果有志以后成为“优秀的程序员”的人,应该从大学就开始自己的 “课外自学” 了,这是很必要的,否则你会一开始就落在别人后面。另外,不要以为“所有 的基础课都学得十分的好了”就可以“用比别人短得多的时间来学会各种实际的编程技术。(还有,我想说明的是,我只了解Windows编程,Linux我不懂。所以你以后如果立志于Linux 领域的,我下面的文章对你不会有多少帮助)1。主线。作为“主线学习”。我建议这样进行:首先看这两本书:Windows程序设计(第五版), 作者Charles Petzold;Windows核心编程(第四版),作者Jeffrey Richter;毫无疑问, 此两本书必看!否则你永远也不可能成为一个专业的、高级的程序员(我指Windows程序员)。 另,看Windows核心编程以前需要有“操作系统原理”的基础。同时,如果学的是C+ (在目前,C+在中国仍然是使用最广泛的编程语言),只看看你们的教材是肯定不够的,除 了上面说的The C+ Programming Language等书(挑一本看就够了)以外,还应该看看 Effective C+中文版,作者Scott Meyers。接下来,我建议你不要去学MFC 了,它已 经过时了,而且确实不太好用,我回想起当年学MFC的情景,总是觉得付出和得到不成正比。 这时候可以去学“.NET”编程了,先学一下C#的语法(TomArcher的C#技术内幕还算不 错),你会发现它极容易,可以飞速的看完,因为你已经有了很好的C+基础了。然后再找一 本比较全面介绍“.NET”的书看起,现在的话,我觉得NET程序设计技术内幕是个不错 的选择,作者Jeff Prosise。我这里不是说学“.NET”就看这两本书就OK 了,但是作为一 个“学生”,能看到这里就不错了(当然你要是觉得还不够的话可以去看看Jeffrey Richter 的Applied Microsoft.NET Framework Programming)。还有,在学习各种编程技术期间编 一些自己的小程序是必不可少的,不然的话,你会学什么忘什么。最后,再有时间的话,学 一学“设计模式”(它其实很重要的,而且慢慢的你会觉得它越来越重要),书蛮多,设计模 式值得推荐(作者Erich Gramma等),它是“设计模式”类书籍的宗师,很不错的书,“设 计模式”也是要一些实践经验作铺垫的,因此你可能不能完全的理解它。2。支线。作为支线,也就是说我觉得它们相对次要些。并且学习它们可以不分先后次序,但是, 我还是建议先看完上面说的前三本书( Windows程序设计、Windows核心编程、 Effective C+中文版)以后再来学下面的东西。“Java”。把“ Java ”作为支线一定会引起很多人的不满,或者说是愤慨,当然,你也 可以把它作为主线来学,用来替代上面说的“.NET”。可是根据我自己的体会,“.NET”拥有 更多的优势,如果你不同意我的观点,当然可以去学Java”,没问题。但是作为一个“初学 者”,我还是建议你两样都学一下,这样自己才能有
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号