5、论道(三)计算机学习三宗罪之浮躁
上文说道木鹏飞声明计算机学习的第一宗罪是不学习基础课程,并提示大一至大三学习学校开设的专业课程,可待大四毕业时再恶补时髦知识的观点。木鸿飞暂时不能理解,就继续咨询余下两宗罪。
“第二宗罪就是浮躁。表现在学习知识就是浮于表面,没有深入理解专业知识。表现在编程上就是只想编写一些所谓漂亮的、能够拿得出手的程序,而对于一些底层的支持程序置之不理。”
“有的同学喜欢编写一些漂亮的程序,比如设计漂亮的网页,使用某某工具开发某某‘大型’系统等等,当然这都是人之常情。正如鲁迅先生所说,文章写出来总是希望拥有更多的读者,除非是写给恋人的。程序编出来,总是希望拥有更多用户,除非是专门为爱人开发的。但问题是,只编写这类程序是不够的,是有缺陷的。”
“其一,这些所谓的程序,往往只需要对知识应用,并不需要刨根究底研究知识的本身,甚至有很多加入了很多相当专业的内容,并不适合于初学者学习。比如VC中的MFC就是一个典型的误导初学者的工具。利用MFC可以很方便的编写出DIAG界面程序或者视图文档程序,从表面上看风光无限,但对初学者却祸害无穷!假如使用VC学习C++,大部分时间将用于消息的处理,控件的处理,还要阅读大量的视图文档结构类库说明,这些操作将耗费了你大量的时间,得不偿失。而且VC++的大部分编程是在某些位置插入代码,至于C++部分系统自动实现了,留给你的是纯C语言操作。同学请注意,你学习的是C++,不是VC类库,也不是VC操作!”
“其二,编写这些程序,往往伴随大量的交互式界面设计。事实上,编程有个二八原则,即编写80%的核心内容将耗费你20%的时间,而另外20%的功能将耗费你80%的时间。不幸的是,那些漂亮的给人风光无限的东东恰好就是耗费80%时间的20%功能,得不偿失!”
“那我们到底该用什么工具,编写什么程序呢?”木鸿飞糊涂了。
“什么工具都可以,只要不涉及太多的花边操作就行。至于练习用的程序,最好是一些基础的、底层的实现,不要有太多花俏的图像和交互式操作。当然也可以设计一些简单的具备图形界面的小游戏,但此时你应该将精力更多注重于游戏本身的设计,而不是游戏的画面风格和动画效果上。”
“比如说数据结构中学习了有关链表、队列和栈等内容,如果你使用VC编程,你会发现VC提供了全部的数据结构,无需自己再去设计。一般的同学会大呼‘数据结构’无用论,认为很多语言工具都提供这些结构,何必自己再去设计一次!其实,这就是浮躁的表现!如果你处于工作中,可以名正言顺的使用这些提供的数据结构。但若还是学习,就不可以,请记住:学生编程序的目的是为了学习,而不是给谁谁谁使用!所以应该自力更生,亲自设计这些数据结构,在以后的程序中可以继续调用自己的设计,以求达到检测的效果。”
“再举个例子,这几天你编程序时应该用到了内存分配函数,就是那个malloc和free。一般人直接调用就行了,但是计算机专业的学生不应该止步于此,而应该思考这两个函数的系统实现方法,并且编程序模拟内存分配和释放。设计这样的程序,不但可以增强动手能力,还可以加深对计算机知识的理解,一举多得,何乐而不为。”
“但是很多同学不愿意这么做,因为设计自己的内存管理程序是一个相当枯燥的过程,不但没有任何趣味性,而且以后也不大可能会直接应用。花费大量的时间和精力去设计这样一个似乎毫无好处的程序,值得吗?青春男女,欢乐校园,载歌载舞,恋爱谈情。也许别的同学设计了漂亮界面正在享受荣誉的光环,也许有的同学编写了音乐程序正在向心仪的女孩表露心声,而你却在黑漆漆的窗口中苦苦修行,甚至连修行的结果也不足为外人道也。此情此景,你还耐得住寂寞吗?”
“耐不住也要耐!编写一些看上去很风光的应用程序实际上意义不大,毕竟你编程所使用的工具和库都是别人提供的的,甚至一些关键的控件也是第三方的,如果只知其然不知其所以然,你将永远被别人抢着鼻子走!别人提供的控件指东,你就不能朝西,别人提供的控件走路,你就不能跳跃,如果别人掐你脖子,不提供控件或库,你就只有干瞪眼了。所以要耐得住寂寞,沉得下心,别人不给控件,咱就原创,自力更生,艰苦创业,自己设计!”
“计算机界有一个35岁问题流程很广,就是说程序员最多只能做到35岁,然后就会被后来的新人淘汰掉。所以很多学生特别着急,担心10年之后会失业。其实这是瞎担心!
“对于浮躁的学生,由于他们没有学习到深层次有内涵的内容,往往流行一过,就只有失业或者转行了,根本不用等到35岁就有可能失业。所以计算机学习不可浮躁,只有用心学习,深挖知识,才能基础扎实,才可以深入理解计算机专业知识,从而达到‘他强由他强,清风拂山岗;他横由他横,明月照大江’的境界,万变不离其宗,管它什么流行,都能很容易的学会,很快的掌握。还有些同学,能够看穿程序的本质,既而由代码编写升级为系统设计,再升为系统分析,甚至完成从程序员到管理者的转变,35岁对于他们来说根本不是终结,而是辉煌的开始!”
“就拿数据库编程工具PowerBuilder举个例子吧,假设有两个学生,都对这个工具非常了解,对它的每一个系统函数都了如指掌,但是其中一个只会使用这个工具,而另一个却吃透了《数据库原理》一书。那么如果有一天,当PowerBuilder退出历史的舞台时(编者注:目前已经退出很久了),前者也只能无奈的退出,因为他不懂数据库原理,再从头学习一个全新的数据库编程工具,必定需要发费大量的时间,困难重重,。而后者则不一样,借助于数据库的相通性,他可以很快在新的数据库编程工具中找到熟悉的内容,减少新内容范围,加快理解,缩短学习时间,从而快速上手。这就是不浮躁、沉下心去学习编程的好处。”
“前不久有一个学生跟我说,他编了一个VCD播放器,请我过去show。我当时想,这是件了不起的事情啊!于是就去了。一看才知道,原来他只是使用Delphi编了一个界面,在上面设置了几个按钮,至于VCD播放的功能,全是一个第三方控件完成的!就这样还自称编了VCD播放器,真是可笑!不思自己弄懂,而到处寻找第三方支持,还到处卖弄,自以为是,就是浮躁的典型表现!”
“其实对我们来说,编程程序具有三重境界。同样以VCD播放器为例,第一重境界就如同上面的同学,核心技术使用别人的,自己只是做了一个外壳!第二重境界则学习VCD编码技术,亲自设计VCD解码程序,独立完成全部解码程序。第三重境界者则不光学习VCD编码技术,还分析其优缺点,并提出自己的视频压缩算法。你想成为第几重境界?”
“我要成为第三重境界。”木鸿飞大声说到。
“呵呵,有志气。第一重显然是不可取的,太丢人了。但是第三重吗,也太难了,只适合少数人,一般是研究生们考虑的内容,所以对于大部分本科学生应该以第二重境界为目标。当然以第三重为目标也没有错,但前提是要考上研究生!”
“我一定要考研究生!不过哥哥,你还是接着讲第三宗罪吧。”木鸿飞继续说道。
预知第三宗罪如何,且听下回分解。
本文转自 zhuyunxiang 51CTO博客,原文链接:http://blog.51cto.com/zhuyunxiang/413427,如需转载请自行联系原作者