计算机学习三宗罪之冒进
上文说道木鹏飞声明数学是计算机专业的基础,因此计算机专业学生必须学好数学,但木鸿飞却认为计算机系学生的数学知识一般不如数学系的,如何比数学系学生更学好计算机课程呢?

“这个问题问的好,所以我们的计算机专业的第二类基础课程就是计算机专业课程。”哥哥说道。

“呵呵,计算机专业的基础课程就是计算机专业课程,”木鸿飞重复哥哥的话,“比较啊拗口啊。”

“其他专业可能只开编程课,比如Pascal编、Matlib编程、C语言编程,但不会开设很多专业课程,比如《数据结构》、《操作系统》、《编译原理》、《汇编语言》、《数据库原理》等等。”看着木鸿飞又被一堆名词搞晕了,哥哥连忙解释:“虽然不学这些,也可以编程。但是如果想了解编程的原理,或者编写更快、更好、更稳定的程序,就必须要学习它们了。比如说数据结构,它关系到如何设计更优化的程序。同样一个程序,大家都会设计,但精通数据结构的人编出来的性能就要优化很多。这就是优势,计算机专业学生的优势。”

“其实计算机专业的优势主要体现在上下两头:下头是基础扎实,也就是学习了大量的专业课程;上头就是专业深入,主要用于硕士和博士,他们研究和学习了很多外专业并不涉及的计算机知识。不过专业深入对你们本科生来说不适合,所以计算机专业普通大学生欲比非计算机专业大学生更有优势,或者欲在同专业学生中脱颖而出,就必须精通专业基础!只可惜啊,很多计算机专业大学生没有看到这一点,一味的抨击学校开设的课程过于老土,一味的追赶时髦,用一些所谓时髦的工具,编一些所谓时髦的程序,把专业基础丢在一边置之不理!用一句时髦的话说,计算机专业学习在专业学习时,很容易犯三宗罪。”哥哥说道。

“哦,是哪三宗罪,说来听听。”木鸿飞急切的问道。

“第一宗罪,冒进,具体来讲就是一位追求‘时髦’知识,忽略专业基础知识的学习。大家都知道,现在是知识大爆炸年代,尤其是咱们计算机专业,知识更新速度特别快。昨天还使用5存盘,今天就改为3存盘,明天将流行光盘。知识应用不断的变化,所以很多同学就坐不住了,总以为学校里面开设的课程OUT了,于是拼命的追赶潮流。比如还不知《面向对象程序设计》为何物,就到处看MFC设计;把《数据结构》《计算机组成原理》等课程抛到一边,直接设计某某系统;《汇编语言》和《密码学》不学,就钻营***与破解。今天流行VC就去学习VC,明天听说Java有潜力就去看Java,后天打听到Windows编程有趣又改读Windows编程。追来追去,最终学校的课程没有学,基础没打牢,哪些所谓时髦的东西自然也读不懂,结果是什么都没有学到。”

“其实,造成这种现象的原因我们也知道,就是大家误以为学校开始的课程过时了,怕学习那些东西找不到工作,而学习那些流行的东西将来毕业时就可以轻松找到工作了。但是这种想法是严重错误的!”

“首先,空中楼阁的道理大家都懂,没有‘老土’的基础,如何能够学习‘时髦’的知识。其次,‘时髦’是发展变化的,今天时髦的东西,毕业时说不定早就打入冷宫没人用了。最后,即使你学会了某门‘时髦’的知识,但你能保证以后工作的单位就需要这门知识吗?也许你工作的单位根本就不涉及这个方向!”

“其实,整个大学阶段都应该是打基础,至于所谓的时髦专业知识,等毕业后再有的放矢去学习,会好得多。因为那些时髦的东西实在是太多了,大学阶段完全没有必要,也不可能学会和学好。不相信?举个例子,由于软件开发并不仅仅懂得编程就可以做好,还必须要懂得其他的业务知识。比如在专门为银行做软件的公司里干活,就必须要懂银行业务;在专门设计医疗软件的公司打工,就必须要了解医疗流程;如果设计炒股软件,就必须略知股票知识。虽然不需要你特别‘精通’成为‘专家’,但基本概念是要知道的,基本流程是要了解的。那么请问诸位计算机专业的同学,你在大学期间,是选择学习银行业务呢?还是医疗流程呢?或者股票知识呢?三样都学,估计没有这个精力。退一万步,姑且你好不容易呜呼哀哉学会了,也许毕业后你进入了一个专门做超市销售软件的公司,前面辛辛苦苦学的时髦知识都用不上。”

