对大学 IT 专业教育的反馈

[这是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. 有机会去和用户谈新的项目 (需求分析)

 

那软件工程的课程能否也像这样安排? 可以试一试这样的流程:

1. 开始维护以前同学开发出来的程序,理解程序。

2. 找bug,改bug,重构小部分代码,以满足用户的需求。

3. 一部分同学可以开发测试用例

4. 在现有版本的基础上做增量开发

    a) 理解需求 (这个时候理解了客户需求是什么)

    b) 设计

    c) 开发

    d) 回归测试 (用到上面开发的测试用例来保证软件质量)

小慧问:那这是什么模型?

阿超说:嗯,看起来像是从瀑布下方一步一步上溯到源头,不妨叫“大马哈鱼洄游模型” , 或者简称“三文鱼模型”

我们在学校里,不妨多实验一些不同的模型和学习方法。

 

参观学习

很多学校貌似也很重视和业界交流, 他们的领导经常去世界高水平的学校和公司考察。 参观, 感慨, 吃饭, 合影, 回国 … 又参观, 感慨, …

我就不多说什么了, 看下面的两则笑话:

 

http://sports.sina.com.cn/c/2011-10-27/08005804467.shtml

前日本足协主席川渊三郎这样说,在他的记忆中,中国足协几乎每年都会派考察团到日本学习。 至于效果,他直言不讳:“这么多次考察,都白来了,中国足球没有任何提高。”

还有日本足坛人士提到:你们总是喜欢强调“国情”,当然我们也很理解,毕竟大家属于两种不同的社会制度,但这绝对不是理由,也不应该老挂在嘴边。

 

王屋村的果冻到阿超家, 说是找一个东西, 阿超帮他找了半天, 无果。 最后两人都累了, 阿超请果冻吃了炸酱面。

阿超问: 你想想, 东西到底是在哪里丢的?

答: 很可能在我自己家里。

问: 那为什么来我家找?

答: 我家没灯, 你这儿有灯, 亮堂!

 

期望

很多人都对学校有各种期望, 我也有过期望, 希望 (http://www.cnblogs.com/xinz/archive/2010/11/27/1889829.html).

但是, 期望越高, 反而被动, 失望也越大, 就像有人说的 - 上大学, 结果却被大学上了.

马克·吐温说过一句话:

I have never let my schooling interfere with my education.

 

我年轻的时候不知道这句话是什么意思, 现在好像懂一点了.  人的成长, 成熟, 也许绝大多数都不能只依赖于学校, 去埋怨学校说 - 你为什么没有把我教好? 

 

你不但不应该浪费时间去依赖, 埋怨学校, 而且还要有意地摆脱学校 (以及其他”体制”) 对你的影响 – you own your own education, don’t let your school interfere with it.   你对你自己的教育和成长负责, 课本不好? 有网络, 象牙塔不爽? 到社会去。 

有人说:

人都是在路上成熟的

 

但是你得上路啊, 靠体制, 靠青年导师, 靠... 都不如靠自己, 自己走吧.

 

2011/12/3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代软件工程 来自卓越大学教师的建议 (读书笔记)

教师教学有培训和参考书么? 我从来没想到过我会在大学里教书, 而且还教了好几年, 四个学校。 当时接到任务的时候, 我把它当作实习生培训和新员工培训的”学院版”, 还是继续强调实践, 反馈, 合作, 就这么开讲了。 在微软公司, 做大部分和人相关的事情, 都得先有一个培训, …

软件工程讲义 9 创新的出路 走进作坊

我第一次注意到 “作坊”这个词和软件行业联系起来大概是这个 2004 年 11 月的报道: 标题: 信产部副部长娄勤俭&#xff1a;中国软件业还在手工作坊阶段 日前&#xff0c;信息产业部副部长娄勤俭在出席中国软件产业生态链高层论坛时表示&#xff0c;中国软件产业的规模还比较小…

现代软件工程 习而学的软件工程教育

茅于轼先生写了一篇博客 ( http://blog.sina.com.cn/s/blog_49a3971d0102dufj.html ) 纪念茅以升先生提出的 习而学的工程教育: 把颠倒了的工程教育顺序恢复过来&#xff0c;即他称之谓“习而学的工程教育”。 以桥梁建筑专业为例&#xff0c;大学一年级先学施工条例&#xff0…

现代软件工程 教课心得

现实世界是最好的老师, 我们这些叫 “老师” 的人, 充其量是个助教。 但是有些助教却不让学生见到老师。 **************** 老师都想把课教好, 学生都想把课学好. 但是我们常常看到一个学期过后, 老师, 学生都有很多抱怨 (例如: 各种良好愿望和计划在实施中的问题). 看了上…

微软学术搜索项目 10个版本的历程

这是我在微软亚洲研究院参与的项目之一, 从 2009 年秋天开始, 我们小组把它从一个研究原型发展为涵盖全学科的学术搜索门户。 它索引了 4千万论文, 2千万作者, 6 大实体类型, 8 种数据可视化功能, 具有开放的API 平台和手机客户端. 下面说说项目的发展: 2009/8: 内部发布 alp…

以实际产品为例, 进行软件工程训练的作业

每个小组 (结对) 从下列产品中选一个, 按照下面的说明写软件测试报告, 分析并提出建议, 写一篇博客 (包括四部分)即可。 产品1. 必应词典客户端 (http://dict.bing.msn.cn/) 产品2. 必应缤纷桌面 (http://desktop.bing.msn.cn/) 产品3. 微软学术搜索 (http://academic.researc…

现代软件工程讲义 9 测试 QA 的角色和分工

测试的角色 (Test) 要独立出来么 ? 独立出来的测试角色怎么才能发挥作用? 有些成功人士和成功的公司号称没必要有独立的测试角色 (Test), 你怎么看? 最近又看到一些关于开发人员要不要负责测试的讨论。 例如: http://www.aqee.net/on-testers-and-testing/ 大多数的开发…

程序设计作业: 车模+数模 = ?

我上学的时候只听说过 “航模”, 没听说过“数学建模”这门学问. 这几年在简历里看到过不少人号称数模得过什么奖之类的, 我都没好意思问太仔细。 在帝都开车经常遇到堵车, 我于是想到了一个车模的问题。 我想请大家帮着给这个车模搞个数模, 求个解法: 想象帝都北四环或北五…

计算机考研的调查和改进建议

几星期前, 我在微博上讨论考研的事, 有专家建议不如把意见整理出来, 说不定可以转告给相关方面。 我没有考过研, 问了公司的同事们, 绝大多数都是保研的, 也没考过。 我从网上下了一份模拟题, 好像还挺难&#xff0c;有一种要翻书的冲动。 全国有多少学生为了考研而奋斗? …

2012 夏季高校微软俱乐部活动 - 开门创新

创新啊创新, 大家都在讲创新。 一般的理解, 创新就是公司内部关起门来想, 实验, 内部评审, 然后申请专利什么的, 其实也有开门创新的办法: http://www.innovationexcellence.com/blog/2012/08/13/40-examples-of-open-innovation-crowdsourcing/ it is about bringing extern…

笔记 - 高等教育的创新

教育是一个社会发展的支柱, 你和我能看到并理解这个博客, 教育功不可没。 高等教育的形式并不是一成不变的, 高等教育一直在演进, 变革中, 最近一股“online higher education” 的浪潮在美国兴起, 貌似突兀, 其实有规律可循。 在关注最近的在线教育浪潮之前, 我们看看美国高等…

现代软件工程讲义4 Scrum/Sprint

Advanced Software Engineering, Development Process, Scrum/Sprint 软件开发的流程有很多 (看 各种方法论概述), 我也写过一篇博客 (酒后的敏捷) 谈了谈最近比较时髦的开发流程。 今天我们不喝酒, 正襟危坐地说说敏捷这一路 Scrum/Sprint 开发方法. 从理论上看, 这个方法真…

北航 2012 秋季 现代软件工程 两人结对 作业要求

Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] Design and implement an Elevator Scheduler to aim for both correctness and performance, in managed code. Skills to learn and practice: a) Peer to peer collaboration b) Requirement …

