软件工程课程教育的一点想法

大学本科的软件工程课程一直遵循瀑布型的为线索的各个里程碑的相关知识点的展开介绍,现在多有理论框架与实践能力孰重孰轻之争。这里我也有一点点自己的看法。

软件工程在项目开发教学中的作用实质上类似计算机导论在计算机教育中的学科地位,应当属于前导性,线索性,框架式介绍,细思量其内容之广、理论之重、实践之繁的教学之繁重,本身就不是一个学期能承载得了的。既然教学大纲只安排一个学期,充其量,将来慢慢发展应当只是领学习者进门的而一个入门学科而已。而不是有些人说的那么危及及乎的想法。

站在更高一些的高度,比如体系架构或者整个IT业高度,或者整个知识体系更高的高度来看。软件工程,只是前人的经验总结,前辈们总结失败与成功的经验,借助了其他工程的思想来指导项目的开发而已,并不能说明这种就方法是真理绝对正确,这个理论也还在不断完善、推翻和重新整理的过程。这个方法也许只是在一定的范围内可行,但并不表示其绝对的正确。正如爱因斯坦相对论对牛顿定律,当物体速度达到光速,牛顿定律并不适用了。

而现在软件业高度,深度,广度日新月异的发展,想用一套并不完全成熟理论来定义和约束,还要硬塞进学生的大脑,显然是狭隘的,也是可笑的。

其一、软件工程思想只是前人总结的经验,并不是多么有高度的绝对真理。数学的集合理论尚有驳论,更何况所谓的软件工程思想。软件工程课可以手把手教学生用这个方法来开发一个项目,但是绝对不是逼着学生们一定要如此来做才是正确,殊途同归,也许聪明的学生会想出更有办法的方法来达到同样的目的,又为何不可呢?所以对于现在的本科学生教育的软件工程所谓的在学中做,我个人是不太赞同的。容易犯了把学生的思路和开拓性框死的弯路,其实可以鼓励学生不同组采用不同的模式和框架来开发,也鼓励小组长们采用不同的管理方式,学期末的时候,讨论各种不同方法的优劣,引导学生在失败中吸取教训,而不是直接告诉他们什么是对,什么是错。因为应用的学科本身就没有对错之分。

其二,软件工程到底应该偏理论还是偏实践呢?其实需要区分学生的所在专业的,有的专业是计算机方面学科,软件工程只是三年级的一门专业课,有的专业是软件工程专业,软件工程课则是专业基础课,二者有着本质的不同。而且光靠一门软件工程课教会学生软件产品开发,是一种本末倒置的想法。如果要让学生会软件产品开发,可以在软工后续加修一门项目管理或产品开发类的选修课或者开设实践基地,学生按照兴趣选择不同类型的项目,理论结合实际,让企业来指导的不同类型软件产品开发。所以我个人认为软件工程课应该是偏向理论与标准的学习、文档的撰写等,虽然理论课枯燥,不能为了引导学生的兴趣就盲目降低理论的要求,本身大学教育就不在于引导兴趣(理论上来说高中填报志愿就应当默认学生选择了自己感兴趣的学科),而是引导学生更多的挖掘自学能力、解决问题的能力,钻研理论的能力,建立高屋建瓴的思想,无论将来是从事项目开发还是科学研究都打下坚实的基础。

把软件产品开发实践教学硬揉入软件工程课,有脆化软件工程课理论部分之嫌,而且学生容易一叶障目。只有一个学期的时间,时间非常紧,学生从事开发充其量只看到一种方法,只开发了一种项目,难以见到整片森林,白白耽误了大好的学习和博览群书的时间。软件产品开发和软件工程理论,虽然关系紧密,但是他们犹如树叶和树根的关系,产品开发和项目管理的方法有很多,但是其根本的理论精髓是简单的规律性的东西,他们之间关系应该是现象与本质、形与神的关系,如果只教会了本科学生软件开发的“形”,而忽略了软工思想灵魂的“神”的传达,完全是本末倒置,自以为是的想法。

其三,教育应该是一种可持续的教育,而不是“应试”教育。把理论厚重,任重而道远的软件工程课,上成了一种很有趣的,项目开发课,看似皆大欢喜,满足了同学的“学会技能”的假象,其实对学生的可持续发展能力是令人担忧的。没有理论铺垫,只是学会了一两种方法,看似会开发软件产品了,其实项目换个框架、换个语言、换个环境,很可能这个学生没有理论的指导,只怕是从头开始学习,重新摸索。这样的学生后续难以有可持续的学习和进展的可能,若干年后可能还是必须搬出大学的“软件工程”理论书重新学习,才能解其“饥渴”。

