按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
有兴趣也可以参考童诗白的书。
数字电路比模拟电路要好懂得多。推荐大家看一看北京工业大学刘英娴教授写的《数字逻辑》。业绩人士都说这本书很有参考价值(机械工业出版社的)。原因很明了,实用价值高,能听听她讲授的课程更是有一种〃享受科学〃的感觉。清华大学阎石的书也算一本好教材,遗憾的一点是集成电路讲少了些。真有兴趣,看一看大规模数字系统设计吧(北航那本用的还比较多)。
计算机系统结构该怎么教,国际上还在争论。国内能找到的较好教材为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。鼻祖嘛!
关于网络安全我也想在这里说两句,随着计算机技术的发展,整个社会的信息化水平突飞猛进,计算机网络技术日新月异,网络成了当即社会各个工作领域不可缺少的组成部分,只要有网络存在,网络安全问题就是一个必须解决好的问题,学习网络安全不是简简单单的收集一些黑客工具黑一黑别人的网站,而是要学习他的数学原理,实现原理,搞清底层工作机制,这样才能解决大部分的现有问题和新出现的安全问题。总的来说信息安全学的研究还是非常深奥的,这方面体会比较深的要算是在最近的微软杯程序设计大赛中利用平台开发的那个项目My E…business Fairy过程中了。
'3'闲聊软件工程
关于计算机科学的一些边缘科学我想谈一谈软件工程技术,对于一个企业,推出软件是不是就是几个程序员坐在一起,你写一段程序,我写一段程序呢?显然不是。软件工程是典型的计算机科学和数学,管理科学,心理学,社会学等学科的综合。它使我们这些搞理论和技术的人进入了一个社会。你所要考虑的不仅仅是程序的优劣,更应该考虑程序与软件的区别,软件与软件产品的区别,软件软件产品的市场前景,如何去更好的与人交流。这方面我还在学习阶段,以后这方面再写文章吧,先推荐给大家几本书:畅销20年不衰的《人月神话》(清华大学中文版,中国电力出版社影印版),《软件工程…实践者研究的方法》(机械工业出版社译本),《人件》(据说每一位微软公司的部门经理都读过这本书,推荐老总们和想当老总的同学都看看,了解一下什么是软件企业中的人)以及微软公司的《软件开发的科学与艺术》和《软件企业的管理与文化》(研究软件企业的制胜之道当然要研究微软的成功经验了!)看完上面的书,结合自己做的一些团队项目,我的一些比较深的体会有这么几点:
1.How important a plan is for a project development。
2.How to munica