当前位置 博文首页 > weixin_34007879的博客:对大学 IT 专业教育的反馈

    weixin_34007879的博客:对大学 IT 专业教育的反馈

    作者:[db:作者] 时间:2021-09-22 10:47

    [这是2009 年 写的文章, 一部分收集到 <IT 小小鸟> 这本书里了。 这两天看到软件学院同学对教学的反馈,? 看来好些问题都没有得到解决。 教育部门时不时会开教学研讨会, 去世界有名的大学, 公司参观, 他们还要参观多少年?? 他们会请已经毕业的学生来提意见么? 学生要年复一年地等它变好? ]

    ?

    [原帖:?http://yishan.cc/blogs/xin/archive/2009/08/19/it.aspx]

    ?

    中国的大学生教育体系中,大约有10% 的学生属于 IT 相关的专业 (计算机科学,软件,MIS,电子工程, 软件工程,等)。 这些学生毕业之后,就成为IT 产业的从业者或用户,他们是IT 行业的希望。 这些学生在接受了 4-6 年的教育之后,对这个教育系统有什么反馈呢? 我问了一些刚刚毕业的软件专业的同学,软件教育迫切要改变的做法是什么? 下面是一些回答:

    ?

    *** 同学们想说什么?***

    a)?实践!?软件教育离不开实践,不要太强调闭卷考试, 老师一定要让学生实践,实习。给一个真实的客户做项目和自己幻想一个需求来做项目是有很大区别的。自己从头写程序和维护别人写的代码是有很大区别的。 没有真实的需求,没有软件的增量开发,没有团队合作,程序设计和软件工程中的大部分理论都沦为空谈。

    b)?讲为什么!?学生上了很多课,反而觉得很迷茫,这些课的意义是什么? 为什么有这么多的原理,数据结构, 红的树,黑的树,模式和算法? 不知道我学的东西有什么用,怎么用。老师似乎不想告诉我们这些课程在实践中的意义 (或者他们也没实践过? )。学生只有死记硬背来应付考试,考试后全忘记。

    c)?打好基础,其他自学!?好好学基础课,特别是算法, 数据结构, 编译原理,操作系统 。 其他课的内容用到了自己学就可以了。

    d)?IT 教育不光是代码!?软件教育不是孤立体,希望在软件教育中把文科的知识联系进来,和设计联系起来; 把软件/IT 行业有趣的发展历史放进来 (讲讲图灵,冯·诺依曼,讲讲Smalltalk, 各种语言的源和流)。培养学生对这个行业的兴趣、热情和敏感。 提倡互动,介绍同学上相关的论坛,网站,开拓视野。

    [建议大家看?《浪潮之巅》]

    ?

    *** 我看到的现象 ***

    由于工作的关系,我在过去的几年中访问了十多所软件学院或计算机学院,和不少老师,学生座谈过。我在微软亚洲研究院里也接触了来自各个学校的学生,谈得多了,就有下面的一些想法。这里我主要谈计算机软件的教育。

    想来的人来不了

    学校里都是按照高考/考研的成绩决定专业去向,我听到一些喜欢玩游戏的学生特别想来软件学院,但是由于成绩不够好,来不了。 一些成绩挺好的学生优先选择了软件专业,因为大家都说这个专业好找工作。 但是到了快毕业的时候才发现 不对劲, 于是有人后悔: “其实我不喜欢写程序,我想转行。” 咳,如果你的位置留给当初那些喜欢玩游戏的学生该多好。

    ?

    教务处的规定

    老师反映说,本来想锻炼同学的团队协作精神,期末大作业让同学们分组合作完成一个项目,但是没想到教务处不同意。 教务处坚持大作业必须每个同学单独做,不能搞团队协作,其理由是团队协作之后,有人就会偷懒!

    其实,让学生一个人去做,他/她也有可能去糊弄,抄袭。 而且正因为缺少协作,一个人不能完成很高质量的软件,单干的同学更有可能去抄。 最后老师争不过教务处,只好让每个同学单独做一个项目了事,一个普通学生很难做完一个项目,怎么办? 那只好 “参考” 别人的东西,有人负责测试么? 没有。这也是每个班的四五十个学生作业只有4-5 个版本的原因之一。这么多项目,老师能一一仔细审阅么? 显然也不行。 但是这事教务处的规定,就这么糊弄过去吧。 据说在一些学校里,教务处非常强势,能决定老师的绩效考核。

    ?

    知识和技能

    很多人认为,大学是传授知识的地方。很多知识 (Knowledge)可以讲授,同学们也可以自己查找,学习。 例如程序设计语言的一些边边角角的规定,在工作中如果忘了,那就现查资料,或者写一个测试程序验证一下。 但是技能 (Skill) 则要通过实际的反复训练,才能获得,并优化。 我看到同学们经常能够背诵 “在设计中应该高内聚,低耦合”, 但是在实际中根本不知道如何应用。 就如同大家都可以在理论上掌握如何下围棋 - “要让每一步占领全局最有价值的要点”, 但是在实战中下的棋却支离破碎,溃不成军。

    我们在考试的时候,能不能少考一些死的知识,而多考一些技能? 学校里能练习什么技能呢?很多:

    • 自己学习的能力 (能不能自己学习一门语言,然后应用? 为什么非得先要老师讲解?)

    • 理解别人的意思和动机 (inter-personal awareness)

    • 表达自己想法的能力 (不妨从做 PPT 演示开始)

    • 说服,影响同伴的能力 (大家一起合作,如何能让团队按自己的想法前进?)

    • 制定计划,并执行计划的能力 (是自己的计划,而不是老师给订的计划)

    • 总结,改进的能力 (一个项目之后,能否心平气和地总结,改进?)

    更多关于知识, 技能, 和技能的反面:

    技能的反面 - 魔方和模仿

    基础知识很扎实 - 但是面试就是做不出来, 怎么办?

    ?

    学校教育的目的

    有一年, 我教的一个班是大三的学生, 他们反映课程压力很大 (同时上编译原理, 数据库等), 我跟系里建议是否把软件工程挪到大四去上, 这样他们学的数据库知识能更好地用上. 系里的老师列出了很多担心, 其中最重要的一点是 - 学生们大四的时候要考研, 所以不能上太累的课, 要让他们有时间为考研复习! 我们谈论了许久, 我终于明白系里面在选择“让学生上有意义的课” 和 "让学生有时间准备考研" 两者之间, 选择了后者。 其实天朝学校的目的大抵如此 - 让学生顺利地升入下一个阶段, 就完事儿了。 在这种思想指导下:

    小学六年级开始复习, 准备小升初;?
    初三开始复习, 准备升高中;?
    高三开始复习, 准备升大学;?
    大四开始复习, 准备考研;

    有些同学还要花很多时间准备考一个 “国考”.

    最后, 学生到了社会上, 发现再也没有考试了, 要靠真本事, 怎么办? 学校可曾教过他们?


    ?

    老师们, 你们可曾真的教过学生 “锐意改革, 开拓创新”?

    ?

    想创新,?如何教创新

    到大学里听领导的报告,你会听到很多次 “创新”和与“创新”相关的词汇。 你觉得这个学校的领导的确非常想创新。 但是另一方面,我听到一些同学反映教材,教案,教学方法都是几年甚至十多年不变的老一套,和实际非常脱节。 难道老师们不想在教学上创新么? 后来有比较了解内情的人跟我说,现在软件相关的专业非常热门,毕业前景也不错,一些计算机系的老师能拿到不少项目,资金也不少, 老师和领导都忙着开公司去了。他们为什么要在教学上创新? 重用几年前的教案不也这样过来了么?!

    在软件学院里,怎么教创新? 除了让学生打下坚实的专业基础之外,学校可以做的一件事就是 -

    ?

    允许学生实验,失败,再实验,再失败。

    ?

    我不用重复爱迪生经过几千次失败才发明可以实用的电灯的故事了,创新不是公式推导,不是一旦学好例题,就能模仿炮制的解题方法。 要给同学们试验和失败的机会。 有人问 - 学生失败了,课程怎么给分呢? 如果同学们能够认真总结经验。同样也可以得到比较好的分数。 这些同学真正到了工作中, 以前失败经验教训就能帮助他们更好地创新。我在给学生上《软件工程》课程的时候的评分标准大致是:

    1. 有创新的想法,并成功实现,优。

    2. 有创新的想法,但是失败了,能认真总结,优。

    3. 无创新的想法,能成功地实现平庸的计划。 良好。

    一些关于创新的博客:

    创新 - 王屋村的魔方们

    IT 行业的创新 - 创新的迷思

    ?

    清一色

    一方面,计算机系和软件学院的各年级学生年龄一样,背景一样。 老师像种庄稼一样,一茬一茬的播种和收割。每次课程和作业,同学们都是从头开始。大家懂得一样多, 大家都是理工科学生的思维。

    一些软件学院收了双证的学生后,情况好了一些,毕竟有一些别的行业,别的经历的同学进来了。这些人组成的团队能互相取长补短,对学生们很有帮助。 我建议要尽量打破 “清一色” 的配置模式, 很多学校有 “工业设计” 等设计类专业,“经济管理”等管理类专业,他们其实可以在学校里就和软件专业的学生一起上课, 做项目, 拿学分。

    ?

    三文鱼模型

    很多学生在学校里认真学习了很多软件知识,在同学中间也很牛的样子,于是他们踌躇满志地毕业了。 但是到了工作单位,他们发现项目组中老中青,各种背景的人都有。 没有人请自己从头设计全新的软件, 自己得从读别人的代码,维护软件系统上手。 我在《移山之道》 这本书里写过 “三文鱼模型”:

    ?

    软件学院的小慧老师对阿超抱怨,软件工程这门课看似容易,实际太难教。

    小慧说:我是按照经典的瀑布模型来讲课的,本来以为会是高屋建瓴,一泻千里,但是实际情况是这样的:

    1. 需求分析:学生们都不懂企业的需求是什么,上课睡觉。

    2. 设计阶段:学生们画了许多 UML 图,用设计工具画了各种形状的图形,仅此而已。

    3. 实现阶段:学生们开始热烈讨论,UML 图早已经扔到一边。

    4. 稳定阶段:学生们中十分之一的人开始写代码,其他人不知道在干什么.代码大部分情况下都不能工作,所有设计过的种种黑箱和白箱测试都无从开始。

    5. 发布阶段:这个阶段只有一天时间,就是最后检查的那一天,同时还有人在调试程序.

    6. 维护阶段:课程结束了,同学们对自己的产品没有任何维护,放假了!

    最后大部分同学们都说自己根本没学到什么本事,然后下个学期,新的一批学生进来重复这一过程。。。

    阿超沉吟半晌,说,事实上,一个软件工程师在现实世界中的职业发展好像和瀑布相反:

    1. 毕业进入公司,开始维护一些已有的软件(维护阶段)

    2. 能够在项目中改一些bug,然后发布小规模的更新版本 (稳定/发布阶段)

    3. 负责重写一个小小的模块,没有文档,写很多代码(实现阶段)

    如果做得还可以, 就会进入下一阶段:

    ?

    4. 有机会设计比较大的模块,自己写一些文档 (设计阶段)

    ?

    过了很长时间,才发展到下面这个阶段…

    5. 有机会去和用户谈新的项目 (需求分析)


    cs
    下一篇:没有了