“再比如说,很多单位都有自己的业务范围和操作规范,也许会有专门在单位内部使用的规划库。例如A公司有自己的编程工具和函数库,它们是A公司上岗的必备知识,所有员工必须掌握。但问题是,这些所谓的知识仅仅在一个公司中有效,换一个单位则没有丝毫作用,请问:在大学期间提前学习这些知识有用吗?”

“但是大学课程实在是太拿不出手了,找工作时应该没有竞争力吧?”木鸿飞问道。

“你们以为应届生毕业笔试时,试题是什么?招聘单位会问考察很时髦很专业的问题吗?你们以为应届生毕业面试时,对方的期望值是什么?面试考官会希望毕业生曾经领衔开发某某大型项目吗?你们以为应届生刚刚参加工作时,用人单位就期望你们马上上手做业务,成为单位的骨干吗?”

“其实应届生有些太高估自己了,招聘单位一般都会有两套试题分别针对往届生和应届生,前者涉及很多专业知识和开发技巧,但后者一般都是数据结构试题!而且招聘单位从来就没有期望应届生是某某项目组长,他们看重是否在项目组里干过,是否了解一些项目开发的基本情况,至于项目组长,他们会作为人才引进,而不是从应届生中招聘。还有,单位招聘应届生后都会培养,都需要进行专门的业务培训,没有人指望应届生能立刻成为业务骨干。当然单位都希望能够缩短成长时间,而对于不必备成长指数的应届生也会无情的抛弃,所以与其在大学期间学习所谓的‘时髦’知识,不如扎实掌握专业基础,以便于在参加工作的后能够快速的充电,缩短成长时间,尽快成为业务骨干。”

“所以专业基础是要掌握的,所以学校开的课程是要学的!不要以为老师都是傻瓜,学校开设课程自然有他的道理,你想反驳也请先学懂了再反驳。至于担心毕业时没有竞争力,我有一个好办法。”哥哥说道。

“哦,是什么,快点说罗。”木鸿飞连忙问道。

“呵呵,如果你发三年时间打牢基础,根本不用担心找工作时会OUT!等大四的时候再到书店里去看,什么类型的书多就买什么,那些都是时下最流行的东西,发一年时间看看就可以了……”哥哥说道。

“一年时间会不会来不及学习。”木鸿飞又插嘴。

“时间足够了!事实上,只要你基础知识打扎实了,学习这些新东西很快的,他们就是在基础上的一些应用而已。比如说我们系里有个老师叫郑金野,以前从来没有研究多媒体,但是多媒体一出来,他马上就明白了,就是一些算法加一些特殊的设定和应用,很容易的。哪些叫嚣学校误导他们没有叫流行知识的学生,恰恰专业基础很不扎实。”哥哥说道。

“打牢基础真的能够快速学习新知识吗?新知识中真的都是基础应用吗?”木鸿飞还是将信将疑。

“不相信?你没有经历这一切,还没有切身体会,等以后你就会明白了。”哥哥也不继续说服。

“哦,那不说这个话题,讲讲第二宗罪吧。”木鸿飞说道。

欲知第二宗罪如何,且听下回分解。

计算机学习三宗罪之浮躁

上文说道木鹏飞声明计算机学习的第一宗罪是不学习基础课程,并提示大一至大三学习学校开设的专业课程,可待大四毕业时再恶补时髦知识的观点。木鸿飞暂时不能理解,就继续咨询余下两宗罪。

“第二宗罪就是浮躁。表现在学习知识就是浮于表面,没有深入理解专业知识。表现在编程上就是只想编写一些所谓漂亮的、能够拿得出手的程序,而对于一些底层的支持程序置之不理。”

