计算机科学与技术学习反思录 zz
从我们学校的bbs上看来的
好像也是从别的地方转载的
给大家分享^_^
希望不是很老吧
摘自 人工智能研究者俱乐部
计算机科学与技术学习反思录
原创:zengyi820 2003年5月13日
计算机科学与技术学习反思录
计算机科学与技术这一门科学深深的吸引着我们这些同学们,上计算机系已经有近三
年,自己也做了一些思考,我一直认为计算机科学与技术这门专业,在本科阶段是不可能
切
分成计算机科学和计算机技术的,因为计算机科学需要相当多的实践,而实践需要技术;
每一个人(包括非计算机专业),掌握简单的计算机技术都很容易(包括程序设计),但计
算机专业的优势就在于,我们掌握许多其他专业并不“深究”的东西,例如,算法,体系
结构,等等。非计算机专业的人可以很容易地做一个芯片,写一段程序,但他们做不出计
算机专业能够做出来的大型系统。(与司徒彦南兄的谈话)今天我想专门谈一谈计算机科
学,并将重点放在计算理论上。
计算机理论的一个核心问题--从数学谈起:
记得当年大一入学,每周六课时高等数学,天天作业不断(那时是六日工作制)。颇有
些同
学惊呼走错了门:咱们这到底念的是什么系?不错,你没走错门,这就是计算机科学与技
术
系。我国计算机科学系里的传统是培养做学术研究,尤其是理论研究的人(方向不见得
有
问题,但是做得不是那么尽如人意)。而计算机的理论研究,说到底了,如网络安全,
图
形图像学,视频音频处理,哪个方向都与数学有着很大的关系,虽然也许是正统数学家
眼
里非主流的数学。这里我还想阐明我的一个观点:我们都知道,数学是从实际生活当中
抽
象出来的理论,人们之所以要将实际抽象成理论,目的就在于想用抽象出来的理论去更
好
的指导实践,有些数学研究工作者喜欢用一些现存的理论知识去推导若干条推论,殊不
知
其一:问题考虑不全很可能是个错误的推论,其二:他的推论在现实生活中找不到原型
,
不能指导实践。严格的说,我并不是一个理想主义者,政治课上学的理论联系实际一直
是
指导我学习科学文化知识的航标(至少我认为搞计算机科学与技术的应当本着这个方向
)
。
其实我们计算机系学数学光学高等数学是不够的(典型的工科院校一般都开的是高等数
学
),我们应该像数学系一样学一下数学分析(清华计算机系开的好像就是数学分析),
数
学分析这门科学,咱们学计算机的人对它有很复杂的感情。在于它是偏向于证明型的数
学
课程,这对我们培养良好的分析能力极有帮助。我的软件工程学导师北工大数理学院的
王
仪华先生就曾经教导过我们,数学系的学生到软件企业中大多作软件设计与分析工作,
而
计算机系的学生做程序员的居多,原因就在于数学系的学生分析推理能力,从所受训练
的
角度上要远远在我们之上。当年出现的怪现象是:计算机系学生的高中数学基础在全校
数
一数二(希望没有冒犯其它系的同学),教学课时数也仅次于数学系,但学完之后的效果
却
不尽如人意。难道都是学生不努力吗,我看未见得,方向错了也说不一定,其中原因何
在
,发人深思。
我个人的浅见是:计算机系的学生,对数学的要求固然跟数学系不同,跟物理类差别则
更
大。通常非数学专业的所谓“高等数学”,无非是把数学分析中较困难的理论部分删去
,
强调套用公式计算而已。而对计算机系来说,数学分析里用处最大的恰恰是被删去的理
论
部分。说得难听一点,对计算机系学生而言,追求算来算去的所谓“工程数学”已经彻
底
地走进了误区。记上一堆曲面积分的公式,难道就能算懂了数学?那倒不如现用现查,
何
必费事记呢?再不然直接用Mathematics或是Matalab好了。
我在系里最爱做的事情就是给学弟学妹们推荐参考书。中文的数学分析书,一般都认为
以
北大张筑生老师的“数学分析新讲”为最好。万一你的数学实在太好,那就去看菲赫金
哥
尔茨的“微积分学教程”好了--但我认为没什么必要,毕竟你不想转到数学系去。吉米
多
维奇的“数学分析习题集”也基本上是计算型的东东。书的名气很大,倒不见得适合我
们
,还是那句话,重要的是数学思想的建立,生活在信息社会里我们求的是高效,计算这
玩
意还是留给计算机吧。不过现在多用的似乎是复旦大学的《数学分析》也是很好的教材
。
中国的所谓高等代数,就等于线性代数加上一点多项式理论。我以为这有好的一面,因
为
可以让学生较早感觉到代数是一种结构,而非一堆矩阵翻来覆去。这里不得不提南京大
学
林成森,盛松柏两位老师编的“高等代数”,感觉相当舒服。此书相当全面地包含了关
于
多项式和线性代数的基本初等结果,同时还提供了一些有用的又比较深刻的内容,如Stu
r
m序列,Shermon-Morrison公式,广义逆矩阵等等。可以说,作为本科生如能吃透此书,
就
可以算高手。国内较好的高等代数教材还有清华计算机系用的那本,清华出版社出版,
书
店里多多,一看就知道。从抽象代数的观点来看,高等代数里的结果不过是代数系统性
质
的一些例子而已。莫宗坚先生的《代数学》里,对此进行了深刻的讨论。然而莫先生的
书
实在深得很,作为本科生恐怕难以接受,不妨等到自己以后成熟了一些再读。
正如上面所论述的,计算机系的学生学习高等数学:知其然更要知其所以然。你学习的
目
的应该是:将抽象的理论再应用于实践,不但要掌握题目的解题方法,更要掌握解题思
想
,对于定理的学习:不是简单的应用,而是掌握证明过程即掌握定理的由来,训练自己
的
推理能力。只有这样才达到了学习这门科学的目的,同时也缩小了我们与数学系的同学
之
间思维上的差距。
概率论与数理统计这门课很重要,可惜大多数院校讲授这门课都会少些东西。少了的东
西
现在看至少有随机过程。到毕业还没有听说过Markov过程,此乃计算机系学生的耻辱。
没
有随机过程,你怎么分析网络和分布式系统?怎么设计随机化算法和协议?据说清华计
算
机系开有“随机数学”,早就是必修课。另外,离散概率论对计算机系学生来说有特殊
的
重要性。而我们国家工程数学讲的都是连续概率。现在,美国已经有些学校开设了单纯
的
“离散概率论”课程,干脆把连续概率删去,把离散概率讲深些。我们不一定要这么做
,
但应该更加强调离散概率是没有疑问的。这个工作我看还是尽早的做为好。
计算方法学(有些学校也称为数学分析学)是最后一门由数理学院给我们开的课。一般
学
生对这门课的重视程度有限,以为没什么用。不就是照套公式嘛!其实,做图形图像可
离
不开它,密码学搞深了也离不开它。而且,在很多科学工程中的应用计算,都以数值的
为
主。这门课有两个极端的讲法:一个是古典的“数值分析”,完全讲数学原理和算法;
另
一个是现在日趋流行的“科学与工程计算”,干脆教学生用软件包编程。我个人认为,
计
算机系的学生一定要认识清楚我们计算机系的学生为什么要学这门课,我是很偏向于学
好
理论后用计算机实现的,最好使用C语言或C++编程实现。向这个方向努力的书籍还是挺
多
的,这里推荐大家高等教育出版社(CHEP)和施普林格出版社(Springer)联合出版的《
计
算方法(Computational Methods)》,华中理工大学数学系写的(现华中科技大学),
这
方面华科大做的工作在国内应算是比较多的,而个人认为以这本最好,至少程序设计方
面
涉及了:任意数学函数的求值,方程求根,线性方程组求解,插值方法,数值积分,场
微
分方程数值求解。李庆扬的那本则理论性过强,与实际应用结合得不太紧。
每个学校本系里都会开一门离散数学,涉及集合论,图论,和抽象代数,数理逻辑。不
过
,这么多内容挤在离散数学一门课里,是否时间太紧了点?另外,计算机系学生不懂组
合
和数论,也是巨大的缺陷。要做理论,不懂组合或者数论吃亏可就太大了。从理想的状
态
来看,最好分开六门课:集合,逻辑,图论,组合,代数,数论。这个当然不现实,因为
没
那么多课时。也许将来可以开三门课:集合与逻辑,图论与组合,代数与数论。(这方
面
我们学校已经着手开始做了)不管课怎么开,学生总一样要学。下面分别谈谈上面的三
组
内容。
古典集合论,北师大出过一本《基础集合论》不错。
数理逻辑,中科院软件所陆钟万教授的《面向计算机科学的数理逻辑》就不错。现在可
以
找到陆钟万教授的讲课录像,http://www.cas.ac.cn/html/Dir/2001/11/06/3391.htm自
己
去看看吧。总的来说,学集合/逻辑起手不难,普通高中生都能看懂。但越往后越感觉深
不
可测。