. C! b$ \+ Y* q, |学完以上各书之后,如果你还有精力兴趣进一步深究,那么可以试一下GTM系列中的《Introduction to Axiomatic Set Theory》和《A Course of Mathematical Logic》。这两本都有世界图书出版社的引进版。你如果能搞定这两本,可以说在逻辑方面真正入了门,也就不用再浪费时间听我瞎侃了。 ' N' h. @# R+ ?. j) R: m1 {: d; l7 I
* s% C* r% M j7 k9 V
据说全中国最多只有三十个人懂图论。此言不虚。图论这东东,技巧性太强,几乎每个问题都有一个独特的方法,让人头痛。不过这也正是它魅力所在:只要你有创造性,它就能给你成就感。我的导师说,图论里面随便揪一块东西就可以写篇论文。大家可以体会里面内容之深广了吧!国内的图论书中,王树禾老师的“图论及其算法”非常成功。一方面,其内容在国内教材里算非常全面的。另一方面,其对算法的强调非常适合计算机系(本来就是科大计算机系教材)。有了这本书为主,再参考几本翻译的,如Bondy & Murty的《图论及其应用》,人民邮电出版社翻译的《图论和电路网络》等等,就马马虎虎,对本科生足够了。再进一步,世界图书引进有GTM系列的"Modern Graph Theory"。此书确实经典!国内好象还有一家出版了个翻译版。不过,学到这个层次,还是读原版好。搞定这本书,也标志着图论入了门。 7 y- P! Y3 V0 i/ J* U
2 ?9 U+ Y1 M/ f5 n$ {" A5 \* ?8 |$ f$ C/ u6 \* v" s1 w
抽象代数,国内经典为莫宗坚先生的“代数学”。此书是北大数学系教材,深得好评。然而对本科生来说,此书未免太深。可以先学习一些其它的教材,然后再回头来看“代数学”。国际上的经典可就多了,GTM系列里就有一大堆。推荐一本谈不上经典,但却最简单的,最容易学的:<a href="http://www.math.miami.edu/~ec/book/" target="_blank" ><FONT color=#003366>http://www.math.miami.edu/~ec/book/</FONT></A>这本“Introduction to Linear and Abstract Algebra"非常通俗易懂,而且把抽象代数和线性代数结合起来,对初学者来说非常理想,我校比较牛的同学都有收藏。 a; m/ v& F8 e5 H . ]3 g; c" {& k ; _2 U# k. W- H" ?+ c" b, |数论方面,国内有经典而且以困难著称的”初等数论“(潘氏兄弟著,北大版)。再追溯一点,还有更加经典(可以算世界级)并且更加困难的”数论导引“(华罗庚先生的名著,科学版,九章书店重印,繁体的看起来可能比较困难)。把基础的几章搞定一个大概,对本科生来讲足够了。但这只是初等数论。本科毕业后要学计算数论,你必须看英文的书,如Bach的"Introduction to Algorithmic Number Theory"。 " W5 E! b1 l; U! k* Y" ?
/ ^( G; e3 F e r, E9 u' T 3 m; z/ D- T3 U$ M( ~1 V0 d2 ~计算机科学理论的根本,在于算法。现在很多系里给本科生开设算法设计与分析,确实非常正确。环顾西方世界,大约没有一个三流以上计算机系不把算法作为必修的。算法教材目前公认以Corman等著的"Introduction to Algorithms"为最优。对入门而言,这一本已经足够,不需要再参考其它书。 ( Z. @1 T5 `5 X3 C& L0 r4 J & m' w2 _& r8 ^% P) P! s& J' V4 W( @4 ?8 _$ l2 a U
再说说形式语言与自动机。我看过北邮的教材,应该说写的还清楚。但是,有一点要强调:形式语言和自动机的作用主要在作为计算模型,而不是用来做编译。事实上,编译前端已经是死领域,没有任何open problems,北科大的班晓娟博士也曾经说过,编译的技术已相当成熟。如果为了这个,我们完全没必要去学形式语言--用用yacc什么的就完了。北邮的那本在国内还算比较好,但是在深度上,在跟可计算性的联系上都有较大的局限,现代感也不足。所以建议有兴趣的同学去读英文书,不过国内似乎没引进这方面的教材。可以去互动出版网上看一看。入门以后,把形式语言与自动机中定义的模型,和数理逻辑中用递归函数定义的模型比较一番,可以说非常有趣。现在才知道,什么叫“宫室之美,百官之富”! - L" f( @2 z( K& M. c ; a: D( j/ x4 U9 c! j* t; r- S5 o7 m# G- l$ i0 R, s
计算机科学和数学的关系有点奇怪。二三十年以前,计算机科学基本上还是数学的一个分支。而现在,计算机科学拥有广泛的研究领域和众多的研究人员,在很多方面反过来推动数学发展,从某种意义上可以说是孩子长得比妈妈还高了。但不管怎么样,这个孩子身上始终流着母亲的血液。这血液是the mathematical underpinning of computer science(计算机科学的数学基础),也就是理论计算机科学。原来在东方大学城图书馆中曾经看过一本七十年代的译本(书皮都没了,可我就爱关注这种书),大概就叫《计算机数学》。那本书若是放在当时来讲决是一本好书,但现在看来,涵盖的范围还算广,深度则差了许多,不过推荐大一的学生倒可以看一看,至少可以使你的计算数学入入门。 & i ~7 ~2 @4 ?* s9 Z
5 [5 j7 a/ {2 x, F/ i8 T% k9 R. q- r3 k6 r% J0 |$ T( W3 I
最常和理论计算机科学放在一起的一个词是什么?答:离散数学。这两者的关系是如此密切,以至于它们在不少场合下成为同义词。(这一点在前面的那本书中也有体现)传统上,数学是以分析为中心的。数学系的同学要学习三四个学期的数学分析,然后是复变函数,实变函数,泛函数等等。实变和泛函被很多人认为是现代数学的入门。在物理,化学,工程上应用的,也以分析为主。 1 N7 t j' v1 R" E9 A$ v- `6 u: G& q5 s: b# u
6 ? x) r9 y D/ O
随着计算机科学的出现,一些以前不太受到重视的数学分支突然重要起来。人们发现,这些分支处理的数学对象与传统的分析有明显的区别:分析研究的问题解决方案是连续的,因而微分,积分成为基本的运算;而这些分支研究的对象是离散的,因而很少有机会进行此类的计算。人们从而称这些分支为“离散数学”。“离散数学”的名字越来越响亮,最后导致以分析为中心的传统数学分支被相对称为“连续数学”。 ; V) X8 E0 F4 l1 ^6 H( @ * i; R: Q, F- E( s. Q2 L* \) T1 ]& g7 ]" p2 S' I9 {
离散数学经过几十年发展,基本上稳定下来。一般认为,离散数学包含以下学科 :& b3 i: ^4 G$ Q
2 E9 f! v8 y4 I1) 集合论,数理逻辑与元数学。这是整个数学的基础,也是计算机科学的基础。6 m) O7 ]5 t8 A6 j7 i0 M
6 y* l _8 O5 y5 K9 k2) 图论,算法图论;组合数学,组合算法。计算机科学,尤其是理论计算机科学的核心是 & o6 d; r! K# W! b
算法,而大量的算法建立在图和组合的基础上。 . o' g+ [' O0 D: ^
0 T5 ?$ |6 n% U; m& _3) 抽象代数。代数是无所不在的,本来在数学中就非常重要。在计算机科学中,人们惊讶地发现代数竟然有如此之多的应用。 , @. ^/ M, V- A9 F- f& Q1 y S
2 J$ Z7 A& r4 R/ Z. u ! o6 z( m$ |0 b但是,理论计算机科学仅仅就是在数学的上面加上“离散”的帽子这么简单吗?一直到大约十几年前,终于有一位大师告诉我们:不是。D.E.Knuth(他有多伟大,我想不用我废话了)在Stanford开设了一门全新的课程Concrete Mathematics。 Concrete这个词在这里有两层含义: [- i2 @" t; C: Q7 b* v
! {" O/ g! X+ U; ^ l5 n4 O0 w& y- F( I0 }) J9 Z( U
首先:对abstract而言。Knuth认为,传统数学研究的对象过于抽象,导致对具体的问题关心不够。他抱怨说,在研究中他需要的数学往往并不存在,所以他只能自己去创造一些数学。为了直接面向应用的需要,他要提倡“具体”的数学。在这里我做一点简单的解释。例如在集合论中,数学家关心的都是最根本的问题--公理系统的各种性质之类。而一些具体集合的性质,各种常见集合,关系,映射都是什么样的,数学家觉得并不重要。然而,在计算机科学中应用的,恰恰就是这些具体的东西。Knuth能够首先看到这一点,不愧为当世计算机第一人。其次,Concrete是Continuous(连续)加上discrete(离散)。不管连续数学还是离散数学,都是有用的数学! 7 A& p, ^7 ~$ j, q* i3 Z1 B4 S: N W. l* K9 I$ }" R8 C! _% E
' W1 Y- |: {4 R: s! u) o理论与实际的结合--计算机科学研究的范畴 4 u& m; W, A {; F. a3 r/ c; a8 P! P
0 c8 X7 G+ y: P. p
前面主要是从数学角度来看的。从计算机角度来看,理论计算机科学目前主要的研究领域包括:可计算性理论,算法设计与复杂性分析,密码学与信息安全,分布式计算理论,并行计算理论,网络理论,生物信息计算,计算几何学,程序语言理论等等。这些领域互相交叉,而且新的课题在不断提出,所以很难理出一个头绪来。想搞搞这方面的工作,推荐看中国计算机学会的一系列书籍,至少代表了我国的权威。下面随便举一些例子。 u8 g0 w3 m5 E8 D1 ]$ Y* H W
% a9 O- |8 z/ ^; G* B! l% k3 _由于应用需求的推动,密码学现在成为研究的热点。密码学建立在数论(尤其是计算数论),代数,信息论,概率论和随机过程的基础上,有时也用到图论和组合学等。很多人以为密码学就是加密解密,而加密就是用一个函数把数据打乱。这样的理解太浅显了。 . U# W$ x! `4 S5 o! L! z+ W
# d( A9 ^1 T K
* O* |) e/ g j& u& E" R j( f( d1 L
现代密码学至少包含以下层次的内容: " W. g1 }4 \5 I4 p! w% p
- B# G4 ^3 X- z& m! m第一,密码学的基础。例如,分解一个大数真的很困难吗?能否有一般的工具证明协议正确? 5 g1 w( t2 G5 x( F, l# s9 y) w! U- S: O
第二,密码学的基本课题。例如,比以前更好的单向函数,签名协议等。7 Z- j. H( O, ?- g- ^0 y7 N5 n
3 z; _8 \! E( P* D% ~/ ^
第三,密码学的高级问题。例如,零知识证明的长度,秘密分享的方法。 S9 y. U) e0 ]& c
- Z) E6 J8 V4 T6 U2 q v
第四,密码学的新应用。例如,数字现金,叛徒追踪等。 5 K( B. S1 W0 t2 s4 q, {8 G* M0 ~8 k2 ]/ @( e5 E
3 ~ J: C' B) U7 p' ?+ C& K; S3 I
在分布式系统中,也有很多重要的理论问题。例如,进程之间的同步,互斥协议。一个经典的结果是:在通信信道不可靠时,没有确定型算法能实现进程间协同。所以,改进TCP三次握手几乎没有意义。例如时序问题。常用的一种序是因果序,但因果序直到不久前才有一个理论上的结果....例如,死锁没有实用的方法能完美地对付。例如,......操作系统研究过就自己去举吧! # q( C9 e$ W9 v3 i1 I2 O
1 v/ _3 a: M. C& D5 m0 }. M ; Y0 T% p6 a& ?% a0 t2 t/ N, L汇编语言和微机原理是两门特烦人的课。你的数学/理论基础再好,也占不到什么便宜。这两门课之间的次序也好比先有鸡还是先有蛋,无论你先学哪门,都会牵扯另一门课里的东西。所以,只能静下来慢慢琢磨。这就是典型的工程课,不需要太多的聪明和顿悟,却需要水滴石穿的渐悟。有关这两门课的书,计算机书店里不难找到。弄几本最新的,对照着看吧。组成原理推荐《计算机组成与结构》清华大学王爱英教授写的。汇编语言大家拿8086/8088入个门,之后一定要学80x86汇编语言。实用价值大,不落后,结构又好,写写高效病毒,高级语言里嵌一点汇编,进行底层开发,总也离不开他,推荐清华大学沈美明的《IBM-PC汇编语言程序设计》。有些人说不想了解计算机体系结构,也不想制造计算机,所以诸如计算机原理,汇编语言,接口之类的课觉得没必要学,这样合理吗?显然不合理,这些东西迟早得掌握,肯定得接触,而且,这是计算机专业与其他专业学生相比的少有的几项优势。做项目的时候,了解这些是非常重要的,不可能说,仅仅为了技术而技术,只懂技术的人最多做一个编码工人,而永远不可能全面地了解整个系统的设计,而编码工人是越老越不值钱。关于组成原理还有个讲授的问题,在我学这门课程时老师讲授时把CPU工作原理誉微程序设计这一块略掉了,理由是我们国家搞CPU技术不如别的国家,搞了这么长时间好不容易出了个龙芯比Intel的还差个十万八千里,所以建议我们不要学了。我看这在各校也未见得不是个问题吧!若真是如他所说,那中国的计算机科学哪个方向都可以停了,软硬件,应用,有几项搞得过美国,搞不过别人就不搞了,那我们坐在这里干什么?教学的观念需要转变的。 # Z z/ M. J7 p0 M
9 K2 N6 N) Z w% i. V. B
" n$ `, [; [; G7 i$ o; Q$ Z
模拟电路这东东,如今不仅计算机系学生搞不定,电子系学生也多半害怕。如果你真想软硬件通吃,那么建议你先看看邱关源的“电路原理”,也许此后再看模拟电路底气会足些。教材:康华光的“电子技术基础”(高等教育出版社)还是不错的(我校电子系在用)。有兴趣也可以参考童诗白的书。 + o5 Z0 v; k' A0 J
5 p" _) r9 |* p) K* G, K5 c
9 j# p% s0 b$ G1 I' R+ M* o) B数字电路比模拟电路要好懂得多。推荐大家看一看我们北工大刘英娴教授写的《数字逻辑》业绩人士都说这本书很有参考价值(机械工业出版社的)。原因很明了,实用价值高,能听听她讲授的课程更是有一种“享受科学”的感觉。清华大学阎石的书也算一本好教材,遗憾的一点是集成电路讲少了些。真有兴趣,看一看大规模数字系统设计吧(北航那本用的还比较多)。 ( U* o) l' O+ x$ H) p
) L) V4 _' X( a
3 M) Y D5 e6 r- m
计算机系统结构该怎么教,国际上还在争论。国内能找到的较好教材为Stallings的"Computer Organization and Architectureesigning for Performance"(清华影印 / R% i; B$ V% ^5 [+ D
本)。国际上最流行的则是“Computer architecture: aquantitative approach", by Patterson & Hennessy。 * P, e9 N) Y9 M& t2 p4 m: A# C+ P; s% S3 r$ a- I$ x
' Y4 z7 J' {4 q0 x2 B
操作系统可以随便选用《操作系统的内核设计与实现》和《现代操作系统》两书之一。这两部都可以算经典,唯一缺点就是理论上不够严格。不过这领域属于Hardcore System,所以在理论上马虎一点也情有可原。想看理论方面的就推荐清华大学出版社《操作系统》吧,高教司司长张尧学写的,我们教材用的是那本。 另外推荐一本《Windows操作系统原理》机械工业出版社的,这本书是我国操作系统专家在微软零距离考察半年,写作历时一年多写成的,教操作系统的专家除了清华大学的张尧学(现高教司司长)几乎所有人都参加了。Bill Gates亲自写序。里面不但结合windows2000,xp详述操作系统的内核,而且后面讲了一些windows编程基础,有外版书的味道,而且上面一些内容可以说在国内外只有那本书才有对windows内核细致入微的介绍, ) F' q- v+ B* Q" q7 {' a* G% a& [6 f+ E
. D+ y$ |' |$ L' G+ F. X- S, e! f如果先把形式语言学好了,则编译原理中的前端我看只要学四个算法:最容易实现的递归下降;最好的自顶向下算法LL(k);最好的自底向上算法LR(k);LR(1)的简化SLR(也许还有另一简化LALR)。后端完全属于工程性质,自然又是another story。 ! A& V" B7 p/ j) D+ j/ n$ V - k0 W" ?3 h% s" d2 v3 `" I2 J: a6 b9 b D! a
推荐教材:Kenneth C.Louden写的“Compiler Construction Principles and Practice”即是《编译原理及实践》(机械工业出版社的译本) ' M; Q$ Q7 u7 D& \
# P3 K5 v, `8 x b" n+ |8 c0 @! s2 w- A
学数据库要提醒大家的是,会用VFP,VB, Power builder不等于懂数据库。(这世界上自以为懂数据库的人太多了!)数据库设计既是科学又是艺术,数据库实现则是典型的工程。所以从某种意义上讲,数据库是最典型的一门计算机课程--理工结合,互相渗透。另外推荐大家学完软件工程学后再翻过来看看数据库技术,又会是一番新感觉。推荐教材:Abraham Silberschatz等著的 "Database System Concepts".作为知识的完整性,还推荐大家看一看机械工业出版社的《数据仓库》译本。 9 V/ C5 A" @6 T5 J# Q
, ]8 R+ f1 t+ P7 r1 ~+ a2 P& A数据结构的重要性就不言而喻了,学完数据结构你会对你的编程思想进行一番革命性的洗礼,会对如何建立一个合理高效的算法有一个清楚的认识。对于算法的建立我想大家应当注意以下几点: + G2 d/ o+ M# x! k4 ]$ q, t$ ^ ^8 E 6 Z- Z8 \3 b3 \ c4 A( B- k/ t# w; l2 d: Q& y
当遇到一个算法问题时,首先要知道自己以前有没有处理过这种问题.如果见过,那么你一般会顺利地做出来;如果没见过,那么考虑以下问题: ; g5 K3 y$ k; o% ^" W* P
* S; W6 K8 U2 b1. 问题是否是建立在某种已知的熟悉的数据结构(例如,二叉树)上?如果不是,则要自己设计数据结构。 6 h& P2 { L$ n. t; n' t( [8 U A4 ~; W \- t
2. 问题所要求编写的算法属于以下哪种类型?(建立数据结构,修改数据结构,遍历,查找,排序...) 1 k! ]! U0 }, f1 b* x% k9 y9 k; i' n7 W: W6 h) Z2 Q) G% Q8 j
3. 分析问题所要求编写的算法的数学性质.是否具备递归特征?(对于递归程序设计,只要设计出合理的参数表以及递归结束的条件,则基本上大功告成.) 2 t2 W6 U \ j+ c" n8 {9 l
. v9 [& Y0 o2 u. G: O4. 继续分析问题的数学本质.根据你以前的编程经验,设想一种可能是可行的解决办法,并证明这种解决办法的正确性.如果题目对算法有时空方面的要求,证明你的设想满足其要求.一般的,时间效率和空间效率难以兼得.有时必须通过建立辅助存储的方法来节省时间. $ {. A/ S! X: I+ Q1 p 6 B1 L' G3 [1 a5. 通过一段时间的分析,你对解决这个问题已经有了自己的一些思路.或者说,你已经可以用自然语言把你的算法简单描述出来.继续验证其正确性,努力发现其中的错误并找出解决办法.在必要的时候(发现了无法解决的矛盾),推翻自己的思路,从头开始构思.0 @3 s" x% l( w3 x: ]! u1 d
b3 } o: N1 V. R9 R& }" h4 I2 y
! u) Z6 e+ f- B, P# `* n6. 确认你的思路可行以后,开始编写程序.在编写代码的过程中,尽可能把各种问题考虑得详细,周密.程序应该具有良好的结构,并且在关键的地方配有注释. 5 |2 O. B% }* f/ J ?" c7 S. T4 F5 Y( e
5 q& m% |7 ]7 t) i' U8 k* w7. 举一个例子,然后在纸上用笔执行你的程序,进一步验证其正确性.当遇到与你的设想不符的情况时,分析问题产生的原因是编程方面的问题还是算法思想本身有问题. ; l$ B' y& H) P+ j- H, t8 i! w
6 K$ h' H& {& O k" w. U; [7 G
8. 如果程序通过了上述正确性验证,那么在将其进一步优化或简化。 6 E5 h2 M2 ]# b. R 6 h& k! d: s% w0 t! h9. 撰写思路分析,注释. + I. G' M& X9 K& j% L6 X1 I I
6 X1 Z6 ^! N, e! A% L5 w/ G
% m5 B- R' q3 n6 k+ P对于具体的算法思路,只能靠你自己通过自己的知识和经验来加以获得,没有什么特定的规律(否则程序员全部可以下岗了,用机器自动生成代码就可以了).要有丰富的想象力,就是说当一条路走不通时,不要钻牛角尖,要敢于推翻自己的想法.我也只不过是初学者,说出上面的一些经验,仅供大家参考和讨论。 2 T& }; H8 p; z" d- F; U7 r3 `0 H5 I. i2 t# P& `" m
7 g4 h0 r" p, @" {# A2 k- z
关于人工智能,我觉得的也是非常值得大家仔细研究的,虽然不能算是刚刚兴起的学科了,但是绝对是非常有发展前途的一门学科。我国人工智能创始人之一,北京科技大学涂序彦教授(这老先生是我的导师李小坚博士的导师)对人工智能这样定义:人工智能是模仿、延伸和扩展人与自然的智能的技术科学。在美国人工智能官方教育网站上对人工智能作了如下定义:Artificial Intelligence, or AI for short, is a combination of computer 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 common is the creation of machines that can "think". " O, H; K" a" ]. P1 ~& W; U
这门学科研究的问题大概说有: 7 f2 y7 a1 g3 ?- ~8 V5 b0 P$ S6 _
* M/ F% C9 I% ]3 m* X" G
(1)符号主义: 符号计算与程序设计基础,知识表达方法 :知识与思维,产生式规则,语意网络,一阶谓词逻辑问题求解方法:搜索策略,启发式搜寻,搜寻算法,问题规约方法,谓词演算:归结原理,归结过程专家系统:建立专家系统的方法及工具 # P3 ~' l1 q' s% t/ ^/ Z- ?5 V+ K" l3 s* q( }; T8 p( D1 A
(2)联接主义(神经网络学派):1988年美国权威机构指出:数据库,网络发展呈直线上升,神经网络可能是解决人工智能的唯一途径。 5 b7 h: `5 y6 e Y3 N- t
# b4 ?9 y2 x6 X$ Y0 i; K( d& R/ A我想对于人工智能的学习,大家一定不要像学数学似的及一些现成的结论,要学会分析问题,最好能利用程序设计实现,这里推荐给大家ACM最佳博士论文奖获得者涂晓媛博士的著作《人工鱼-计算机动画的人工生命方法》(清华大学出版社)。搞人工生命的同学不会不知道国际知名的涂氏父女吧。关于人工智能的书当然首选《Artificial Intelligence A New Synthesis》Nils J.Nilsson.鼻祖嘛! . k2 V" {6 ]8 [) x* [6 |, D
$ r' N" X B% ~3 m! C9 @* x0 m8 T# O. L! L, ^/ I% I
关于网络安全我也想在这里说两句,随着计算机技术的发展,整个社会的信息化水平突飞猛进,计算机网络技术日新月异,网络成了当即社会各个工作领域不可缺少的组成部分,只要有网络存在,网络安全问题就是一个必须解决好的问题,学习网络安全不是简简单单的收集一些黑客工具黑一黑别人的网站,而是要学习他的数学原理,实现原理,搞清底层工作机制,这样才能解决大部分的现有问题和新出现的安全问题。 3 \7 e# o ]2 c: q1 ~4 d0 @2 h; d5 E) q4 F* u: q) H) p
) s( W7 r6 |$ q0 a; R+ v
关于计算机科学的一些边缘科学我想谈一谈软件工程技术,对于一个企业,推出软件是不是就是几个程序员坐在一起,你写一段程序,我写一段程序呢?显然不是。软件工程是典型的计算机科学和数学,管理科学,心理学,社会学等学科的综合。它使我们这些搞理论和技术的人进入了一个社会。你所要考虑的不仅仅是程序的优劣,更应该考虑程序与软件的区别,软件与软件产品的区别,软件软件产品的市场前景,如何去更好的与人交流。这方面我还在学习阶段,以后这方面再写文章吧,先推荐给大家几本书:畅销20年不衰的《人月神话》(清华大学中文版,中国电力出版社影印版),《软件工程-实践者研究的方法》(机械工业出版社译本),《人件》(据说每一位微软公司的部门经理都读过这本书,推荐老总们和想当老总的同学都看看,了解一下什么是软件企业中的人)以及微软公司的《软件开发的科学与艺术》和《软件企业的管理与文化》(研究软件企业的制胜之道当然要研究微软的成功经验了!) " q0 @$ |- R* |3 t7 ~- u" y/ S9 ]
/ m# }3 S# g$ q
) t' K$ ~6 b8 g# }3 J
关于计算机技术的学习我想是这样的:学校开设的任何一门科学都有其滞后性,不要总认为自己掌握的某门技术就已经是天下无敌手了,虽然现在Java,VB,C,C++用的都很多,怎能保证没有被淘汰的一天,我想.NET平台的诞生和X#语言的初见端倪完全可以说明问题。换言之,在我们掌握一门新技术的同时就又有更新的技术产生,身为当代的大学生应当有紧跟科学发展的素质。举个例子,就像有些同学总说,我做网页设计就喜欢直接写html,不愿意用什么Frontpage,Dreamweaver。能用语言写网页固然很好,但有高效的手段你为什么不使呢?仅仅是为了显示自己的水平高,unique? 我看真正水平高的是能够以最快的速度接受新事物的人。高级程序设计语言的发展日新月异,今后的程序设计就像人们在说话一样,我想大家从xml中应是有所体会了。难道我们真就写个什么都要用汇编,以显示自己的水平高,真是这样倒不如直接用机器语言写算了。反过来说,想要以最快的速度接受并利用新技术关键还是在于你对计算机科学地把握程度。 # T Y5 T* v' k) _% ^! g 2 w3 Z& g% Y, f7 K0 n7 r: r $ z' Q: [5 C( \! ^# s计算机技术牵扯的内容更为广泛些,一项一项说恐怕没个一年半载也说不清。我只想提醒大家的还是那句话,技术与科学是不能分家的,学好了科学同时搞技术,这才是上上策。犹如英语,原先人们与老外交流必须要个翻译,现在满马路的人都会说英语。就连21世纪英语演讲比赛的冠军都轮不到英语系的学生了。计算机也是一样的,我们必须面对的一个现实就是:计算机真就只是一个工具,如果不具备其它方面的素养,计算机系的学生虽然不能说找不到工作,不过总有一天当其他专业性人才掌握了计算机技术后将比我们出色许多。原因就在于计算机解决的大都是实际问题,实际问题的知识却是我们少有的。单一的计算机技术没有立足之地。 u# u/ U7 h; H. R3 d8 o1 E5 C) b8 }# w3 y: M& Y3 R0 b
# w! ^- x8 b! U% Y6 X
我想是时候指出:学习每一个课程之前,都要先搞清这一课程的学习目的。这一学科的应用领域。据我自身所了解到的同龄同学和低年级的同学的学习状况:他们之中很少有人知道学一个学科的学习目的,期末考试结束了也不知道学这科做什么用。这就失去了读计算机科学的意义。当然这与现存的教育思想不能说一点关系都没有。 + C# T p. ~- P! D1 x! G: P
, V6 q! a8 O# I3 z* u! F
$ P4 A9 W6 R$ {8 G) w总的来说,从教育角度来讲,国内高校的课程安排不是很合理,强调理论,又不愿意在理论上深入教育,无力接受新技术,想避开新技术又无法避得一干二净。我觉得关键问题就是国内的高校难于突破现状,条条框框限制着怎么求发展。我们虽然认识得到国外教育的优越性,但为什么迟迟不能采取行动?哪怕是去粗取精的取那么一点点。我们需要改变。从我们自身角度来讲,多数人4年下来既没有学习计算机科学的学术水平,也没有学习计算机技术的那种韧劲。在我刚上大一时,我的计算机科学入门导师,淮北煤炭师范学院王爱平教授曾经对我说过这样一番话:“当你选择了计算机这一门科学,就意味着你踏上了一条不归路,就意味着你一生都要为之奋斗……你的身后是悬崖,只有向前走,不能往后退。” 0 n: @7 C' y9 h6 p, Z
+ _0 Y5 ]3 B" ?4 U . G2 V' z! i- h) \- U有些同学说按照这样学习学的东西太多,有的未见得有用,我想打个形象的比方:学校学出来的人都是一个球体,方方面面的知识都应具备。可是社会上需要球体的地方很少,反而需要的是砖和瓦,即精通某一行的人才。但是对于同等体积的物体,用球体来改造是最方便最省事的。学校的学生很多,为了能够使更多的学生来适应这个社会,学校也就不得以把所有的学生都打造成一个球体,然后让社会对这些学生进行再加工,成为真正能够有用的人才。即使你非常清楚自己的将来要干什么,并且非常下定决心要走自己的路,这一步你也必须走,世界是在不断变化的,你不能预料未来。想清楚,努力去干吧! : K/ \* f; B" S- A8 t7 k2 s # }; _( h# p4 b$ v; L0 w * _5 C4 Y5 L/ {4 y8 a/ o必须结束这篇“胡侃”了,再侃下去非我力所能及。其实计算机还有很多基础课都值得一侃。怎奈我造诣有限,不敢再让内行耻笑。最后声明:这些只针对本科阶段的学习。即使把这些全弄通了,前面的路还长,计算机科学需要我们为之奋斗......学习计算机科学需要韧性,更需要创新,需要激情。深刻学习理论知识,勇于接受新技术的挑战,这才是我们这一代人应具有的素质。最后送大家一句话“Wake up every day with a feeling of passion for the difference technology will make in people's life!”。 ( ]" `! w, X8 A$ m3 X! x$ M
& f, T" l$ @. y
在我大一时无意中找到了南京大学网友sir的帖子“胡侃(理论)计算机学习”,这个帖子对我的大学学习起了至关重要的作用,写这份材料时也引用了其中的不少观点。再有就是每次和司徒彦南兄的交谈,都能从中学到很多东西,在这份材料中也有很多体现。以及每次在放飞技术网上每位同学诚恳的留言。这份材料是我原来在实验学院进行新生入学教育的讲稿之一,原有基础上改进了其中我认为不太合适的理论,修正了一些观点,在推荐教材方面结合我的学习情况有了较大改变。值得一提的是增加了一些计算机理论的内容,计算机技术的内容结合我国的教学情况和我们学习的实际情况进行了重写。这里所作的工作也只是将各位学长和同学们的学习体会以及我在学习计算机科学时的所思所想汇总在一起写了下来,很不成熟。目的就是希望能够给一些刚入学或者是学习计算机科学还没有入门的同学以一些建议。不期能够起到多大的作用,但求能为同学们的学习计算机科学与技术带来微薄的帮助。希望大家批评指正。 </TD></TR></TABLE>