关于习而学的软件工程教育
邹欣老师的博客在此:http://www.cnblogs.com/xinz/archive/2012/01/08/2316717.html
我不是很同意邹欣老师的观点。对于一个大学生,思想远比实践经验要重要。子曾经曰过,世界上最简单的事情就是学习,因为学习是机械的:我不停的码代码,打字一定会快,对语法一定会更加熟悉;我不停的看技术方面的资料,我一定会对技术更加了解;等等。同时,世界上最难的事情便是思想境界,这不是机械性的练习就可以练成的。
在我的一篇博客(http://www.wanganran.com/blog/2012/04/%E7%89%87%E8%AF%AD.html )里有这样一则故事,其实是我从另外一篇cnblogs里面的文章里看到的:
很多年前,我还年少的时候,喜欢下象棋,在学校里基本上我能下赢的,我总能下赢,我下不赢的,总也下不赢。不得其解,也慢慢懒得操练了。
后来有次学校搞业余活动,有个老师是省象棋协会的,组织了一节棋课。我去晚了,只听了半节。大致意思是讲,下棋要讲全局观,要有战略,例如中局五种策略,中局成杀、不成杀则优、不占优占先、不占先则多子、不多子则求和。还有什么炮破士、马破相、残局炮归家等等。却没有讲如何下棋,课堂上也没有摆个象棋,或是什么棋谱。
我并没有把这些当回事儿,之后也很少下棋。
又过多年,毕业后同学聚一起,闲来无事,与一个同学下了两盘。刚开始,他问我这两年有没有下棋,我说没有。他调侃我,“那你以前下不赢我,今天你也难赢了”。我也笑着认同,反正只是玩玩,何必认真。
可是一开局,他就傻眼了,一直处在下风,且每局必输。他很吃惊,我也很吃惊。之后我认真思考了这件事,觉得是那节棋课影响了我,人的思考能力、计算能力都差不多,而思维方式不同,结果也会有很大不同。他看到的是“棋”,我看到的是“局”。决定胜败的不是棋艺。
又过了几年,我已经不再年少,但还算年轻吧。有一次找一个朋友玩,正好他的一个朋友也在,吃完饭没事儿做,恰巧有副象棋,就与他的朋友下了几局。他们都比我年龄大,已经三十多岁了。不过我也没有放在眼里,自以为水平相当可以,三局我两胜,颇为自得。
等他走后,我朋友问我:“他水平怎么样呀?”我带着些“谦虚”,洋洋自得:“他水平挺可以的,我差点就输了,还好我三局两胜,略胜那么一点点。”
我朋友听完哈哈大笑:“你知道他是干吗的吗?他是卖保险的。卖保险的吗,任何人都可能是他的潜在客户,他自然不会去赢你,不光让你赢,还要让你赢得有面子,这才是高手。他原来是在象棋协会的,论象棋,那叫牛×死了。”
我听完之后,惭愧至极。我关注的是“棋局”,人家所关注的,则超脱棋局之外。眼界不一样,看到的也不一样,操控点也不一样,输赢已经不重要,重要的是输与赢,哪个更有利于自己,然后才是“如何去输”与“如何去赢”。棋局只是一个棋子。决定成败的不是棋艺。
虽然是一则和软件工程不太相关的故事,但是也能很清楚的反映一点:决定一个人的,不只是他的天赋、努力、运气,更是他的思维方式,他的思想层次。
在计算机方面也是一样。我算是一个草根程序员:从初中开始就开始从vb、c#语言开始自学编程,到高一的时候已经可以编写一些小程序了,当时觉得自己很了不起。这算是“习而学”中的先练习。
但是,只有当我通过高中的信息学奥赛系统的学习了关于计算机运行的一些基本原理,我才发现我之前那些所谓练习,使用了几乎完全违背与计算机运行的方法。虽然界面比较美观,运行的也还算顺利,但是效率、代码风格都差的不行。
如果在大学阶段进行“习而学”的方法,那么大学就失去了它的作用——传递思想。如C++、汇编语言、Web前端、移动开发等课程,完全是可以机械性的学习并且对其他科目没有影响的,不应该安排在大学。相反,关于计算本质的课程需要加上。MIT曾经将Scheme作为计算机系学生的第一门计算机语言,将《计算机程序的构造和解释》作为教科书,现在好像与时俱进变成Python了,我认为值得借鉴。于此同时,计算机系同软件工程专业还不同。软件工程就是专门为工业界而准备的,但是计算机科学与技术还有科学在里面。所以,数学分析、概率论之类的课程还是有必要必修的,在科研领域它们还是十分重要的。
当然,现如今中国的大学课程亟需改善,尤其是北航。有很多的机械性的课程,也有很多与专业无关、可能一辈子都不会被用到的必修课。在大一大二两年之中,在这样花样年华里,我们却要写物理实验报告,要背语文课文,要背航空航天概论,这无疑是一种浪费时间(也许它们有用,但是它们不应该在大学的必修课里)。在大一的时候,我们有上过计算机概论课,这门课讲得非常好,我认为是十分有必要的,而且关键是这门课不用考试,只用交一篇文章就可以。
这就牵扯到另外一个问题了,那就是大学的绩点政策。为什么我们觉得初中、高中是那样的美好?虽然大学让我们更自由,但是又有一股强烈的力量在牵扯着我们,那就是绩点。如果初中、高中是所谓的应试教育,大学就更加是应试教育——只有拼绩点,才能有未来。这也就告诉我们,只有死读书、背书,才能有未来。虽然有大作业等开放性的考试,但是这毕竟是少数。这也就让“习而学”的方式更加行不通——怎样考核?根据代码量?根据用户数量?不靠谱吧,到时候还是得通过考试,于是还是得“学而习”。
总而言之,首先,我认为大学应该起到它应有的作用,而不只是一个技术学校而已;其次,大学也不应该是又一个高中或者更甚于高中的应试教育家的天堂,而应该是一片自由的、开放的孕育思想的摇篮。