我多年教学中软件工程课,发现学习最认真的是专升本专业的那些学生。因为这样的班级大多的学生都有开发工作的经验,在企业工作了几年,重新回来学习,对软件工程的想法完全不同。记得2014年的一届学生,一个同学的表现特别突出,软工课特别认真,对课上布置的文档撰写任务非常认真,小小的一个项目,需求文档写了上百页,认真画每一个UML图,细致入微,自觉加班加点,对任何一个理论都充满了兴趣钻研和实践,作为小组长撰写了非常正规的小组管理规章和规约,而且自己制定了一整套的管理制度,因为同学们都服他,经过他同意那个小组后来陆续加入到15名同学,针对不同层次他就自己发明了分阶梯的管理方式。他经常会找机会与我课后聊天,了解到,其实他是专科毕业后在北京一家软件公司工作了好几年,从事软件工程师的工作,他说那几年他深刻体会软件工程的重要,他甚至没有机会接触到需求报告和概要设计的撰写,现在回来读书,居然可以做项目组长,完全自由发挥的写需求和设计文档,是他梦寐以求的事情,没日没夜的学习和撰写,然后学习如何管理小组内不同的人,学习如何把自己头脑中的想法转换为制度,转换为文档,如何传达给其他组员等等,他说他感谢那个学期的课完成了他的梦想。那个学期的课,后半学期的实验课,都交给这个同学来组织全班小组之间的项目开发方法的讨论,因为我当时实验课允许小组用任何方法来实现项目开发理论课依然是则介绍软件工程思想至于小组用与不用悉听尊便。后来每节实验课都由这位同学来共同组织大家的讨论,比较不同小组的每周的进展程度,每个小组总结自己的失败与成功,互相探讨,鼓励互相争论。有些小组代码能力强很快就开发完项目,不写文档,我就会在期中的时候,修改他们的需求,换掉他们最强的代码开发的同学,让他们体会不写文档的痛苦,事后自觉补写文档,防止我随时修改需求和换人的举动

当然,我终归还是一个心软的老师,只要有参加实验讨论,只要有做实验,笔试只要及格,所有的同学都会通过考试。我认为,学习重在体验,考核并不重要。人只要经历了,总是会留下印象的,这比什么都重要,这个过程中学会的东西,比分数重要的多。我的打分标准是,所有的小组长都是90分以上,无论小组做的怎么样,因为在我的班里,小组长一定是付出最多的,我采用的是组长负责制,组员完全归组长来教育和组织,分数也有20%是由组长来打分

最后提一点关于 敏捷方法,我认为敏捷方法只是教会开发者一种思想高度合作的工作方式,其实其中很多工作方式并不适用于中国国情,生搬硬套的教育学生必须结对编程,站立会议,形如填鸭,缺乏开拓思想。有些人应用的好,是因为他的思维方式适应敏捷方法,并不表示这个方法有多么科学,我认为应该针对中国国情,尊重现实情况,找到一条属于我们国家自己的一种敏捷方式,应该启发学生对于“思维合作”有更多自己喜欢的方式,鼓励孩子们学习的同时,尝试走一条属于自己的路。

总之,我认为,大学就是一个允许让学生们犯错的地方,通过犯错同时学习理论而不断总结经验的地方,而不是老师教育对和错的地方。大学应该是一个让学生犯错的同时,学习理论,自己判断跌倒是否与不采纳理论有关,是否可以有自己更好的方法,避免将来走弯路等,老师的作用只是告诉学生理论是什么,是否是真理,理论是否正确应该让学生自己去探索和实践,作为老师不能按一己之见而下定论。所谓的用“软件开发教学来作为软件工程课”,究其实质是填鸭似的,只让学生知晓所谓的简单线条理论,生搬硬套的放入实践,疲于奔命的大量作业,最后发现学生和老师都很疲惫,学生也失去了在大学期间能博览群书的珍贵时光,也失去了理论指导实践,实践上升到理论总结的科学方法论。

时间: 2024-10-14 20:40:19

软件工程课程教育的一点想法的相关文章

本周软件工程课程感想

