以我的体会,弄懂了散离数学之后,我的编程能力就开始突飞猛进了。如果发现看数据结构看不下去,请自学一下离散数学。
CS专业的能力不在于编程能力源码,而是在于计算机科学本身的理论。如果仅仅是为了做一个coder,那就白费了四年的专业课程了。
数字逻辑、计算机组成原理、微机接口、计算机体系结构、操作系统。
如果只谈狭义的编程,以上专业完全用不上。这就难怪现在的coder整天只跑去写js和php。现在能定制Android的人为什么能吃香?能编译和优化内核的人为什么能超越99%的程序员?为什么现在很火的如机器人、无人机等领域急需要软硬双修的人做系统设计师?如果没有弄懂以上专业,连门都摸不到。
离散数学、数据结构、算法分析、编译原理、数据库原理。
上述五门课是写好程序的重要基础理论。如果发现自己的程序怎么写也写不好,原因就是理论不过关。对着别人的开源项目,照猫画虎也许能改出不错的代码,但人家为什么要这样设计,这样的代码结构为什么会很优秀,优秀在哪里。就说各种数据的关系,人家高手设计的数据表关系清晰,不会有冗余,而专业不过关的孩子,可能同样的数据在程序中有N份,更新起来不仅慢源码,而且常常因为访问冲突导致程序死掉。
计算机科学专业之所以称为计算机相关诸多专业设置中的“科班”,原因就是在于它的系统性,它是专门研究“计算机”本身的,而编程能力仅仅是其中之一。对于科班出身的程序员,完全不用担心要学习一个全新的编程语言,完全不用担心接触一个全新的系统平台。以上十门课程就是万变不离其宗的“宗”。所有的API都可以查手册,所有的平台技术和缺陷都可以通过网络加以学习,但唯独系统分析和设计能力是没办法的。想要有精巧高效的设计,没有对计算机硬件系统和软件系统的原理有深刻的理解,是完全做不出来的。
像计算机图形学、网络技术等则属于细分专业,应用面较窄,属于那种用到才学也不迟的专业,相对而言不太会影响对计算机系统的理解,因此可以稍微放低一点优先级。
而对于软件工程这一课程,这门课程跟个人的编程能力没有什么关系。可能大多数程序员不会觉得有什么意思。对于没有在大型团队中有过经历的讲师,能讲好这一课程是有困难的,更不用说学生了。至于我当年学这门课程的时候,是一直心里犯嘀咕的,有很多问题是直到进入了企业,接触了CMM才得到解决。
计算机科学本身带了”计算“两字,如果往深处研究,其实一切都离不开数学。往往有很多应用的问题,到了最后都归结为抽象建模的问题,数学模型有了,算法也就有了。所以如果发现某些人的程序特别简洁,可能要研究一下人家的数学水平是不是比较高。这也是回应本文前面的答案:数学很重要,想要程序写得好,请学一下离散数学。