“有的同学喜欢编写一些漂亮的程序,比如设计漂亮的网页,使用某某工具开发某某‘大型’系统等等,当然这都是人之常情。正如鲁迅先生所说,文章写出来总是希望拥有更多的读者,除非是写给恋人的。程序编出来,总是希望拥有更多用户,除非是专门为爱人开发的。但问题是,只编写这类程序是不够的,是有缺陷的。”

“其一,这些所谓的程序,往往只需要对知识应用,并不需要刨根究底研究知识的本身,甚至有很多加入了很多相当专业的内容,并不适合于初学者学习。比如VC中的MFC就是一个典型的误导初学者的工具。利用MFC可以很方便的编写出DIAG界面程序或者视图文档程序,从表面上看风光无限,但对初学者却祸害无穷!假如使用VC学习C++,大部分时间将用于消息的处理,控件的处理,还要阅读大量的视图文档结构类库说明,这些操作将耗费了你大量的时间,得不偿失。而且VC++的大部分编程是在某些位置插入代码,至于C++部分系统自动实现了,留给你的是纯C语言操作。同学请注意,你学习的是C++,不是VC类库,也不是VC操作!”

“其二,编写这些程序,往往伴随大量的交互式界面设计。事实上,编程有个二八原则,即编写80%的核心内容将耗费你20%的时间,而另外20%的功能将耗费你80%的时间。不幸的是,那些漂亮的给人风光无限的东东恰好就是耗费80%时间的20%功能,得不偿失!”

“那我们到底该用什么工具,编写什么程序呢?”木鸿飞糊涂了。

“什么工具都可以,只要不涉及太多的花边操作就行。至于练习用的程序,最好是一些基础的、底层的实现,不要有太多花俏的图像和交互式操作。当然也可以设计一些简单的具备图形界面的小游戏,但此时你应该将精力更多注重于游戏本身的设计,而不是游戏的画面风格和动画效果上。”

“比如说数据结构中学习了有关链表、队列和栈等内容,如果你使用VC编程,你会发现VC提供了全部的数据结构,无需自己再去设计。一般的同学会大呼‘数据结构’无用论,认为很多语言工具都提供这些结构,何必自己再去设计一次!其实,这就是浮躁的表现!如果你处于工作中,可以名正言顺的使用这些提供的数据结构。但若还是学习,就不可以,请记住:学生编程序的目的是为了学习,而不是给谁谁谁使用!所以应该自力更生,亲自设计这些数据结构,在以后的程序中可以继续调用自己的设计,以求达到检测的效果。”

“再举个例子,这几天你编程序时应该用到了内存分配函数,就是那个mallocfree。一般人直接调用就行了,但是计算机专业的学生不应该止步于此,而应该思考这两个函数的系统实现方法,并且编程序模拟内存分配和释放。设计这样的程序,不但可以增强动手能力,还可以加深对计算机知识的理解,一举多得,何乐而不为。”

“但是很多同学不愿意这么做,因为设计自己的内存管理程序是一个相当枯燥的过程,不但没有任何趣味性,而且以后也不大可能会直接应用。花费大量的时间和精力去设计这样一个似乎毫无好处的程序,值得吗?青春男女,欢乐校园,载歌载舞,恋爱谈情。也许别的同学设计了漂亮界面正在享受荣誉的光环,也许有的同学编写了音乐程序正在向心仪的女孩表露心声,而你却在黑漆漆的窗口中苦苦修行,甚至连修行的结果也不足为外人道也。此情此景,你还耐得住寂寞吗?”

“耐不住也要耐!编写一些看上去很风光的应用程序实际上意义不大,毕竟你编程所使用的工具和库都是别人提供的的,甚至一些关键的控件也是第三方的,如果只知其然不知其所以然,你将永远被别人抢着鼻子走!别人提供的控件指东,你就不能朝西,别人提供的控件走路,你就不能跳跃,如果别人掐你脖子,不提供控件或库,你就只有干瞪眼了。所以要耐得住寂寞,沉得下心,别人不给控件,咱就原创,自力更生,艰苦创业,自己设计!”

“计算机界有一个35岁问题流程很广,就是说程序员最多只能做到35岁,然后就会被后来的新人淘汰掉。所以很多学生特别着急,担心10年之后会失业。其实这是瞎担心!