北航 2012 秋季 现代软件工程 团队项目要求

同学们的小组要在下次课上 (10/15) 决定做哪一个项目 (按次序挑选), 确定之后写团队博客描述他们要做的究竟是什么系统 (不懂的地方可以在博客上提问)。 这次课程有10 个学生团队, 我们有 10 个备选项目. 各个团队玩了一次黄金点游戏, 决定了挑选的次序。 第一组项目 : …

现代软件工程 学生阅读和调查作业

大学生都是读书人, 要多读书&#xff0c;多向前人学习, 多思考。下面的读书和调查作业必须在截止日期前发表在个人博客上 (也可以转发到团队博客)。 同学们的博客都在这里: http://www.cnblogs.com/xinz/archive/2012/11/05/2754729.html 博客1: 阅读下列博客/文章/教材,…

北航 2012 秋季 《现代软件工程》 博客列表

如果你写了代码, 但是从来没有实际运行过, 那你究竟写了代码么, 还是在软件工程课上做的梦? 如果你写了文档, 但是从来没人读过, 那你究竟写了文档么? 在我们的课程中, 我们通过实际的项目和公开的博客向世界证明同学们真的写了代码和文档。 团队博客 (5-7人的团队要花10…

现代软件工程讲义 7 设计阶段 Spec

在前一个博客里 (典型用户), 我们讲了怎么收集, 分析和验证用户的需求。 这里我们讲 spec – specification Specification, 又叫spec, 有两种: a) functional spec, 软件功能说明书, 主要用来说明软件的外部功能, 和用户的交互情况 (把软件当作一个黑盒子) b) technical spec…

北航 2012 秋季 软件工程课 M2 要求

祝贺同学们完成了第一个里程碑 M1. 经过报告/评论/Postmortem, 大家对各自项目在M1 的优缺点都应该有很深的了解, 也理解到做一个好的软件和实现一个算法的差别。请把这些对于软件工程的感悟体现在M2 的具体工作结果中。 关于转会 - 软件工程师换工作是常有的事&#xff0c;…

现代软件工程 2012 北航 项目复审模板

这是现代软件工程课在北航的项目复审要求。 这次我们有下列 10 个团队, 他们做了一些有意思的项目&#xff1a; 有七个小组合作&#xff0c;携手打造一个叫 学霸 的网站: 100Years 网页收集和归类工具76er 网页收集和归类工具FightingSnail 网页元数据抽…

现代软件工程讲义 8 软件的血型

[这是 现代软件工程讲义 的一篇] 一个软件团队经历了计划/设计/开发等阶段, 达成代码完成 (Code Complete) 这一目标&#xff0c;似乎后面的事情就水到渠成了. 其实不然, 软件生命周期的最后阶段往往是最考验团队的&#xff0c;不但考验团队项目管理水平&#xff0c;应变能力…