有不少人在争论 Java 对学生有益还是有害(不少网站上的评论有断章取义的嫌疑,不值得多看,建议看这个中文链接)(英文链接)。事实上,这个问题事实上不是最近才提出来,大约6~7 年前,我们的同事在美国的学校招聘的时候,就发现和学生好像谈不到一块儿 –
面试者:能不能讲讲各种排序 Sorting 的方法?
学生: 很简单,用 Arrays.sort() 即可,我不关心它具体怎么做的。
面试者:那你们还学C么?
学生: C 是过去的语言,我们要面向对象。 (中国的学生可能会再加上 “面向未来”,“面向世界”… )
这样的现象在这几年中越来越普遍了,因为越来越多的同学前来找工作的时候,除了一些抽象的理论和知识,我们并不能看出来他们对计算机这门“科学”,对程序开发这门“应用”有足够深入的了解,这些学生们觉得Java(或C#)已经替他们理解了,他们不必自己再亲自理解一下。面对这样的情况,大家不得不反思一下“他们在学校里到底学了什么?”,“我们应该教什么?”。
但是,在进一步讨论之前,我们要注意到原文并不是作了一刀切的“java 有害”结论。我的理解是:
如果Java 是学生学习计算机编程的第一门语言,会有一些问题。
但是这些“问题(Harm)”,并不是不能解决的。学生以后可以学汇编,C/C++,COM,Lisp,Asp.net,编译,计算机体系结构,等等。通过学习和实践,学生们应该能对计算机这门“科学”,和计算机编程这门“应用”有深入和全面的了解。
Java 挺好的,把很多细节都隐藏在抽象层面之下,我要排序, 则调用Arrays.Sort(),搞定. 我们不用关心这个到底是如何实现的,对不同的数据有什么样的效能 – 直到我在现实的项目中发现几个简单的Sort, for loop 组合在一起,会花非常长的时间。
这个现象和论语中,“吾欲仁,则斯仁至矣” 有异曲同工之妙。
说到“第一门”,其他类别的教育系统都有这样的问题,例如小学语文的第一课如果是“论语”,若干年后,会有教育学家总结“论语作为小孩的第一门语文教材,会对学生有害”,当然,此结论必然会被过度简化为“论语对学生有害!”这样耸人听闻的标题,引起另外一场大水。 (现在有人强迫小儿以"诵经"为入门,他们以后都要还的.)
我们还可以得出一个推论:
对于计算机专业的学生来说,如果Java (或其他一门‘容易’的面向对象的语言) 是学生学习计算机编程的唯一语言,这对学生有害, 那是相~当~有害。
如果有学生学了Java (或其他一门‘容易’的面向对象的语言)之后,就欢呼“技止此耳!” “我精通计算机编程了!”,然后跑到IT求职市场中, 那是当危险的。
从另一个角度讲,有人看到很多职位需要Java(或C#)技术,然后他/她参加了Java 的培训,并以此找到了工作。在这个过程中,每一个方面(求职者/培训机构/公司) 都受益了,何害之有?
随着计算机技术的发展,这个行业在不断扩大,我相信懂得各种sorting 算法细节的同学能找到不错的工作,我希望只懂得Arrays.sort() 的同学也许可以找到不错的工作。关键在于这些同学能各得其所。 当然,如果两样都精通,就更好了,即将出版的《编程之美 – 微软技术面试心得》也许能给大家一些帮助。