关于大学中软件工程课程的开设问题——不要把实践性科学当作理论性学科来教授...
Posted 青润
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于大学中软件工程课程的开设问题——不要把实践性科学当作理论性学科来教授...相关的知识,希望对你有一定的参考价值。
本文实际完成时间是2008年03月22日,今日翻看我的稿件存栏时翻到,于是,重新发布出来。
里面涉及到我和几位大学讲师或者是教授的对抗性争议,我反对他们的做法和讲课以及定义的方式,但是最后我并不想做无意义的争论,于是退出了那个临时的群。当然,前面他们对我也算是捧了不少,也有一个不了解的上来就和我对抗。
本文讨论到的相关内容都在下面这本书里有全面详实的解答,这本书中的一段两页不到的内容,就让厦门大学的以为管理会计系的博士拿到了博士学位:
首先要明确的是:
请不要把实践性科学当作理论性学科来教授,那样就是误人子弟!
另外,软工相关的课程,请不要只是照本念经,这样只能说明你自己就不配讲授这门课程。太多的高校根本没有这方面的能力,就把计算机,微电子等专业的课程拿过来拼凑。就成了想当然的软件工程专业。
这十几年因为我自己的沉沦,一直没有就此正式发声,今天再强调一次,几乎所有高校的软件工程专业,都不合格,因为老师不合格。不经历过十个以上从几个人到上百人的研发团队的不同角色历练是不可能对软件工程有着真正到位的认知和理解的!
事件陈述
某日,有位大学老师宣称自己是搞软件工程的!我很惊讶,大家都知道,带有工程两个字的学科,都是实践性科学,而不是纯粹理论推演就能得到的,没有实践哪儿来的工程二字?可是,就有人认为自己没有经验也能搞软件工程,这样的老师,难道不是误人子弟么?
声明:该群主应该可能成为一个称职的软件工程老师(不能说一定能成为好老师,因为实践上的经验是必需自己体验才能深刻的——我大学时候遇到过一个很厉害的教授讲课,《铸造原理》这么枯燥的课程,每个人听到名字就想睡觉的课程,他居然能讲得让我听出兴趣来,当时佩服的我是五体投地,能让枯燥的课程吸引人这才是好老师,软件工程本身因为其热度,就不是一门很枯燥的课程,所以,也就不容易成为好老师了)!因为他至少有十分谦虚的心态来做事情,这就有取人之长,补己之短的效果,而不会出现因为个人偏好而冲动做事,造成不良的后果。
大家看看下面的对话吧,我隐藏了他们的QQ号码,也算是一种保护措施吧。
Ctrl 13:06:08
我是一名老师,在这个讨论组里,你们三位也都是老师,,,而且,都是教软件工程的。。
青润 13:06:39
不好意思,我不是老师。
Ctrl 13:07:35
所以,我的想法是~,在群中再组建这样子的一个讨论组,一来呢,我们都是搞软件工程的,二来呢,我们都是老师,所以,我们,我们在一起,将会有更多的有意义的,有建议性地讨论。
青润 13:08:08
我不认为中国有搞软件工程的。
青润 13:08:15
而且,没有人能搞软件工程!
青润 13:08:32
这是一个极端错误的说法!
也就是这个说法,害了很多人!
Ctrl 13:08:40
青润,你别这样说,你的水平,我是知道的,虽然你没有在学校里上软件工程的课,但是,你的理论水平和实践经验,却是我们,至少在这个群里,是无人能及的。
青润 13:08:45
我只是个做开发的,不好意思。
Ctrl 13:08:57
哈哈,是的是的,我在说这句话的时候,我自己也感觉到了。
Ctrl 13:09:24
我的本意是~,我们都是跟软件工程沾边的,,呵呵
Ctrl 13:10:00
其他两位朋友,据了解,也都是大学的教软件工程的老师,
青润 13:10:09
我不介意认识更多的人,但是,我很介意谈话的具体内容。
我不是一个做理论的人,我只是一个实践者,一个摸索者而已。
Ctrl 13:10:41
高人才能讲出这样的话。。深刻深刻。。
24722357 13:11:29
3291191 13:08:32
这是一个极端错误的说法!
也就是这个说法,害了很多人!
Ctrl 13:11:31
青润,我是一个肤浅者,所以,在此先交待一下,若我等说话有不妥之处,真的请你指教。
24722357 13:11:33
此话何解?
青润 13:11:33
不用吹捧我,我只是知道自己的分量。
另外,我目前对软件工程整体知识领域的理解内容和大学里教授的已经有了非常大的区别,所以,我们可能很难在某一个立足点上来进行对话。
因为大家的起源不同。
青润 13:11:45
软件工程,不是搞出来的。
maggie 13:11:57
你的意思是,我们教软件工程的这些老师是做无用功,是在误人子弟?
Ctrl 13:12:04
maggie,你来了就好,呵呵。。相信你也会很高兴参与这样的讨论。
青润 13:12:07
做开发的人,只能说自己实践的是某个方法论,操作的是某个过程。
青润 13:12:16
我可没说你们是在误人子弟。
青润 13:12:25
不好意思,这样的对话,对我来说没有任何意义。
maggie 13:12:35
你这些说法似乎太绝对
Ctrl 13:12:37
我还要加进来一个人,他在法国留学,研究生专业是软件工程,现在又在读太阳能专业
青润 13:12:46
如果你们有5年以上的开发经验,再来和我谈话把。
没有经验的人来教授软件工程,纯属胡扯。
maggie 13:13:06
你到底见过多少的软件实践?
Ctrl 13:13:06
哈哈,青润在这方面,绝对有实力。
青润 13:13:11
我的说法不绝对,而且是事实!
不信,你就随便吧。
事件分析
其实在上面这段对话发生的时候,我很想赌气说下面的话:
我们打个赌吧,我们就某一个软件工程中的议题举行讲座,每个人举行一场,看看学生和技术人员的反应以及支持情况,如果觉得一个议题可能出现偏颇,我们就干脆把软件工程整个活动的每一个大块都进行一次讲座,或者你先自己出路费来北京,我来租赁场地,或者我自己出路费去你学校所在地,你来租赁场地,谁输了,就把对方支付的部分一起垫付了了事!(我2003年在北航给研究生讲课的时候,全场一百多人,早上8点30到11点30,就不会有人感觉到困乏,没意思而打瞌睡睡觉!我不知道这个老师能做到什么程度)
后来想想,没必要作这样的争论,意义不大!因为现在的老师,大都没有开发过软件,都是毕业后直接留下来的,这样的老师来教授软件工程怎么可能有实践经验,没有实践经验的软件工程老师来教授实践性的课程,不误人子弟,还能做什么?还能做的就是照本宣科,笨笨主义而已,和他们争论,无意于事!于是,我就直接退了那个临时群出来!
推理
有人说他是搞工程的,我相信,工程本来就是来搞的或者称之为做的,做工程的,比如承接土方建设,承接运输,承接楼宇社区规划,还有就是开发行业软件可以称之为搞工程软件的,这都属于工程范畴。
可以有搞工程软件的,但是不应该有搞软件工程的!
软件工程是什么?怎么搞?
大家看看定义:
(以下引用内容来自网络)
什么是软件工程
1986年IBM的《软件工程手册》一书的定义如下:软件工程是应用于软件定义、开发和维护的一套方法、工具、文件、策略、标准和步骤。
软件工程是一类工程。工程是将理论和知识应用于实践的科学。就软件工程而言,它借鉴了传统工程的原则和方法,以求高效地开发高质量软件。其中应用了计算机科学、数学和管理科学。计算机科学和数学用于构造模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量和成本的管理。
软件工程这一概念,主要是针对20世纪60年代“软件危机”而提出的。它首次出现在1968年NATO(北大西洋公约组织)会议上。自这一概念提出以来,围绕软件项目,开展了有关开发模型、方法以及支持工具的研究。其主要成果有:提出了瀑布模型,开发了一些结构化程序设计语言(例如PASCAL语言,Ada语言)、结构化方法等。并且围绕项目管理提出了费用估算、文档复审等方法和工具。综观60年代末至80年代初,其主要特征是,前期着重研究系统实现技术,后期开始强调开发管理和软件质量。
70年代初,自“软件工厂”这一概念提出以来,主要围绕软件过程以及软件复用,开展了有关软件生产技术和软件生产管理的研究与实践。其主要成果有:提出了应用广泛的面向对象语言以及相关的面向对象方法,大力开展了计算机辅助软件工程的研究与实践。尤其是近几年来,针对软件复用及软件生产,软件构件技术以及软件质量控制技术、质量保证技术得到了广泛的应用。目前各个软件企业都十分重视资质认证,并想通过这些工作进行企业管理和技术的提升。软件工程所涉及的要素可概括如下:
根据这一框架,可以看出:软件工程涉及了软件工程的目标、软件工程原则和软件工程活动。
什么是工程学
工程学是一门应用学科,是用数学和其他自然科学的原理来设计有用物体的进程。实践工程学的人叫做工程师。国家把软件工程归并入电气信息类。[From Baidu]
工程学是「应用科学和技术的原理来解决人类问题」。[From Wikipedia]
工程学方法
工程师最关键和独特的任务是发现,理解并结合实际的局限来达到满意的结果.很多情况下,产品不仅仅只需符合技术要求,其他条件也必须满足.这些条件包括材料来源,物理或技术的局限,未来改进的可行性和其他因素,诸如成本,可销售性,可生产性及适用性.
解决问题
工程师们应用科学,数学和相应的经验来找到问题的解决办法.他们建立合理的数学模型,对问题进行分析并测试可能的解决方案.可能的解决方案常常有多个,工程师们必须根据它们的本质评价各方案的优劣并选择最能满足要求的最佳方案。折中存在于是各种工程设计的核心之中,最佳设计意味着能达到尽可能多的要求。工程师一般在全面生产过程前,就尝试预测他们的设计如何达到规格。他们使用:原型、比例模型、模拟、破坏性试验、非破坏性试验、强度测试。测试保证产品按期望值运行。测试的目地是确保产品能符合预计的要求.工程师作为专业人员会尽量制造符合预计要求的产品,并达到对社会无害.工程师往往需要在设计中考虑安全因素来降低意外的故障.不过,考虑的安全因素越高,设计效率也通常会越低.
与其它专业的比较
科学家经常要问“为什麽?”,他们关心了解人类不懂的知识,工程师则要利用科学家发现的知识,制造对人类有用的物体或工具。
从经济的角度来说,科学家不必关心经济问题,他们想法子获得必要的经费(如政府拨款、企业投资、私人赞助等),然后专心去研究,把这些经费花光,如果得到的是和原先设想的完全相反的结果,经费也没有白花。工程师则相反,他们必须使制造出来的物体,在经济上是可行的,否则没有任何用处,如果一件产品的成本高于其市场价值,使的无人光顾,这种产品就无法生产,所以对工程师来说,经济观念是必备的。例如像科幻小说所描写的“按12个按钮,再拉下三个把手,就可以给面包片抹上黄油”一类的机器,在理论上是完全可以制造出来的,但工程师决不会制造这种机器。
从相互包含的角度来说,科学家可能也需要完成某些工程作业(比如设计试验仪器,制造原型),工程师经常也要做研究。
从目的的先后顺序来说,可以说科学家为了学习而制造,而工程师为了制造而学习。
从工程和科学都要做的研究来说,工程学上的研究与科学研究也有不同之处。它经常涉及到的领域,基本物理化学已经很好的被了解了,而这些问题却很难被精确的解决。工程学的研究便是要寻找可能近似方案。
什么是工程
有判断地动用从研究、试验和专业实践中所获得的数学和自然科学知识,制定各种能够经济地利用自然资源和自然力的方法,为人类谋福利的一项专业。
工业工程的定义很多,不同的学术机构,不同的高等院校对此都有不同的定义,本文给出了一些比较有代表意义的定义。
美国工业工程师协会的定义,"工业工程(Industrial Engineering - IE)是研究人、物料、设备、能源和消息组成的综合系统的设计、改善和设置的工程技术,它应用数学、物理学等自然科学和社会科学方面的专门知识和技术,以及工程分析和设计的原理和方法来确定、预测和评价由该系统可得到的结果"。根据这一定义,IE是一门集自然科学、社会科学、工程学和管理学等的综合、交叉型科学。这个定义也是最权威和最被广泛接受的定义。
在日本工业工程称为经营工学或者被称为经营管理。在日本工业工程被认为是一门管理技术,它以一门工程学专业为基础,如:机械工程、电子工程、化学工程、建筑工 程等,其中最基础应是机械工程,机械、电子和信息是必须学习和掌握的知识。日本工业工程协会对工业工程的定义是:工业工程是将人、物料、设备视为一体,对发挥功能的管理系统进行设计、改革和设置,为了对这一系统的成果进行确定、预测和评价,在利用数学、自然科学、人为科学中特定知识的同时,采用工程技术的分析和综合的原理及方法。
中国工业工程对工业工程的定义是:工业工程(IE)是以人、 物料、设备、能源和信息组成的集成系统为主要研究对象,综合应用工程技术、管理科学和社 会科学的理论与方法等知识,对其进行规划、设计、管理、改进和创新等活动,使其达到降低 成本,提高质量和效益的目的。
(引用结束)
好了,从上面完全可以看出来,无论是工程、工程学还是软件工程,都归结于一点:实践!做工程的人只能称之为工程师,而不是教授、讲师!也就是说,没有工程实践经验的人,不可能真正懂得工程是做什么的,没有软件开发经验的人也不可能懂得软件工程是做什么的!就好像说,你没有种过水稻,你就不可能成为袁隆平一样!这才是工程的要求,这才是实践的要求!
没有袁老大那样辛辛苦苦种地的精神和做法来实践软件工程,你可能领悟到什么是真正的软件工程么?
2022年补充:
再次看到我写的这篇文字的时候,袁隆平老先生已经仙去年余,心下甚为感慨。踏踏实实做事,好好实践,才是软件开发者应有的太对。高校里的盲目扩张和自以为是,真得太多了,这也是后来我不太愿意接受高校邀请的原因之一,捧过之后,他们要做的只是糊弄学生,而不是真正的通过实践,让软件工程的知识得到落实。
加上那些年bat的迅速扩张,更让软工的知识和经验积累被人看作是无意义的。
现在水木的软工板块也几乎陷入了关闭的前期,因为讨论者越来越少,前任版主还找到我,希望我能来扛起来,我说,还是不要了,有个低谷也是正常的,我们都应该客观地看到知识得起伏,热点和冷却的过程。
而这几年的低代码开发,其实是我当年研究推进的UML等建模技术的另一种表现形式,我相信模型驱动有一天还会起来,因为视角是不一样的。当你曾经站到过更高的视角来看待一个系统之后,你会发现,这与从底层上来的过程中各个阶段的视角都不一样,感官与认知都会有极大的差异!
以上是关于关于大学中软件工程课程的开设问题——不要把实践性科学当作理论性学科来教授...的主要内容,如果未能解决你的问题,请参考以下文章