目录
Abstract
Keywords
摘要
关键词
一、软件人才科学思维能力的培养
二、软件人才创新思维能力的培养
三、软件人才哲学思维习惯的培养
四、结语
参考文献
Abstract:It is the humanities quality and science literacy of software jobholders that determines the future of China’s software industry.Accumulation of these two qualities deserves emphasis from specialized talent training education in software engineering which includes,but should not be limited to imparting knowledge to students and improving their practice ability.This paper focuses on how to cultivatescientific thinking and innovative thinking of software engineering-oriented postgraduates based on the targets and characteristics ofsoftware engineering colleges.It also attempts to guide students to ponder the problems in software design and development from theangle of philosophy.
Keywords:Software Engineering-oriented Postgraduates;Scientific Thinking;Innovative Thinking;Philosophical Thinking
【摘要】软件从业人员的人文素质和科学素养决定了中国软件产业的未来。软件人才教育必须重视科学人文底蕴的积淀,而不应局限于知识的传授和实践能力的提高。该文着重探讨了如何针对软件学院的办学目标和特色,在教学中培养软件工程硕士的科学思维和创新思维能力,并引导其从哲学角度思考软件开发与设计中的问题。
【关键词】软件工程硕士;科学思维;创新思维;哲学思维
“面向应用、面向领域,培养多层次、实用型、复合型、国际化人才”是软件学院的办学目标和特色,对软件工程领域工程硕士应注重培养其自学专业知识的能力、理解特定领域专业方法的能力和自我发展的能力。
大多数在职学习的工程硕士学生,已经具有一定的自学能力和较丰富的实践经验,处理和解决实际问题的能力普遍强于全日制在校生,他们希望通过硕士阶段的系统学习,使知识水平和能力都得到明显提升。相对本科层次而言,硕士生不仅要有较强的专业能力,还应具备一定的人文素养和科学素养。下文将以《软件架构与设计模式》课程为切入点,阐述如何在专业课教学中培养软件工程硕士的科学思维和创新思维能力,并初步探讨对其中软件设计与开发问题的哲学思考。
一、软件人才科学思维能力的培养
人与人的差异,很大程度上取决于人的思维方式与思维水平的差异。科学思维是介于日常思维和哲学思维之间的思维层次,既有与实践相联系的确定性,又具有抽象性、逻辑性和系统性。科学思维能力的高低,是研究能力和素质的体现,直接决定着软件工程硕士生毕业后能否担当所肩负的重任。因此,在教学中要有意识地倡导科学精神,把科学思维的培养贯穿于整个教学过程,既要促进学生知识的增长,更要促进学生思维能力的发展。
国内软件工程的教学和培训,已经开始关注软件过程、问题解决步骤等宏观方法,但却忽略了基本的科学思维方法在软件开发中的微观应用。如果不能有意识地运用这些逻辑思维方法来解决软件问题,或不知道如何使用常规科学思维来完成开发任务,就会把软件开发神秘化,认为开发高手如艺术家,设计技巧完全靠灵感所得,毫无思维规律可言。实际上,软件工程师微观上的思维模式并未超出传统的科学思维范畴,心智良好并接受过系统的逻辑思维以及其它思维方式训练的程序员,都能解决软件中的大部分问题。
1在教学中培养发现问题和解决问题的能力
问题发现和解决过程是高级形式的学习活动,强化学生的问题意识,引导学生解决问题或创造性地解决问题,有利于培养其综合思维能力和创造性思维。因此,在教学中变传统的知识传授过程为“探索和解决问题”序列的探究过程,创设问题情境,引导学生不断地提出有价值的问题,探索解决问题的思路,对于提高学生的科学思维能力大有裨益。
(1) 改变教学模式,引导学生发现问题和解决问题
课堂教学仍是当前高校教学的主要形式,课堂教学质量的高低直接影响着学生知识水平和能力的提高。在教学中除了应讲清讲透知识,更重要的是启发和培养学生发现和解决问题的能力。没有这方面的训练,学生只会接受知识,其透视问题、把握问题的能力和习惯不能得到有效的开发,理论上的创新更无从谈起。
《软件架构与设计模式》所涉及的知识源自软件设计实践,有软件开发经验的学生完全能够自学,甚至已经在从事软件开发的过程中自发或自觉地加以应用,只是缺乏系统性。因此,在教学过程中必须改变平铺直叙的授课方法,采用灵活的授课形式,从教学的内容、方法和手段等多方面调动学生的学习积极性,使他们主动参与教学过程。教师首先简明扼要地介绍软件体系结构的发展现状、存在的问题与争论以及对软件开发的影响等,以激发学生的兴趣;在教学中,留足够的时间让学生去阅读、思考和提问,要善于创造问题情境,开展多种形式的讨论,以提高学生发现问题和解决问题的能力,鼓励学生对权威理论提出评论性意见。
(2) 创设问题情境,与学生共同探求解决问题的方法
问题情境是指学生不能用已有的知识经验直接加以处理,感到不理解和束手无策的情形。创设问题情境能够调动学生的探究意识和学习积极性,启迪思维,在交互过程中完成问题的理解、知识的应用。认清问题的关键,探索解决问题的途径正是学习和理解架构与模式的最佳方法。
问题情境状态下的问题,不是简单的提问和回答,是通过严谨的分析,深刻揭示所讲课程内容的内在规律,启发引导学生去思考更深层的问题,应具有可接受性、障碍性和探索性。每种架构或设计模式都有特定的意图和应用场景,应当选择软件项目开发过程中常见而又有一定难度的问题加以分析和讨论,启发和鼓励学生把自己的实践经验与相关理论知识相结合,表达自己的思想,提出合理的方案,再共同总结和完善分析解决问题的思路,这样既提高了学生参与教学的积极性,又有利于灵活掌握和应用所学内容,可取得良好的课堂教学效果。在课程的后阶段,考虑到软件工程硕士的学科交叉背景和相对丰富的实践经验,更应提倡学生主动发现和提出问题,只有不断提出深刻的问题,分析能力才会有所提高,这种能力对从事科学研究和工程实践尤为重要。
2在问题解决中培养科学思维方式
软件与数学的渊源甚深,理科学生尤其是数学专业的学生在软件设计和开发中所体现的潜在优势发人深思。工科学生的数学基础停留在知识层面,没有提升到思维的高度,用科学思维方法指导软件的设计和开发,这使他们在编写一般应用软件时得心应手,善于用新开发技术和工具快速实现软件功能,但在设计内在复杂度高的软件尤其是系统软件时,会感到无从下手,或是只实现软件的基本功能需求,而软件的内部结构和质量却很差。这种软件设计的先天缺陷是不能靠规范软件工程过程、软件质量管理等后天手段来弥补的。
当代软件越来越复杂,人文素质成为软件设计人员必备的基本素质,而科学素养是决定他们最终能否有所作为的最重要的素养。培养软件专业学生的科学思维能力,固本强基,才能锻造出适应时势变化的真正软件精英。
(1) 巧设案例,拓展思维的深度和广度
多数学生习惯于用一种固定模式解决问题,把平时熟悉的架构或设计模式案例套用在当前遇到的问题上,一旦问题有变化,就很难灵活应对,这是思维定势造成的。针对上述情形,教师可设计一些特殊案例,并在原问题基础上加以演进变化,与学生共同探讨解决方案。
以处理对多种数据库操作的通用数据库访问类的设计为例,通常学过设计模代写代发论文式的学生都会采用工厂模式解决同类的问题,将对数据库的访问集中起来,以保证良好的封装性和可维护性。分析具体实现细节,由于数据库操作通常被划分成几个逻辑步骤,在工厂方法类中又可使用模板模式,这是一部分有设计经验的学生会自觉采用的方法。如果使问题稍加变化,要求提供能程序控制的数据库连接缓存,以提供更大的灵活性和效率,则需要构建一个缓冲池,保存数据库类的实例,此时多数学生不能准确找出解决问题的模式,教师可引导学生思考如何将保证数据库连接唯一性的单例模式扩展为多例模式。把问题再引申一步,在数据访问类DAO的设计中,实现商业逻辑抽象和具体数据对象的分离,则是桥模式的应用。通过上述案例的变换与分析,学生对常见问题的解决方案和设计模式理论都会有更深刻的认识和理解,拓展了思考问题的广度和深度。
(2) 剖析案例,提高思维的精度
人接受新知识都会经历“表象-抽象-本质”的演化过程,教师在教学中可设计典型案例,完成从分析问题,提出解决方案到方案具体实现的全过程,帮助学生澄清模糊认识,深刻理解所学内容,掌握知识的实质。
在讲解MVC(Model-View-Controller)架构模式时,暂不直接介绍相关概念和理论,以Java技术实现Web应用的3种不同模型为例,激发学生兴趣,分析前两种模型中存在的问题,探讨如何先从模型中分离表现,再从视图中分离控制器,最终引入实现3部件解耦的MVC架构方案。在此基础上,总结MVC模式的优势,并从使用意图、所针对(的)问题、实现机制、局限性等方面比较系统、详尽地讲授相关理论知识。最后,鉴于MVC作为一个广泛采用的模式,在J2EE,.NET框架的候选方案中都有典型应用,对学生构建应用系统有较高的参考价值,将详细剖析ASP.NET和JSP+Servlet下MVC模式实现的2个完整实例及代码片段,强化对所学知识的理解和实践,学以致用。在整个课程的结束阶段,尝试融会贯通,综合运用所学知识,以企业应用为切入点,从领域逻辑模式,数据源架构模式,控制器及视图的不同实现方式等角度深入讨论系统MVC架构的实现策略,以及与其他设计模式的协同应用,提升认识的层次。
二、软件人才创新思维能力的培养
高等教育必须改变传统的教学模式,重视潜能的开发,突出创新能力,实施创新教育,培养创新人才,追求“为创造性而教”的最高境界。创新思维是创造和创新的核心,在教学中提倡多种思维方式相结合,培养和训练创新思维,提高创新能力。
在专业课的教学实践过程中,有意识地强调思维的能动性和集中性的统一,强调思维的逆向性、灵活性、发散性、独创性与敏锐性,能有效提升课堂教学效果,激发学生的学习兴趣,在潜移默化中培养学生的创新思维能力。
1复合思维与发散思维相结合
复合思维是单一地寻求答案的思维过程,是创新思维不可缺少的前提;而发散思维则假定一个问题有多种不同答案,是创新思维的本质或基础。复合思维“求同”,发散思维“求异”,在分析解决问题的过程中,应努力实现这两种思维的有机结合:任何软件的设计和实现方案都不是唯一的,通常同时有多个候选架构都能正确完成软件的功能,且各有优劣。教学中应鼓励学生尽可能多地从不同的角度,提出各种解决方法。这些方法有的很经典,容易想到,有现成方案可借鉴;有的则很具新意,注意针对系统的特点,优势突出,但实现起来有一定难度。此时再用一些经验性的方法简单分析各种候选架构的特性及优缺点,进而引导学生采用SEI提出的ATAM(Architecture Tradeoff Analysis Method)评估每一种架构方案,从中选择一种最合理的架构设计。
2抽象思维与形象思维相结合
架构师的头脑需要经常在抽象思维和形象思维间切换,他必须能理解表述模糊或抽象的概念并将其变成相关各方能够理解的项目构件;必须掌握将解决方案分解到不同抽象层次的技能;必须能综合利用架构图、UML图、文字和代码片断,表达自己的设计思想。如果是对现有系统的改造,那么在看过系统的文档和代码后,他就要能总结出系统的架构特点。虽然架构师不是教出来的,但培养上述必备素质无疑是本课程的目标。模式都基于抽象,架构模式描述系统基本的结构组织方案,把系统抽象为部件和连接件;设计模式提供部件和连接件的解决方案,是对不同可变性的封装,从而使系统在不同的角度达到“开-闭”原则的要求。但模式不是提供一种简单可复制的方法,而是从已有的经验中归纳、抽取、提升规律的过程,往往是“可意会,不可言传”,只能用通过“模式”的方法去解决某个问题的例子来说明模式的存在。在架构与设计模式的学习中,应以探索的方式完成“问题-解决方法-通用(可复用)解决方案-抽象模式-模式的规范描述-模式实现”的全过程。
3逆向思维法
逆向思维是在已知结论的情况下,寻找其成立的条件和原因,在分析中采用这种方法,能够使逻辑严密,对问题分析透彻、认识深刻。在教学过程中,分析优秀的软件产品解决方案或典型的程序代码范例,推断其软件架构和使用的设计模式,结合所学知识证实这种推断的正确性,并通过对软件功能、性能需求,主要特点及开发技术的分析,反推选择该架构或模式的理由;或者找一段真实代码(问题代码)现场讨论它的作用,什么地方做得好?什么做得不好?假如是你该如何进行设计和重构?上述方法对于软件设计和程序重构都大有益处。
三、软件人才哲学思维习惯的培养
科学思维要求从哲学的高度理解科学,需要哲学的头脑和理论思维能力;任何成功的科技创新,尤其是突破传统的重大科技创新,都有正确的哲学思维作指导。哲学思维在当今社会越来越受到重视,有些跨国公司在招聘人才的时候公开提出应聘者应该具有哲学思维的能力,能够统观全局,运筹帷幄。为顺应时代发展,软件人才必须具有哲学思维,能够从哲学的层面思考和发现问题,用辩证的、发展的观点分析问题。
部分优秀的软件工程硕士生不仅已经在软件项目开发中熟练应用架构和设计模式知识,而且能很好地权衡理论和实践的关系,少数学生更是自觉从哲学角度思考软件的设计与开发,在课堂讨论中形象而深刻地总结了自己的经验与体会,以下是其中两个重要的论题。
1软件架构、设计模式与代码实践
有程序经验的设计人员,对软件架构、设计模式和代码实践通常会有两种极端的认识。一种观点认为在具备足够丰富的编程和项目经验之前,软件架构和设计模式是空谈,没有学习的必要。事实上,好的软件设计师必须主动地选择工作在合适的抽象层次上,能够脱离具体编程语言进行思考,准确抓住事物的本质,而架构与模式应用实质上正是对软件设计思想、设计知识的重用;如果只会工作在代码实现层,遇到任何问题就立即想到写代码,否则就无法顺利思考,其能力是有缺陷的。软件设计需要充分实践,但不宥于实践,积极地学习软件架构与模式的理论,尝试用理论来指导实践,理论与实践既不矛盾,也无绝对的先后顺序。
另一种相反的情形是认为架构师只需关注模式和系统架构,软件架构设计可以脱离具体的代码实践。事实上,由于程序设计语言、技术平台、数据管理技术、网络体系结构等下层技术的变化迅速,架构师一旦脱离现实应用,就会做出一些不切实际的设计决策,造成设计与现实的脱节,缺乏对系统真正的指导和掌控,成了为设计而设计,而非应需求而设计。具体地说,就是会写代码,也能设计系统方案,但对设计如何指导代码,代码如何实现设计意图则缺乏把握。因此,在进行软件设计时,应当对设计意图具体到底层实现有一个清醒的脉络图,如果在这种设计架构下,底层实现会有困难或性能满足不了需求,就应当调整设计思路。设计指导实践,而实践反过来又决定设计。
2设计模式之道
面向对象系统的分析和设计实质上追求的就是高内聚(Cohesion)和低耦合(Coupling),这也是设计模式的原则和精要。面向对象系统的设计和开发中的很多原则,如封装、继承和多态、面向接口编程、优先使用组合而不是继承、将抽象和实现分离的思想等,在设计模式的两个基本策略中都有体现:发现并封装变化点;优先使用对象组合,而不是类继承。设计人员或更高抽象层次可以更多关注设计模式的使用场景和应用效益,而编码实现人员则需要更多关注设计模式的实现方法。设计模式体现的是一种思想,产生于实践并指导实践。设计模式的思想在系统设计和开发中随处可见:Observer(其实例为Model-View-Control模式)是MFC中的基本框架;Iterator模式则在C++的STL中有实现;软件重构是实现设计模式的一种手段,设计模式往往是重构的目的;模式思维有助于理解和选择系统架构,也有助于了解和使用框架。理解和掌握设计模式,并不只是记住23种或更多的设计场景和解决策略,而是接受一种思想的熏陶和洗礼,最重要的是自觉地遵循这种思想去进行设计和开发。
四、结语
多年的专业课教学实践表明:使学生掌握扎实的专业基础、合理的知识结构,具备较强的软件设计与开发能力、工程组织与管理能力固然重要,但要孕育一批优秀的软件人才,仅仅传授知识和培养专业能力是不够的,知识经济时代需要科学精神与人文精神的融合。目前,我国软件业界存在的急功近利、浮躁、自我膨胀、不实事求是、缺乏诚信、惟利是图等现象,都与这两种精神的缺失有关。只有大力弘扬科学与人文精神,并将之融会、贯穿于软件工程人才培养过程的始终,我国的软件产业才真正有希望。
参考文献:
[1]文俊浩,杨丹,陈林,傅鹂.软件工程人才培养体系研究与实践[J].高等工程教育研究,2005,(4):63-65.
[2]文俊浩,徐玲,杨丹.软件工程人才培养实践[J].中国大学教育,2005(9):31-32.
[3]陈静,马苏奇,王来生.注重学生解决问题的能力与创造型思维的培养提高高等数学课程的教学效果[J].大学数学,2006(3):25-27.
[4]吕亚芹,刘世祥.培养学生数学思维能力的研究和探索[J].北京建筑工程学院学报,2004(1):72-75.