有不少人在争论 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() 的同学也许可以找到不错的工作。关键在于这些同学能各得其所。 当然,如果两样都精通,就更好了,即将出版的《编程之美 - 微软技术面试心得》也许能给大家一些帮助。
打印 | 张贴于 2008-01-12 20:04:00 | Tag:IT 行业 非技术
留言反馈
同意,我怎么没想到这样的比喻,结果绕了半天,
@其他留言的网友
留言很有启发,谢谢。
oo vs FP, javascript为你体现!
我不可能像培养许三多那样去培养一个程序员,程序员,我要的就是成才那种,拿过来就能用,质量如何,产品说了算,市场说了算。
我倒认为给非计算机专业的开c作为入门语言更有害。
我给你鸡蛋里面挑点骨头吧!
1。我们并不能看出(可能给读者的印象是:你功力不够,而看不出)
2。对程序开发这门“应用”(应用不能用门来表述)
3。学生们觉得Java(或C#)已经替他们理解了(严重看不懂这句)
4。大家不得不反思一下“他们在学校里到底学了什么?”(应该是学生反思吧?)
。。。
我不同意不能把Java(C#)作为入门语言.学习的关键在于你的学习态度和目的.有兴趣的学生就算你有sort方法的实现,依然会去找背后的实现方法.另外我们用了很多hashtable,需要我们把哈希的算法,系数矩阵什么的搞那么清楚吗?
严重同意
一个最重要的令人无奈的现实就是,在任何时候、任何行业,总有80%的人只发挥了他们本应发挥的20%,软件开发这个行业也不例外。我们能够清楚地看到,这和学校教育只是弱相关的。俗语说,“师傅领进门,修行在自身”,那20%的杰出分子总会脱颖而出。
中国的用户不一定能看到 .mil 结尾的网站。
我不上slashdot, 已经很多年。 它还是那样的界面么?
这是我的,我自己的观点。好奇一下,你认为我还有什么观点是从那里抄来的?