“对于浮躁的学生,由于他们没有学习到深层次有内涵的内容,往往流行一过,就只有失业或者转行了,根本不用等到35岁就有可能失业。所以计算机学习不可浮躁,只有用心学习,深挖知识,才能基础扎实,才可以深入理解计算机专业知识,从而达到‘他强由他强,清风拂山岗;他横由他横,明月照大江’的境界,万变不离其宗,管它什么流行,都能很容易的学会,很快的掌握。还有些同学,能够看穿程序的本质,既而由代码编写升级为系统设计,再升为系统分析,甚至完成从程序员到管理者的转变,35岁对于他们来说根本不是终结,而是辉煌的开始!”

“就拿数据库编程工具PowerBuilder举个例子吧,假设有两个学生,都对这个工具非常了解,对它的每一个系统函数都了如指掌,但是其中一个只会使用这个工具,而另一个却吃透了《数据库原理》一书。那么如果有一天,当PowerBuilder退出历史的舞台时(编者注:目前已经退出很久了),前者也只能无奈的退出,因为他不懂数据库原理,再从头学习一个全新的数据库编程工具,必定需要发费大量的时间,困难重重,。而后者则不一样,借助于数据库的相通性,他可以很快在新的数据库编程工具中找到熟悉的内容,减少新内容范围,加快理解,缩短学习时间,从而快速上手。这就是不浮躁、沉下心去学习编程的好处。”

“前不久有一个学生跟我说,他编了一个VCD播放器,请我过去show。我当时想,这是件了不起的事情啊!于是就去了。一看才知道,原来他只是使用Delphi编了一个界面,在上面设置了几个按钮,至于VCD播放的功能,全是一个第三方控件完成的!就这样还自称编了VCD播放器,真是可笑!不思自己弄懂,而到处寻找第三方支持,还到处卖弄,自以为是,就是浮躁的典型表现!”

“其实对我们来说,编程程序具有三重境界。同样以VCD播放器为例,第一重境界就如同上面的同学,核心技术使用别人的,自己只是做了一个外壳!第二重境界则学习VCD编码技术,亲自设计VCD解码程序,独立完成全部解码程序。第三重境界者则不光学习VCD编码技术,还分析其优缺点,并提出自己的视频压缩算法。你想成为第几重境界?”

“我要成为第三重境界。”木鸿飞大声说到。

“呵呵,有志气。第一重显然是不可取的,太丢人了。但是第三重吗,也太难了,只适合少数人,一般是研究生们考虑的内容,所以对于大部分本科学生应该以第二重境界为目标。当然以第三重为目标也没有错,但前提是要考上研究生!”

“我一定要考研究生!不过哥哥,你还是接着讲第三宗罪吧。”木鸿飞继续说道。

预知第三宗罪如何,且听下回分解。

计算机学习三宗罪之偏科

上文说道木鹏飞声明计算机学习的第二宗罪是学习浮躁,只流于表面而不肯深入底层学习,并指出了编程的三重境界。木鸿飞则继续咨询第三宗罪。

“第三宗罪就是偏科。具体来讲有两种表现,一是动手编程和理论学习二选一,二是专业知识偏好严重,喜欢一门,不喜欢另一门。”

“纵观计算机专业的学生,大概可以分为四类:喜欢编程也喜欢理论的,只喜欢编程不喜欢理论的,不喜欢编程只喜欢理论的,和不喜欢编程也不喜欢理论的。呵呵,很拗口是吧,姑且不讨论第一种和最后一种,只谈谈中间两种:只喜欢编程的和只喜欢理论的。”

“有的同学喜欢编程,经常动手实践,今天编个程序,明天搞个系统,老师要求课程设计总是第一个交,而且设计得真是一个好字了得!……

“我就要做这样的人!”木鸿飞打断哥哥的话。

“但是,相当令人想不通的是,他们虽然课程设计做的好,不过考试成绩通常却只有60多一点,要不就是在60分边缘徘徊。老师有时看在课程设计的面子上睁只眼,闭只眼给个及格了事。更有甚者只有3040分,令老师想放水也不知如何放起。”哥哥无比的惋惜道。

