计算机222-第3部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
常淖执恚砀翊砉δ芎统醪降耐缬τ霉δ堋5窃诩扑慊蒲到淌诖嗣趴纬痰哪勘昃霾荒苡氪艘恢隆T诩扑慊悼纬讨心勘暧κ牵喝醚衔娴牧私饧扑慊Э频姆⒄梗逦陌盐占扑慊Э蒲芯康姆较颍⒄沟那把丶疵恳桓隹纬淘谡鲅Э铺逑抵兴Φ牡匚弧8闱甯餮Э频难澳康模澳谌荩τ昧煊颉J寡谘Э蒲俺跗诰投哉鲅Э朴幸桓稣宓娜鲜叮宰龅皆诮窈蟮难爸星宄裁矗趺囱А<扑慊居τ眉寄艿奈恢糜Φ狈旁诘诙换蚋亢螅蛭庖坏愣杂诒鞠档难Φ庇姓飧雒髂芰ΑU庖坏愫苤匾M萍龈蠹乙槐臼椋夯倒ひ党霭嫔绲摹都扑慊幕罚∟ew Perspective of puter Science),看了这本书我才深刻的体会到自己还是个计算机科学初学者,才比较透彻的了解了什么是计算机科学。科学出版社的《计算科学导论》(赵致琢先生的著作)可以说是在高校计算机教育改革上作了很多的尝试,也是这方面我受益很大的一本书。
一个一流计算机系的优秀学生决不该仅仅是一个编程高手,但他一定首先是一个编程高手。我上大学的时候,第一门专业课是C语言程序设计,念计算机的人从某种角度讲相当一部分人是靠写程序吃饭的。在我们北京工业大学实验学院计算机系里一直有这样的争论(时至今日CSDN上也有),关于第一程序设计语言该用哪一种。我个人认为,用哪种语言属于末节,关键在养成良好的编程习惯。当年老师对我们说,打好基础后学一门新语言只要一个星期。现在我觉得根本不用一个星期,前提是先把基础打好。不要再犹豫了,学了再说,等你抉择好了,别人已经会了几门语言了。
'1'专谈计算机系统的学习
汇编语言和微机原理是两门特烦人的课。你的数学/理论基础再好,也占不到什么便宜。这两门课之间的次序也好比先有鸡还是先有蛋,无论你先学哪门,都会牵扯另一门课里的东西。所以,只能静下来慢慢琢磨。这就是典型的工程课,不需要太多的聪明和顿悟,却需要水滴石穿的渐悟。有关这两门课的书,计算机书店里不难找到。弄几本最新的,对照着看吧。组成原理推荐《计算机组成与结构》清华大学王爱英教授写的。汇编语言大家拿8086/8088入个门,之后一定要学80x86汇编语言。实用价值大,不落后,结构又好,写写高效病毒,高级语言里嵌一点汇编,进行底层开发,总也离不开他,推荐清华大学沈美明的《IBM…PC汇编语言程序设计》。有些人说不想了解计算机体系结构,也不想制造计算机,所以诸如计算机原理,汇编语言,接口之类的课觉得没必要学,这样合理吗?显然不合理,这些东西迟早得掌握,肯定得接触,而且,这是计算机专业与其他专业学生相比的少有的几项优势。做项目的时候,了解这些是非常重要的,不可能说,仅仅为了技术而技术,只懂技术的人最多做一个编码工人,而永远不可能全面地了解整个系统的设计,而编码工人是越老越不值钱。关于组成原理还有个讲授的问题,在我学这门课程时老师讲授时把CPU工作原理誉微程序设计这一块略掉了,理由是我们国家搞CPU技术不如别的国家,搞了这么长时间好不容易出了个龙芯比Intel的还差个十万八千里,所以建议我们不要学了。我看这在各校也未见得不是个问题吧!若真是如他所说,那中国的计算机科学哪个方向都可以停了,软硬件,应用,有几项搞得过美国,搞不过别人就不搞了,那我们坐在这里干什么?教学的观念需要转变的。我们学校现在有一个学弟就专攻CPU设计,平时交流不少,发现他能够将软件的设计思想应用到芯片设计上,我看真的是不错的,比起那些望而生畏的恐怕要强上百倍。
模拟电路这个学科,如今不仅计算机系学生搞不定,电子系学生也多半害怕。如果你真想软硬件通吃,那么建议你先看看邱关源的〃电路原理〃,也许此后再看模拟电路底气会足些。教材:康华光的〃电子技术基础〃(高等教育出版社)还是不错的(我校电子系在用)。有兴趣也可以参考童诗白的书。
数字电路比模拟电路要好懂得多。推荐大家看一看北京工业大学刘英娴教授写的《数字逻辑》。业绩人士都说这本书很有参考价值(机械工业出版社的)。原因很明了,实用价值高,能听听她讲授的课程更是有一种〃享受科学〃的感觉。清华大学阎石的书也算一本好教材,遗憾的一点是集成电路讲少了些。真有兴趣,看一看大规模数字系统设计吧(北航那本用的还比较多)。
计算机系统结构该怎么教,国际上还在争论。国内能找到的较好教材为Stallings的《puter Organization and Architecture:Designing for Performance》(清华影印本)。国际上最流行的则是《puter architecture: aquantitative approach》; by Patterson & Hennessy。
'2'一些其他的专业课程
操作系统可以选用《操作系统的内核设计与实现》和《现代操作系统》两书之一。这两部都可以算经典。我们当时理论方面学习采用的是清华大学出版社《操作系统》,张尧学教授写的那本。可以说理论涉及的比较全,在有就是他的实验指导书,操作系统这门学科同程序设计结合得很紧密,不自己试着做些什么恐怕很难搞通。我想作为实践类的参考首推的是这本:《4。4BSD操作系统设计与实现》作为开源文化很重要的一个分支的BSD操作系统家族做得非常出色,其中现在若干出色的分支系统(例如FreeBSD;NetBSD;OpenBSD;DragonflyBSD)都与4。4BSD有着难解的渊源。而4。4BSD的开发者亲自撰写的这本理论设计与实现便是一本绝佳的参考。另外在有一些辅助材料的基础上研究*nix的源代码也是深入操作系统设计与实现的一条绝佳之路。(感谢CSDN网友ffgg的建议;我将《Windows操作系统原理》这本书去掉,现在看来这本书的确不能算是一个十分优秀的作品)
如果先把形式语言学好了,则编译原理中的前端我看只要学四个算法:最容易实现的递归下降;最好的自顶向下算法LL(k);最好的自底向上算法LR(k);LR(1)的简化SLR(也许还有另一简化LALR)。后端完全属于工程性质,自然又是another story。 推荐教材:Kenneth C。Louden写的《piler Construction Principles and Practice》即是《编译原理及实践》(机械工业出版社的译本)
学数据库要提醒大家的是,会用VFP,VB; Power builder不等于懂数据库。(这世界上自以为懂数据库的人太多了!)数据库设计既是科学又是艺术,数据库实现则是典型的工程。所以从某种意义上讲,数据库是最典型的一门计算机课程理工结合,互相渗透。另外推荐大家学完软件工程学后再翻过来看看数据库技术,又会是一番新感觉。至少对一些基本概念与描述方法会有很深的体会,比如说数据字典,E…R图之类的。推荐教材:Abraham Silberschatz等著的 〃Database System Concepts〃。作为知识的完整性,还推荐大家看一看机械工业出版社的《数据仓库》译本。
计算机网络的标准教材还是来自Tanenbaum的《puter Networks》(清华大学有译本)。还有就是推荐谢希仁的《计算机网络教程》(人民邮电出版社)问题讲得比较清楚,参考文献也比较权威。不过,网络也属于Hardcore System,所以光看书是不够的。建议多读RFC,ietf/rfc。html里可以按编号下载RFC文档。从IP的读起。等到能掌握10种左右常用协议,就没有几个人敢小看你了。再做的工作我看放在网络设计上就比较好了。
数据结构的重要性就不言而喻了,学完数据结构你会对你的编程思想进行一番革命性的洗礼,会对如何建立一个合理高效的算法有一个清楚的认识。对于算法的建立我想大家应当注意以下几点:
当遇到一个算法问题时;首先要知道自己以前有没有处理过这种问题。如果见过;那么你一般会顺利地做出来;如果没见过;那么考虑以下问题:
1。 问题是否是建立在某种已知的熟悉的数据结构(例如;二叉树)上?如果不是;则要自己设计数据结构。
2。 问题所要求编写的算法属于以下哪种类型?(建立数据结构;修改数据结构;遍历;查找;排序。。。)
3。 分析问题所要求编写的算法的数学性质。是否具备递归特征?(对于递归程序设计;只要设计出合理的参数表以及递归结束的条件;则基本上大功告成。)
4。 继续分析问题的数学本质。根据你以前的编程经验;设想一种可能是可行的解决办法;并证明这种解决办法的正确性。如果题目对算法有时空方面的要求;证明你的设想满足其要求。一般的;时间效率和空间效率难以兼得。有时必须通过建立辅助存储的方法来节省时间。
5。 通过一段时间的分析;你对解决这个问题已经有了自己的一些思路。或者说;你已经可以用自然语言把你的算法简单描述出来。继续验证其正确性;努力发现其中的错误并找出解决办法。在必要的时候(发现了无法解决的矛盾);推翻自己的思路;从头开始构思。
6。 确认你的思路可行以后;开始编写程序。在编写代码的过程中;尽可能把各种问题考虑得详细;周密。程序应该具有良好的结构;并且在关键的地方配有注释。
7。 举一个例子;然后在纸上用笔执行你的程序;进一步验证其正确性。当遇到与你的设想不符的情况时;分析问题产生的原因是编程方面的问题还是算法思想本身有问题。
8。 如果程序通过了上述正确性验证;那么在将其进一步优化或简化。
9。 撰写思路分析;注释。
对于具体的算法思路;只能靠你自己通过自己的知识和经验来加以获得;没有什么特定的规律(否则程序员全部可以下岗了;用机器自动生成代码就可以了)。要有丰富的想象力;就是说当一条路走不通时;不要钻牛角尖;要敢于推翻自己的想法。我也只不过是初学者;说出上面的一些经验;仅供大家参考和讨论。
关于人工智能,我觉得的也是非常值得大家仔细研究的,虽然不能算是刚刚兴起的学科了,但是绝对是非常有发展前途的一门学科。我国人工智能创始人之一,北京科技大学涂序彦教授(这老先生是我的导师李小坚博士的导师)对人工智能这样定义:人工智能是模仿、延伸和扩展人与自然的智能的技术科学。在美国人工智能官方教育网站上对人工智能作了如下定义:Artificial Intelligence; or AI for short; is a bination of puter science; physiology; and philosophy。 AI is a broad topic; consisting of different fields; from machine vision to expert systems。 The element that the fields of AI have in mon is the creation of machines that can 〃think〃。
这门学科研究的问题大概说有:
(1)符号主义: 符号计算与程序设计基础,知识表达方法 :知识与思维,产生式规则,语意网络,一阶谓词逻辑问题求解方法:搜索策略,启发式搜寻,搜寻算法,问题规约方法,谓词演算:归结原理,归结过程专家系统:建立专家系统的方法及工具
(2)联接主义(神经网络学派):1988年美国权威机构指出:数据库,网络发展呈直线上升,神经网络可能是解决人工智能的唯一途径。关于神经网络学派,现在很多还是在发展阶段。
我想对于人工智能的学习,大家一定不要像学数学似的及一些现成的结论,要学会分析问题,最好能利用程序设计实现,这里推荐给大家ACM最佳博士论文奖获得者涂晓媛博士的著作《人工鱼…计算机动画的人工生命方法》(清华大学出版社)。搞人工生命的同学不会不知道国际知名的涂氏父女吧。关于人工智能的书当然首选《Artificial Intelligence A New Synthesis》Nils J。Nilsson。鼻祖嘛!
关于网络安全我也想在这里说两句,随着计算机技术的发展,整个社会的信息化水平突飞猛进,计算机网络技术日新月异,网络成了当即社会各个工作领域不可缺少的组成部分,只要有网络存在,网络安全问题就是一个必须解决好的问题,学习网络安全不是简简单单的收集一些黑客工具黑一黑别人的网站,而是要学习他的数学原理,实现原理,搞清底层工作机制,这样才能解决大部分的现有问题和新出现的安全问题。总的来说信息安全学的研究还是非常深奥的,这方面体会比较深的要算是在最近的微软杯程序设计大赛中利用平