Java的另外一个问题,是其所倡导的繁琐设计风格,一个对象套一个对象,一个对象叠一个对象,概念之间彼此横七竖八地互相依赖,人为制造出一大堆貌似精美、实则累赘的所谓设计。这个问题我已经批评过多次,并且相信这股歪风一定会最终被人们抛弃,Java最终会归于质朴。但是在这一天到来之前,Java对于初学者来说,很可能蒙住他们的双眼,使他们看不到软件设计中最可贵的简单性和优美的统一,体会不到数据和程序的统一。在这一点上,C表现的非常好,而C++如果教学得体,可以做的更好。
当然,这并不是为现在的C/C++教学辩护。恰恰相反,从我了解的情况来看,目前普通高校的C/C++教学质量非常令人担忧。学生学不会,而且越学越没有兴趣,老师则感到教起来很棘手,迫于现实情况往往选择敷衍了事。反而是教Java,无论如何学生还能学到一点东西,对就业也有直接的帮助。至于学生的核心能力确实,发展后劲不足等问题,就让他们在现实工作中自己解决吧。坦率地说,这种想法也很有道理。不过,从教学角度来说,我认为老师们还是应该积极考虑如何提高C/C++的教学质量。毕竟学生阶段是十分宝贵的,基础不在这个时期夯实,将来想弥补,就算不是完全不可能,也将付出十倍的代价。本着对学生职业生涯的负责态度,还是应该帮助学生达到这个阶段应该达到的目标。在两位教授的公开信里,也充分表达出这个意思。
我赞成的编程教育过程,应当是以C/C++(基本上是C)为主线,贯穿起算法、数据结构、系统原理、编译和数据处理、软件设计和组件技术等关键知识领域,让学生能够从根本上理解现代软件系统的原理和构造,并通过有效的练习建立正确的软件设计观念和良好的工程实践习惯。在这个基础上,无论将来是深入学习C++,还是进入Java的繁荣世界,或者拥抱Python、Ruby,甚至于走向Web开发,都会心领神会,势如破竹。