“这个我听说了,这个我听说了!”木鸿飞大声说道:“60分万岁,61分浪费。呵呵,据前几届的老乡说,大学的考试根本就考不出真实水平,有的动手能力很强的人考不及格,而很多完全不编程的人却可以考高分,属于动手能力与理论知识严重脱节!”

“这种思想严重错误!”哥哥连忙说道:“虽然目前的考试形式存在一定局限性,考试得了高分,并不能代表真正掌握了知识。但是有一点是可以确定的,那就是考试没有及格的,肯定没有真正学懂!”

“举个例子,大三有个学生,用foxpro(编者注:以前的一种数据库及数据库编程语言)编了很多程序,是大家公认的数据库编程高手,但是数据库考试就是不及格,实在是不应该。还有《数据结构》,很多所谓编程高手的数据结构都没有考好,为什么呢?我曾经专门查阅过他们的试卷,发现情况很类似:一些编程时可能使用过的,或者相当简单的算法,比如链表、队列和栈的实现,都能得分;但是一些概念和程序中不易接触的算法,则失分严重,比如树、图的概念,图的各种算法,查询和排序算法等等。这充分说明他们在学习计算机专业知识全凭自己的喜好和编程的需要,如果程序涉及则去学习,否则一问三不知!其实,能上经典教科书的内容都是经典,都是需要熟练掌握了。而同学们由于自身的局限性不可能马上就在编程中应用全部的内容,但在将来的工作和学习中迟早会见面。与其那时在重新学习,不如现在就掌握。书到用时方恨少,倘若真随性而学习,待到工作中急需却不知道时,已经迟了!”

“以上同学可以称为编程派,与之对应的就是理论派,这类学生只看书本,背算法,从不动手编程。有的甚至连编程工具是什么都不知道,比如说虽然C语言特别的普遍,但是咱们系里暂时没有开设C语言课,所以很多理论派的学生肯定没有自学C语言,他们估计连Main函数都没有听说!”

“理论派认为是理论知识推动计算机前进的关键,而编程仅仅是工程应用而已,他们常常以某某知名计算机教授上课不会用PPT为例来证实自己。他们或者瞧不起编程,认为输入代码是很简单的事情,给他们点时间,肯定能做得更好,或者特别惧怕编程,不敢动手实践。他们书本知识学的好,考试一般能打高分,论述某个程序设计话题时往往够口若悬河,设计思路一环套一环,仿佛特别清晰。但是一旦动手操作就傻眼了,不知道从何入手,倘若硬着头皮编程,才发现编码的道路到处是障碍。所以这种人在课程设计时常常与别人合组,尤其是与编程派合组,美其名曰‘团队合作’,其实就是别人编程他署名。”

“理论派也是不正确的!我们承认理论知识对推动计算机的发展相当有效,很多论文都是理论知识。但问题是,你一个小小的本科生就能达到那种推动计算机发展的理论高度?本科所知道的理论,都是基础的、经典的、而且并不高深的,引导时代潮流子言似乎为之过早。当然我们不排除有极个别才华横溢的大学生,以本科之身就知晓了博士都不了解的知识,但毕竟是极少数,不具备推广价值。所以咱们本科生暂时不要梦想能够发明什么大理论,还是老老实实的走‘理论联系实践’这一条有前途的路吧!所以……

“所以,理论学习和编程实践两手都要抓,两手都要硬!”木鸿飞插嘴道,“但是怎么体现对二者都重视呢?”

“很简单,一边做好课程设计,成为同学眼中的公认的编程高手,一边在计算机专业考试上拿高分,就可以了!”

“哦。动手编程和理论偏科,我明白了。专业知识偏科也是什么?”木鸿飞问道。

“专业偏科就是喜欢一门知识,不喜欢另一门知识。比如经常有学生说:我特别喜欢C++,毕业后找C++的工作,所以不学Java。或者说:我喜欢网络,不喜欢数据库,所以不学数据库,将来只做网络工作。”

“这样不行吗?专心学习一门知识,以后成为这方面的专家,将来找工作也方便些。”木鸿飞觉得似乎正确。

