当初上《数字电路》和《计算机组成原理》这些课程的时候,非常痛苦,很难看进去,很抗拒这些知识,我以为是我天生讨厌硬件的缘故。最近看了《编码的奥秘》(udonmai 指出是《CODE》,最近的出版物是《编码:隐匿在计算机软硬件背后的语言 (平装)》),发现实际上不是,这本书从最初的手电筒传信息开始,一步一步介绍通信和编码的演变,最终把构造一台计算机的来龙去脉都一一介绍完毕,包括了上面提到的《数字电路》和《计算机组成原理》的知识,操作系统与汇编也有所提及。我可以像看小说一样无痛苦地吸收这些知识,甚至看到有点兴奋,原来十进制没什么特别,原来逻辑门是这样发展而来的,原来RAM是这样来的。相反学习那两门课程时异常痛苦,一开始就是专业知识,三态门晶体管什么的,鬼知道这些是什么东西,基本上这些课程是要“啃”下来的,我这两门课都考80多分了,结果基本上都是应付考试,考完没留下多少东西在大脑里,看《编码的奥秘》时很多知识点回想起来才恍然大悟,不知应该说这本书太好,还是课程太烂。
计算机很多基础课程学生们普遍看法是:学这些有什么用?普遍的回答是:以后你就知道有什么用了。另外就软件专业来说,在学校学的都是基础课程,不会教应用层这么“肤浅”的东西,即时毕业出去后做的都是应用层的东西,因为你懂了这些底层的知识,才能更好地学习这些应用层的东西,并且也更容易学习,否则只学一些皮毛就跟职业学校的学生没什么区别了。这应该是对的,但就我个人感觉而言,要是不知道这东西用来干嘛,那学起来真是痛苦,相信挺多人有同感。
很多人都喜欢打一个比喻,像盖房子一样,先得把地基打扎实了,建高楼才不会倒。听起来真是很有道理,但我觉得并不正确,建楼房地基打完后是没得改的,要改得把楼房全铲平才行,一定得按自底向上的方式盖楼。而学习不一样,随时可以去补充下层知识,并且不会因此付出什么代价,反而带着目的去补充下层的知识,效率更高,学习过程的痛苦也相对会少。计算机的更是这样,上层下层都有很多共同之处,先学上层应用层,再在有兴趣或有必要的时候回过去学习下层也是一种不错的选择,至少对我来说是挺好的。国内教育基本不会考虑“兴趣”这回事,当然大学把计算机作为一门科学技术当然不能这么搞,还是得规规矩矩一步一步来,但个人还是可以选择适合自己的方法。
我觉得如果我不是事先学了一些应用层的东西,直接去学大学那些课程,不知会不会因为太枯燥而学得太痛苦甚至转行。实际上我学的第一门计算机语言是Actionscript2,学的时候不知道,现在觉得它真是极佳的入门语言,首先它很容易,第二它跟C++/JAVA等主流语言风格差不多,第三它是FLASH的语言,很容易可以做出一些有趣的东西。第三点是最重要的,能给人学下去的动力,学的过程也不枯燥。像大学课程学的语言C++,对我来说就太枯燥了,学了那么久能用它干什么?无非就是在丑陋的控制台输出乘法表,输出日历什么的,实在是让人提不起兴趣。在快乐地学一点AS2后再去学C++能相对容易一些,也不会那么枯燥。
应该所有知识都可以是很有趣的,甚至包括马克思主义、毛邓三这些,只是课程把他们变枯燥了,甚至把感兴趣的人往门外推,尽可能通过某种方式提升对这些知识的兴趣,把它们变得有趣点学起来比较爽,真希望多点《编码的奥秘》这样的书,我觉得未来应该会提倡无痛苦的学习方式,不过那应该是很遥远的未来。