高中和初进大学的时候,周围总有这么一种论调:好的计算机公司都喜欢招聘数学系或者物理系的毕业生,说是数学功底比较扎实。我的一位学物理出身的长辈曾问我计算机系都学些什么,听了我的描述之后,露出一种不屑的神色,说这些有什么可学的。言下之意似乎只有物理、数学系学的那些东西才算是真正的学问。
然而,既然计算机从数学和物理之中分离出来,成了一个独立的学科,总有它独到之处。那么这个独到之处是什么呢?我觉得不是数据结构,以数学系学生的离散数学知识,我们在数据结构上占不到什么便宜,也正是因为这个,才会有本文开头的那种论调。何况数据结构的复用是做得相当好的,很多人用着STL里的Map、.Net里的HashTable,很好的完成了自己的工作,却不用太注意那背后的红黑树、碰撞处理。
那么除了数据结构的知识之外,要成为一名合格的软件开发者,还需要具备什么样的知识呢?我觉得是面向对象技术和软件工程知识。这两项技术理应成为计算机系学生的优势。然而现实情况实在是令人沮丧。
大学里的课程开设,主干依然是围绕数据结构展开的,软件工程现在总算也是一门主干课程了,但重要性远不如数据结构的一系列课程。而面向对象技术往往只是软件工程课程中的一个章节,有所讲述也往往停留在面向对象技术初始阶段的理论,而完全无视近年的发展。当大家已经承认接口复用的意义,课堂上还在大讲代码复用。当大家已经都在用C++、C#编程的时候,课堂上还在大讲Goto语句的危害性。
面对这样的现实,有的只能是无奈...
然而,既然计算机从数学和物理之中分离出来,成了一个独立的学科,总有它独到之处。那么这个独到之处是什么呢?我觉得不是数据结构,以数学系学生的离散数学知识,我们在数据结构上占不到什么便宜,也正是因为这个,才会有本文开头的那种论调。何况数据结构的复用是做得相当好的,很多人用着STL里的Map、.Net里的HashTable,很好的完成了自己的工作,却不用太注意那背后的红黑树、碰撞处理。
那么除了数据结构的知识之外,要成为一名合格的软件开发者,还需要具备什么样的知识呢?我觉得是面向对象技术和软件工程知识。这两项技术理应成为计算机系学生的优势。然而现实情况实在是令人沮丧。
大学里的课程开设,主干依然是围绕数据结构展开的,软件工程现在总算也是一门主干课程了,但重要性远不如数据结构的一系列课程。而面向对象技术往往只是软件工程课程中的一个章节,有所讲述也往往停留在面向对象技术初始阶段的理论,而完全无视近年的发展。当大家已经承认接口复用的意义,课堂上还在大讲代码复用。当大家已经都在用C++、C#编程的时候,课堂上还在大讲Goto语句的危害性。
面对这样的现实,有的只能是无奈...