“三个原因决定了这样不行。”哥哥开始反驳,“第一,专注于某一个专业的确很重要,比如硕士、博士都是只研究一个方向的。但是请注意,他们都是研究生,而你是本科生,请大家不要太高估自己了,目前大家还远远没有到达专注某一个狭窄区域的时候。第二,大部分学生将来从事什么工作还是个未知数,也许你的工作恰恰就需要你不喜欢的学科。第三,计算机各门知识之间都是相互关联的,一个项目往往涉及很多们专业课程,比如既需要Java的简洁,又需要C语言的效率,既有windows设计,又有Unix开发,既设计网络,又操作数据库,所以知晓计算机各个专业知识,成为所谓的计算机复合型人才,对将来的工作大有裨益。”

“大学四年学习这么多课程,会不会精力不够呢?”木鸿飞又提出一个疑问。

“足够了!”哥哥不同意,“大学学习的是些基础和应用,并没有涉及相当高深的专业技术。而且总共才十几门专业课,平均下来一个学期只有几门,所以完全有精力和时间!”

“呵呵,这么说来应该有时间。”木鸿飞不好意思的挠挠头,然后总结道:“你讲这三宗罪,我总结一下,好像都围绕计算机专业基础课程。第一宗罪号召我们必须要学专业基础课程,第二宗罪告诉我们如何学习专业基础课程,第三宗罪则要求我们必须学习所有的专业基础课程,不得遗漏。哥哥,你说是不是。”

“完全正确,加十分!顺便在讲一句,对于计算机专业来说,学好外语也是相当重要!”哥哥说道。

“哦,为什么?”木鸿飞问道。

“其实这是由当前国际大环境造成的。首先现在各行业都需要外语,外国的东西还是比较吃香的,目前海龟还是比土鳖有地位。其次我们不得不承认,发达国家的计算机真的比我国要进步,所以为了看到他们的文档,你必须懂得计算机。”

“看翻译的不行吗?”木鸿飞见缝插针问道。

“翻译的东西总会慢一些,而且好多文档也没有人翻译,另外由于翻译的内容是别人的理解,甚至有部分还可能是错误的,所以不如自己理解的好。”哥哥接着说:“找工作时,如果既懂计算机又懂外语,哪怕精通程度稍微低一点,也要比只精通一门的竞争优势大得多,11远远大于2。而且精通外语,说不定能够出国工作,虽然这么说有的崇洋媚外,但增加见识是真实的。”

“这么说,我还得努力学习英语啦。”木鸿飞说。

“对啊,所以很多学校要求毕业必须过四级呢!当然,也可以考虑学习一下日语。”哥哥说道。

“日语?你的米西米西大大的约西?为什么学日语,有什么好处?”木鸿飞问。

“好处多着呢。首先,对日软件外包比较火热,比如上海就有多计算机相关职位需要日语3级以上水平,懂点日语后再找计算机工作要比单纯懂计算机容易的多。其次,学习日语入门相当简单,过一个日语3级不是什么困难的事情。”

“哦,既然日语简单,为什么不学高深一点,直接过个日语6级?”木鸿飞问道。

“呵呵,日语是1级最难,没有6级。再说你也别把它想象的太简单了,日语入门容易,精通很难。有人这么评价日语:笑着进去,哭着出来。”哥哥说道。

“怎么评价英语呢?”木鸿飞又问。

“哭着进去,笑着出来。”哥哥回答,“其实学英语和学日语就好有一比,你应该看了武侠小说,它们就如同少林和魔教,进入少林学习功夫慢,大部分人武功平平,但是如果能够坚持下来,肯定有收获,绝顶高手一定出自少林。相反进入魔教这学习功夫可以速成,大部分人的功夫在江湖上处于中上水平,但是想再进一步深造就很困难了,所以魔教一般鲜有绝顶高手。”

“我还是入少林吧。我要成为绝顶高手!”木鸿飞决定学英语。

今天,哥哥详细的告诫了木鸿飞一番,在网络尚未普及的时代,得到计算机学习方法的机会少之又少,木鸿飞在正式学习前得到了一次洗礼。这些经验都是过来人的肺腑之言。

转载自

http://zhuyunxiang.blog.51cto.com/