由于我们团队项目进行到一半,不便传上来代码.我就这周软件工程课程的内容写一点感想吧. 下面这是我们图形学课程实验的部分代码: /**********myInit**********/ void myInit() { pn = 0; glClearColor(1.0, 1.0, 1.0, 0.0); glColor3f(0.2f, 0.2f, 0.9f); glPointSize(5.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluOrth

大型开放式网络课程MOOC的一点体会

2012年,美国的顶尖大学陆续设立网络学习平台,在网上提供免费课程,Coursera.Udacity.edX三大课程提供商的兴起,给更多学生提供了系统学习的可能.这就是大型开放式网络课程,即MOOC(massive open online courses).更多信息可参考百度百度http://baike.baidu.com/view/10187188.htm?from_id=8301540&type=search&fromtitle=MOOC&fr=aladdin 接触MOOC还是

软件工程课程设计指导随笔

本学期带14信息01班的<软件工程课程设计>,已经进入了尾声. 两周的课程设计,要求学生完成一个多角色的智能菜单系统,课程设计的任务是要求根据不同角色控制访问每个菜单项的权限,用户允许有多个角色:角色和用户都可以增加修改,另外只有管理员角色具有添加角色和用户的权限:而除开管理员之外的所有用户都不能调整角色和角色菜单:用户只能由管理员添加,而用户的个人信息又只能由个人修改:为了增加工作量,添加了一个日志功能,要求记住每次用户的登陆.退出时间和前端计算机的IP地址. 既然是软件工程的课程设计,当然

软件工程课程总结

软件工程课程总结 一学期的软件工程课程就这样结束了,通过一学期的学习,让我对于软件工程的认知有很大的颠覆.在上这门课之前,我一直认为,所谓“软件工程”,只不过是把一个代码量很大的程序分给若干程序员去写,最后将代码整合在一起而已.但是通过这一学期课程的学习,我发现我的认知完全是错误的,而且可以说,错的非常彻底.软件工程,涵盖了软件生命周期中所有的工程方法.技术和工具,包括需求工程.设计.编程.测试和维护的全部内容,即完成一个软件产品所必备的思想.理论.方法.技术和工具.可以说,软件工程包括了从设计

软件工程课程收获

软件工程课最大的收获应该就是让我感受到了些许走上工作敢为后面对boss的氛围,那么多的任务,那么多的文档,以及那么多的deadline,一个本应该为理论课的实践课,总是一次次撞击着我们的小心脏.要知道将来走向工作岗位的我们是没有大牛可以依靠的,可以依靠的只有自己,其实在压力下,我们也可以成为大牛的.大牛也是从懵懂的小牛成长来的.不应该一直做仰慕大牛的小牛,最重要的是要有成为大牛的渴望. 软件工程课程收获,布布扣,bubuko.com

软件工程课程体会

本学期的软件工程课程即将结束,我们也交上了我们的一份答卷.这期间我们遇到了软件开发过程中的各种问题,我们每个人更加懂得了如何与人合作.与人有效沟通.在我看来,软件工程就是一个如何去分析和处理问题的过程,应该说其范畴已经远远不止局限于该门课程.这就好比盖房子,我们不能仅仅局限在搬砖砌墙的工作,我们不能一辈子搬砖,所以我们必须从工程师的角度去看待问题,解决问题. 这门课程教给了我们在完成一个实际项目时的必不可少的过程.这是我们实际工作中要运用的一项非常有用的技能.而且不仅仅局限于软件工程的范畴,我们

软件工程课程建议

软件工程课程建议           这学期的软件工程课程的教学是结合的平时的理论学习和后期的具体理论实践,更加重视具体的编程,总体来说收获颇多,既学习了知识又将其用于具体的开发过程中,但确实在具体的学习过程中还存在问题. 以下是我关于软件课程的建议: 1.软件后期的开发时间太紧,没有完全按照软件规范开发过程开发 就我们小组来说,虽然在确定小组过后就提出了我们的软件构思,但根本没事时间实施,本想作为一个团队进行开发,但苦于平时大家都有自己的事情,没能聚在一起.所以导致最后拿出很多时间进行软件的开

关于UED前端开发的一点想法

5.2 关于UED前端开发的一点想法 5.2.1 目前UED前端代码是一个页面对应一个JS文件,更有甚者一个JS文件的代码会超过万行,这样的代码试想该如何维护?如果在从事前端开发的时候避免这种尴尬的局面,我想最好的方式就是分而治之, 如果分而治之?首先解析页面的一般思路,初始化(init) 事件绑定(event)页面读值(getData)页面写值(setData)重置页面(resetData)页面展示(setView)页面校验(checkData)页面异步加载 (ajax),页面测试(test)

自我介绍for软件工程课程

石家庄铁道大学学生,正在学习软件工程课程. 对于软件工程课程,没什么太大的希望.度了一下,发现软件工程课程近年来比较脱节,这次用新课本不知道效果怎么样.嗯,等课本到手看看再说吧. 自己的目标:我希望能够学习到应掌握的软件工程知识,能加以理解并应用. 计划:每周一晚19:00-22:00,周五晚19:00-22:00用于学习软件工程相关内容.当然,如果计划时间不足以完成作业或目标的话会另加时间以完成,具体时间视需要而定.