软件技术与硬件技术相比较,其发展的空间更为广阔、应用的领域更为广泛,因此计算机软件技术得到了关注和发展。下面是我为大家整理的计算机软件技术毕业论文,供大家参考。
摘要:目前,高职软件技术专业的教学改革势在必行,本文介绍了问题研究的必要性和Moodle平台的功能,探讨了基于Moodle平台进行混合式教学的教学过程。
关键词:Moodle平台;混合式教学模式
1概述
目前,高职学院主流的教学主体为教师的教学模式早已不能满足社会对人才的需求。这要求我们积极进行教学改革开展以学生为主体的教学模式的探索。混合式教学模式是教育信息化发展而出现的一种新教学模式。其意义在于将学生在网络上的自主学习和传统课堂上的教学相融合,是多种教学方式、学习方式和教学媒体的整合。因此,基于Moodle平台的高职软件技术专业混合式教育模式研究具有十分重要的意义。
2Moodle平台简介
Moodle是一个开源课程管理系统(CMS),是一个免费开放源代码的软件,以社会建构主义为其主要的理论基础。Moodle是ModularObject-OrientedDynamicLearningEnvironment的缩写,即模块化面向对象的动态学习环境。在基于Moodle平台的教学活动中,教师和学生都是主体,彼此相互协作,共同建构知识。Moodle平台有主要三个方面的功能:课程管理、学习管理和系统管理,其中课程管理包括课程教学组织、教学资源组织、学生学习活动组织、学生评价组织等管理;学习管理包括:记录学习情况、下载学习资源、开展协作活动、测验与作用等;系统管理包括系统模块管理、课程管理、模块管理、用户管理和系统参数设置。Moodle平台有系统管理员、教师和学生三种用户角色。其中,系统管理员主要负责搭建Moodle平台的软硬件环境,可分为课程管理员和网站管理员。课程管理员负责课程的创建和管理,网站管理员负责对Moodle平台进行配置和维护。教师角色中的主讲教师和辅导教师是按照权限不同来分的。主讲教师可以组织教学活动,建设教学资源,进行日常教学管理。可以为学生分组,添加或注销学生,可以授权辅导教师,可以设置课程“密钥”。辅导教师不能参与课程设计,只能组织学生的管理成绩、课外讨论、查看日志等,在日常教学过程中监督学生的学习活动。在指定教师时,如果不特定教师编辑权限,该教师就默认为辅导教师。学生角色可以在线学习网络课程资源,参加在线测试,在线进行讨论,并将自己的学习历程以及学习心得写在自己的博客上。学生可以建立一个在线档案,包括照片和个人描述。
3基于Moodle平台的高职软件技术专业混合式教学模式的教学过程设计
混合式教学是指融合不同的教学模式和不同的应用方式来进行教学的一种策略,它结合了课堂教学和网络教学的优势。下面以《Java程序设计》这门课程为例来介绍如何基于Moodle平台进行混合式教学模式的教学过程设计。
混合式教学模式的教学资源设计
教学资源是混合式教学模式的基本保障,主要指与所授课程相关的教学材料,包括课程的教案、课程的课件、实训指导、教学大纲、复习题、拓展资料等。随着慕课的兴起,在《Java程序设计》课程的教学资源设计中,教师可将课程的教学内容制作成慕课放在Moodle平台上供学生课余时间观看。既方便了课堂上未听懂的学生进一步学习,也为基础好的学生提供了预习的资源,增强了学生对知识的掌握程度。
混合式教学模式的教学课程内容设计
《Java程序设计》课程的操作性强,采用任务驱动的教学方式能督促学生课前预习、课后复习,提高动手能力,从而激发学习的兴趣。下面以《Java程序设计》中《类和对象实现》一节为例,说明教学内容的设计。
教学目标
知识目标
①类与对象概念与特征、属性和方法;②类与对象的关系;③定义类的语法;④创建类的对象,使用对象的步骤。
能力目标
①运用面向对象程序设计思想分析类和对象特征;②会创建和使用类和对象。a教学任务“人”是社会主体,日常生活中要想描述一个人主要包括姓名、年龄、性别、体重、家庭地址等信息。任务要求在计算机中使用Java语言对“人类”进行描述,并用Java代码实现,最后打印出人的信息。b实训任务第一,编写一个电脑类,属性包括品牌、型号,方法为显示电脑信息,并测试类;第二,编写一个手机类,属性包括手机品牌、手机型号,方法为显示手机信息,并测试类。
混合式教学模式的课堂教学活动设计
课堂教学活动设计是混合式教学模式的关键。Moodle为教师和学生的互动提供了很好的平台,学生可以针对教学内容展开讨论或者提出问题,也可以发表自己的心得体会。教师可以在教学过程中设置测试来及时检验学生的学习效果,还可以创建一些趣味性话题,鼓励学生参与并给予加分奖励,同时还要在Moodle平台中跟踪学生的发言,并及时给出反馈。下面以《Java程序设计》中《类和对象实现》一节为例,说明教学活动的设计。课前:将教学课件上传至Moodle平台,供学生预习。课中:①(10分钟)利用Moodle平台中的“测验”功能,针对上创建一套试题来考查学生对上节课知识的掌握情况。②(30分钟)利用课件和案例演示讲解本次课知识点。③(35分钟)布置并指导学生完成实训任务。④(15分钟)总结并布置作业。课后:创建讨论话题,鼓励学生积极参与。
4总结
基于Moodle平台的混合式教学模式,能够激发学生学习的兴趣,提高学生的自主学习能力,营造良好的学习环境。同时也存在一些问题,可根据每个学校的需求,进行二次开发,增加功能,更好地为教学服务。
参考文献:
[1]李明,胡春春.基于Moodle平台的“合作—探究”式网络教学平台研究[J].吉林省教育学院学报,2011(3).
[2]熊小梅.基于Moodle平台的网络课程设计及应用[J].教育与职业,2014(02).
[3]唐春玲,蔡茜,张曼.基于Moodle平台的远程教育的实践与研究[J].网友世界,2014(5).
[4]赵俞凌,鲁超.基于Edmodo平台的高职写作课程混合式教学设计[J].金华职业技术学院学报,2015(1).
【摘要】近年来,在社会经济快速发展的同时,一定程度上带动了科学技术的进步。而在此过程中,智能手机与个人电脑得到了发展,并且逐渐融入到人们日常的生产生活当中,被广泛地应用。其中,在智能操作系统当中,安卓操作系统占据重要地位,并且其开放性相对明显,这样一来,智能手机与个人电脑应用的优势就更大。由此可见,在安卓操作系统的基础上开发软件具有重要的现实意义。本文对安卓操作系统的开发平台进行了全面分析,并重点阐述了在安卓操作系统基础上的应用软件开发。
【关键词】安卓操作系统;应用软件;开发;分析
众所周知,信息技术在其自身的发展过程中,电子产品的丰富性与多样性充分地展现出来,并且使得人们生活方式有所改变,一定程度上为人们日常生产与生活带来了便利。正是因为安卓操作系统自身独特的开放性特征,使其同电子设备实现了有效地沟通,并且始终能够满足用户不同需求。现阶段,安卓手机已经被广泛使用,并且已经普及,在此背景下,使人们开始重视其便携性问题,希望能够时刻进行操作,所以,在安卓操作系统的基础上,应该积极开发出相应的应用软件,这是当前安卓操作系统工作领域中亟待解决的问题。
1安卓操作系统开发平台
在安卓操作系统平台中,其主要的构成部分就是应用软件、中间件以及用户界面和操作系统,给予平台各层分离有力的支撑与保障,使得各层中间都能够保证分工的明确性[1]。通常情况下,安卓操作系统中的应用程序框架可以有效地提供API,同时还能够合理地设计出其自身特有的功能模块,这样一来,还可以实现为其他应用程序提供有价值的使用依据。在安卓操作系统当中,其最核心的应用程序就是联系人、网络浏览器、日历、SMS应用程序以及电子邮件等等。在编写并设计应用程序的过程中,开发工作人员需要对Java语言进行充分地利用,这样才能够确保系统程序和开发程序所包含的资源实现共享。在此基础上,安卓操作系统还能够向组件提供相应的C/C++库集合,然而,开发工作人员不能够对其进行直接调用,一定要根据上层的应用程序框来实现C/C++库的应用[2]。通常情况下,安卓操作系统库的构成内容是媒体库、FreeType、界面管理和SQLite等多种系统。
2基于安卓操作系统应用软件开发的重要意义
随着科技发展与人们生活水平的提升,始终对个人电脑与智能手机在社会经济当中的发展情况产生影响。现阶段,我国智能手机市场始终处于爆炸式增长的趋势,而截至到2013年,智能手机的普及率也迅速上升,将近2/3的国民都已经拥有智能手机[3]。然而,国民拥有智能手机的技术水平也处于上升的阶段,其中,智能手机终端CPU处理能力以及存储和用户交互等方面的能力都出现了明显的提高,以上内容也同样是智能手机关键性的指标,所以,一定程度上对于安卓操作系统应用软件的开发工作提供了有力的硬件基础。基于安卓操作系统的应用软件开发能够保证使用者手中安卓智能操作系统同社会各行业经济发展过程中所使用的电子设备实现有效连接,进而能够为使用者提供更具特色与专业化的服务。若安卓智能操作系统应用软件能够得到广泛地应用,必然会为人们的生产与生活带来便利与实用价值,进而更方便人们的工作与生活。
3安卓操作系统概述
安卓发展史
安卓股份有限公司位于美国加州,公司成立于2003年,并在2005年被谷歌所收购。谷歌公司的主要目标就是要创建标准化与开放化的安卓系统移动客户端平台[4]。同其他智能手机的操作系统相比,安卓操作系统的开放性更加明显,并且能够在其实际运行的过程中始终处于开放状态,同时还能够同其他电子设备实现数据链接,在此基础上,更好地实现高级操作。安卓系统是智能手机当中的一种智能操作系统,所以,其更新的速度相对较快,当前最新版本已经是(M)操作系统
安卓开发平台结构与特征
(1)应用程序层。
智能手机操作系统中的安卓系统,其自身就能够为智能手机的运行提供相应的应用软件,而且,其基本的应用软件都是操作系统本身所配置的,主要的表现形式就是系统应用[5]。然而,在智能手机实际运行的过程当中,这些应用软件同其他的应用软件共同享受同等资源的支配权利。
(2)应用程序框架。
在智能手机操作系统当中的安卓操作系统,本身明显的特征就是能够支持使用者的软件运行,但是,需要基于应用程序框架。而且在安卓智能操作系统当中,各应用软件都能够设计出特有功能模块,只要保证功能的设置与应用程序框架的具体需求相吻合,就能够获取安卓系统有力的支持,最终同其他的功能模块实现信息的交互。
(3)内核设置。
安卓系统是基于发展起来的,所以,该系统的核心就已经集成了Linux的绝大多数特点[6]。而且,其中主要部分就涉及到安卓系统安全认证及网络协议栈等等内容。但是,也正是这种智能集成,使得安卓系统得到了全面发展,也确保该系统实现了层叠式体制结构的构建,积极地提高了安卓系统实际运行的效率。
安卓应用系统基本组件
(1)应用表示层。
在应用软件实际运行的过程中,该组件能够有效地保证应用软件系统同用户的交流,并且在运行时,表示代码需要以特定形式表现,这样能够合理地缓解了系统内部设置的压力。
(2)无可示界面。
该组件同应用表示层的地位同等,都是单独安卓组件,但是最主要的差异就在于,该徐建使用者根本不能够在系统后台运行,而且不能够看到实际的运行状态[7]。同时,由于无可示界面自身的设计特征,无需同用户信息交互,但是却始终为其提供服务,因此,也可以将其当作无形用户界面。
(3)接收广播通知组件。
该组件同事件监听器相似,属于事件推送机制,而在其内部,将安卓应用当中的其他组件作为事件来源信息来进行推送,这就是该组件具体的服务内容。
(4)安卓开发环境搭建。
安卓智能操作系统是开放型的操作平台,所以,在安卓操作系统基础上所开发设计的应用软件,仅对系统原有安卓系统加装系统开发软件即可,这样就能够实现安卓系统应用软件开发。
4Java多线程编程
要想实现Java多线程,就需要积极地运用Thread类子类,使用覆盖方法,即run()[8]。把所要执行代码添加至上述方法当中。但是,这种实现方法存在自身不足,如果该类已经继承另一类,那么就无法对该类继续继承。其次,可以建立Java程序接口,利用该接口用户命令信息能够通过运行命令的方式重新编写命令,并且在重写以后沿数据接口能够直接送至电子设备命令执行阶段,进而有效地提升电子设备命令执行的效率。
5基于安卓操作系统手机遥控PPT播放软件的开发
实用性分析
由于PPT演示实际应用简单,并且图文并茂,所以,在报告或者是会议当中被广泛使用,是一种信息展示的有效形式。然而,传统PPT的展示需要会议的主持人员或者是演说者使用鼠标对PPT的文件播放进行控制。这种方法在实际的应用过程中,为了确保PPT资料的展示具有一定的匹配性,所以,演讲者与会议的主持者始终在电脑旁边,这样就会影响到演讲者个人发挥。在科技快速发展的背景下,激光笔代替原有鼠标,对演讲者来说是一种解放。然而,在PPT书写与绘画要求方面并未得到满足,因此,导致控制方式与演示需求间存在一定的供需矛盾,所以,必须要设计出能够脱离鼠标的一种演讲方式。正因为安卓智能手机系统具有一定的开放性,并且,其处理器的效率较高,所以,大尺寸高分辨率的屏幕都能够在手机中显示并书写。
系统设计
这种PPT播放软件通常被使用在个人电脑中,其架构与系统相吻合,可以被划分为两部分:①客户端;②服务器端。客户端就是在用户电脑中所运行的PPT程序,然而,服务器端则是网络架构服务器的一种链接形式[9]。在此范围内,客户端可以利用网络通信以及其服务器来实现通信。由于这种应用软件相对成熟,所以,其架构与操作系统都十分完善,可以同其他电子信息系统实现链接,并且实际的开发环境十分优秀。设计应用软件的时候,可以将其分成服务器的子系统与终端的子系统。在PPT应用软件当中,服务器端子系统的应用是一种有效地改进,并且被集中于软件系服务器端,可以在服务器端加装自己设计的手机遥控PPT播放软件服务器端。这种方法能够保证PPT系统当中的服务器端同移动终端子系统实现命令信息交互,并且实现移动终端子系统更好地控制手机遥控PPT播放软件。服务器的子系统,其主要的任务就是实现终端PPT文件发送的接收与解析,并且接受终端的控制命令等等。而移动终端的子系统,其主要的工作内容就是发出系统运行命令,同时需要对服务器子系统反馈PPT页面信息予以接受。另外,还应该不断强化移动终端的子系统,使其画板功能更丰富,确保其在手机遥控该软件的过程中,能够有效地下达命令,确保使用者能够以多种方式操控PPT展示。
软件测试与运行结果的展示
完成手机遥控PPT播放软件的编程设计工作后,必须要对其实际的运行状态予以检测,进而确保该软软件具有一定的实用性,同时,还需对其设计效果予以客观地评价。文章对手机遥控PPT播放软件及PPT的展示能力进行了实际检测,并且真实地验证了该软件的功能与效果。在实际的测试过程中,以不同移动数据终端同手机遥控PPT播放软件的服务器子系统实现链接,并且在测试的过程中确保软件自身链接的安全,在移动数据终端处输入相对复杂的信息内容,并且,该软件仍然可以在电脑的页面中快速反应出智能手机具体的指令信息内容。由此可见,站在客观的角度上来看,手机遥控PPT播放软件的设计是成功的,同时也证明了在安卓系统基础上开发应用软件的可行性,实际所开发的应用软件是具有现实应用意义的。
6结束语
综上所述,在智能手机发展和更新的背景下,很多人开始意识到随身通信工具的重要作用,所以对于智能手机更加重视。因为智能手机内置处理器处理能力极强,并且应用程序相对丰富与多样,因此,在人们的日常生产生活当中被广泛应用。当前,安卓操作系统是智能手机重要的操作平台,并给在市场中占据较大份额,所以对于社会发展具有积极地推动作用。由此可见,在安卓操作系统基础上开发应用软件并及时进行更新具有重要的积极作用。
参考文献
[1]杨潇亮.基于安卓操作系统的应用软件开发[J].电子制作,2014(19):45~46.
[2]饶润润.基于安卓操作系统的应用软件开发[D].西安电子科技大学,2013.
[3]王子榕.浅谈基于安卓操作系统的应用软件开发[J].通讯世界,2015(14):220.
[4]李帅.浅论基于安卓操作系统的应用程序开发[J].电子制作,2015(2):87.
[5]乔頔.Android系统应用软件3D界面的设计和开发[D].中国人民大学,2012.
[6]朱婷婷.基于Android平台的PKM软件的研究与设计[D].浙江师范大学,2012.
[7]尚忠阳.一种基于安卓手机的定位服务应用软件的设计与实现[D].北京邮电大学,2014.
[8]伍贤珍.基于Android平台的智能电话应用软件模块设计与开发[D].哈尔滨工业大学,2013.
可以帮你排版
可以参考:毕业设计大作战_百度经验杂志,这里有总结毕业论文的格式排版问题,希望可以帮到你~
近年来,随着全球网际网路技术的普及、计算机技术的迅猛发展、数字技术的瞬息万变,计算机工程在人们生活、生产中的应用越来越广泛。下面是我为大家整理的计算机工程毕业论文,供大家参考。
计算机软体大体分为三类,一种是总述,一种是系统软体,一种是应用软体,系统软体的作用是促使各个硬体按照一定的规律协调工作,保证计算机处于正常运转状态。而应用软体的作用则是为了实现某种使用愿望而开发出来的软体。
1计算机软体工程专案管理的基本概念
工程专案管理的含义工程专案管理主要是业主通过委托从事工程专案管理的企业,签署相关协议,工程专案管理企业有义务和权力代表业主在工程专案进行的情况卜干预和服务。工程专案管理企业可以协助业主同项目工程总承包签订一系列合同,只是起到辅助性作用,不直接与总承包企业或者施工、勘察、供货和设计签署协议或合同,工程专案管理企业有责任在施工过程中监督合同的完成情况。
软体工程专案的概况
管理人员开展有序的专案计划
企业必须把人员管理放在重要位置,在软体工程专案的开发上人员的调配问题是保证工程顺利进行的重要因素,因此,专案能否成功和工作人员的工作能力、写作能力息息相关,针对工程专案的操作类别不同,可以分配成各个研究小组,进行科学合理的针对性开发和高效的协作,有利于工程的快速推进和更加完善。小组内的人员根据自身优势,确定自己的工作内容和工作时间。对专案进行正确的认识和对风险进行评估,与此同时从节约成木的方而出发,形成科学的人力资源调配机制,使专案得以顺利开展。
质量和配置管理工作
软体的质量管理工作是整个专案的核心工作,质量管理决定着计算机软体工程专案管理是否真正的成功,通过一系列保证质量的手段,有计划的编制、控制和保证专案质量。保证专案质量的方式可以通过定期的进行质量评估得以实现,在日常专案管理中要不断的对工作进行考查,对于专案不合格的地方要提出意见并且考虑整改措施,不断完善整个软体配置管理的记录工作,使专案的质量能有一定的检测体系,这样开发者会对专案工程的质量问题有比较深入的了解。
风险评估和管理工作
风险管理大致分为两种工作,一种是风险识别,另一种是风险评估。得到评估结果以后要针对问题提出相应的解决办法,定期检测计算机软体工程的好处是可以减小产生风险的概率,还可以避免一些因疏忽而产生风险,使专案的损失减少到最低,也减少了因专案风险而造成的一些相关责任人的利益冲突。
2计算机软体工程专案管理中存在的问题
管理团队的协作问题
分工合作是我们完成一个专案的基木因素,在软体开发方而更需要每个人的智慧一起凝聚出果实,共同享受成果,而目前在计算机软体工程专案管理方而资讯的交流方而存在一些问题,例如分工不清、团队不合作等问题。
需求分析和实际中的业务存在差距问题
计算机软体工程专案没有结合实际的活动需求,也没有调查有效的资料分析,因此计算机软体工程专案管理在开发出新的产品以后并没有取得理想的业务效果。
风险管理的问题
专案的风险工作是企业需要考虑的很重要的问题,如果风险没有相应科学管理,很容易带来巨大的损失,但是很多员工并不懂得如何规避风险,缺乏相应的专业知识,更是缺少对风险工作的管理,导致很多企业在风险来临时无法做出正确行动,造成巨大的经济损失。
3计算机软体工程专案管理的对策
对风险管理和工作进度进行有效管理
制定风险管理制度。计算机软体工程专案管理的工作人员必须具有一定的风险识别意识和相应的遇到风险的专业知识,并且能有效的控制风险的能力。在平时要做好风险评估的管理报告,针对可能发生的风险要及时预测并且做出相应的解决行动。设定专门的人员对计算机软体工程专案定期进行风险的评估和检查工作。在整个专案中,根据需要进行多次的风险管理工作,因为风险无时无刻都有可能存在,检查的目的是尽量减少风险发生,在一般情况卜处理风险的措施一般有三种:减缓、规避和转移。提高工程的进度,不断的推进工程的工作效率。要制定详细的工作计划表,并且尽可能达到最高的工作目标。工作人员有严谨的工作态度和高效的作息时间安排,管理人员要密切关注工程进度,不断的督促员工完成应做的工作量,有条理、高效的完成对员工的工作任务的监督工作。
建立完善的管理体系针对计算机软体工程的人员日常管理工作,要建立科学有效的管理方案。合理安排人才资源,确保在进行计算机软体专案工程时人员调配顺利进行。专业知识的培训对于工作人员来说
是必不可少的,可以极大的丰富计算机软体工程专案人员的专业水平和实践能力,减少工作上的失误,提高工作效率和工作人员的素质。奖罚制度是对企业员工优劣的衡量标准,所以在计算机软体工程专案管理方而采取奖罚制度可以极大程度上调动员工的积极性,使员工主动为企业创造效益,企业的发展才能有长远的未来。
建立合作的团队
在员工内部建立有效的交流机制。员工的内部工作经验交流是非常重要的,因此要完善沟通方法,开辟多种交流方式和渠道,不断的增强各个部门的沟通意识,使团队的力量不断凝聚起来。明确分工,责任落实到个人。计算机软体工程管理非常复杂,需要的人员也众多,因此必须要使每个员工明确自己的工作内容和范围,清晰的划分自己所需要负责的区域,清楚自己的责任,这样能够确保每一个步骤都井井有条,非常有秩序。调动整个团队的工作积极性。通过一些活动、奖励措施等使每一个工作人员全身心的投入到工作中去,愿意并想要去做的更好,不断激发团队的潜力和员工的协作能力,这样专案不仅会做的越来越好,员工内部也会越来越和谐并且充满正能量,企业的效益也会不断得到提升。
4结语
计算机软体工程专案管理的工作内容十分的复杂,要保证软体工程按照工程原计划进度顺利开展工作,并且要节约成木、保证质量,必须熟练对计算机软体进行操作,在现在的大多数生产计算机软体的企业中最为重要的就是软体工程专案的管理效率,软体工程专案的成功条件是软体专案要具有科学性和高效性,在此基础上企业的合理管理也是企业走向成功的关键。
1现状分析
培养高质量的软体开发人才一直是社会和行业关注的焦点。早在11年前,对于工程教育的迫切性就被人提出来[1]。工程教育本身也作为一个系统问题被讨论[2]。现在从国家层面在战略上建立了软体学院进行专门培养,各个高校也不断推出新的课程、新的措施方案。在这一领域虽然比过去似乎已经有了翻天覆地的变化,但来自企业的呼吁似乎一直反映出诸多不尽如人意。更多的思路希望将企业的力量直接引入到教学,比如实训基地等[3];而国家层面也非常关注实训[4]。但实际效果可能变得流于表面,因为企业往往难以将核心的工作拿给学生做,而其训练的专案也并未从更全面系统的角度去设计,其锻炼效果就有限了。在软体开发这一领域,由于其具有变化迅速,新技术不断涌现的特点,导致不少在教育内容上选择了追逐新技术、新语言、新平台,以能用会用这些流行主流技术为目标。典型的代表就是北大青鸟,有些二本的学生在毕业前专门花钱去青鸟学习,似乎可以看到这种教育的优势。但另一个矛盾的情况是,往往那些关注员工后劲的公司却不愿意招聘青鸟的学生。如果将目光投向国外的顶级大学,例如斯坦福,其教学上并没有去“依赖”校企合作,以及很热门的“实训”。其核心课程依然是过去的传统经典课程。以一个研究生为例,一学期能修2门课是正常,3门就很优秀。它并没有追逐所谓的新技术。但无人质疑其学生的工程能力、科研能力和创造能力。
2什么是计算机工程能力的核心
什么才是我们软体开发教育的核心知识架构,怎样才能培养学生可持续发展的核心竞争力?我们调查过一些非常高水准的软体开发者,发现他们往往在底层软体上持之以恒地进行长时间深刻的锻炼,然后在未接触的新领域才能非常迅速地掌握核心。例如,一个非计算机专业的系统分析员曾经“只”在DOS这种原始的作业系统下玩了10年,甚至自己写过一个汉化的DOS。他只有书本上的一点点网路知识时,就用一两天时间解决了一个学通讯的研究生1个月都不能解决的网路故障。这是一个典型的例子,他并没有“实际的”网路经验,什么使得他如此轻松地进入了新的领域呢?而另一个曾就职于vmware、google等顶级公司的程式设计师,在Unix下只用C语言做了10年系统级程式设计。当用Java,C++甚至是javascript时,其学习时间只是1天,很快就比做了几年专门java程式设计的程式设计师还精通。如何才是软体开发人员的本质力量?什么才能让他们在变化万千的新技术面前屹立不倒,乘风破浪?
计算机工程能力
我们认为计算机工程能力包含两方面的内容:1核心知识架构;2计算机的思维方式。什么是核心知识架构呢?是反应该领域最基本规律和支撑技术的知识。简单地说就是传统的作业系统、编译、资料库。作业系统将硬体、软体、高阶语言和汇编融汇在一起,它几乎包括了软体工程中所有重要的因素。举一个简单的例子,似乎只有面向物件这种“高阶东西”才有的虚拟函式运用,其实在Linux中就有相应的虚档案系统。作业系统是最为复杂的计算机工程之一。编译融汇了大量的演算法,而且能让大家真正看“穿”语言的外表,深入到其内里,体现了最根本的计算机技术。其优化技术,也深刻地和硬体交融在一起,很好体现了底层风范。资料库,不仅是运用演算法最多的地方,甚至是超越作业系统的一个复杂的系统,从快取技术到i/o优化,到索引,再到事务处理,无一不是反映计算机最深刻规律。大家可以发现,所谓核心知识架构,都具有两个特点,反映本质规律,体现软硬融汇交织。也只有这样,才能建立下面谈到的“计算机思维方式”。
核心知识架构
为什么我们没包括一些新兴的语言和技术呢?似乎它们很“实用”。而且已经出现的问题是,按照传统科目和方式学习后,学生在企业什么都不会。这也正是大家关注工程教育的初衷。为什么不强调这些新兴实用技术的教育还在强调“古老”的“基础”。计算机领域一个显著的特点是,表面上知识更新非常快,新技术、语言层出不穷。这很容易导致当我们发现学生能力欠缺时,将问题归罪于新技术的学习不得力,知识结构老化。但其实目前的问题可以从另外一个角度考虑,是否是基础教育不得力?分析国外著名大学,如斯坦福、伯克利的课程,我们发现两个特点:1关键的基础课程,如作业系统、编译原理、资料库,始终是其最重要的课程,并没有过分追逐各种“新潮”技术。2学生一学期能修的课程非常有限,一般为3门课。而国内却呈现相反的状况,比如编译原理被降到了选修课的角色,新潮课程层出不穷,一个学生二年级一学期要修13门课。在这种走马观花的状况下,计算机这种具有强烈“手艺”色彩和工程实践的学科,被完全纸上谈兵化。而一些可怜的实验内容,还被学生的复制拷贝所湮没。我们认为,恰恰是这种情况,使得基础核心知识教育没有工程化,没有充分动手,导致了基础知识教育某种程度上的巨大失败。从以下鲜明的对比可以窥见问题的端倪:国内学生反映作业系统课程是文科课程只需要背条款考试即可;而相对地,国外著名高校作业系统课程要求学生实现“小”作业系统。国内资料库只讲其应用如大量讲解sql等运用,sql即使非计算机专业人士也很容易学习,这也是它被发明的初衷。斯坦福的资料库课程中有一门需要实现一个数据库系统。在笔者走访的计算机工程上优秀的人才,发现其共同的特点就是在诸如作业系统或资料库上都有很深入的学习经历,比如前面提及的自己构建过汉化DOS系统,或者在Unix下,做核心以及驱动很多年等。而当他们接触新技术时,之前深刻的经验和淬炼的思维就让他们如虎添翼,快人一等。更有甚者,国外真正的最顶级专家,都是在这些领域有无与伦比水平的专家,从delphi的缔造者,转战到微软并入主平台的开发,也可看到雄厚的底层知识和能力的巨大作用。所以“老”知识并不是障碍,而是通向天堂的阶梯。究其原因,就涉及到工程能力的第2个方面,计算机思维方式。
计算机思维方式
对非专业人士它是很抽象的概念,而对真正专业人士,这又是一个非常鲜活的概念。这里限于篇幅,我们只举一个简单的例子。面对在C++中外部程式码如何直接修改私有变数的问题,计算机的思维方式就是:物件也是放在记忆体中,只要能拿到物件的地址,并知道物件的布局,那么就可修改。而没有建立这种思维的人,就完全被高阶语言的语法所左右,无从下手。一句话,无法看到本质,没有从下而上的底层思维。核心知识课程的有效深入教学和计算机思维方式建立有何直接关系呢?我们认为核心知识因为其反应了计算机本质规律,而且从底层建立起来,所以对其深入掌握运用后,它从开始的逼迫到最后的陶冶,最终潜移默化地让受众建立起“计算机思维方式”。而这正是计算机工程师安身立命之本,就如同音乐家有其独特的音乐思维方式一样。为什么诸如java之类的课程于建立计算机基本思维不太合适呢?因为它更高层,无法让学生看到最下面。而唯有彻底、深刻和系统的底层淬炼,才能真正建立起“计算机思维方式”。
3如何打造强大的计算机工程能力
大家一方面指责基础课程的“空洞”、“无用”、“陈旧”;另一方面在不断开设的海量新课和技术中压得学生更加远离程式设计,远离实践。即使能培养出熟悉某种语言的学生,也无法看到他们和培训学校有何不同。实训也似乎没有根本解决问题,我们在实践中发现,往往是那些自己醉心于程式设计的学生最后有着卓越的表现。让基础知识能支撑和指导实践,而非仅仅“符号”,并引导学生进行高效的实践。
“3块连一线”,4门基础课程整合打造核心知识架构
我们将4门基本课程进行贯通式整合,着力塑造学生的“计算机思维”。下层的是3门基础课在上一小节探讨了其在工程能力训练上不可替代的重要地位,对软体开发环境产生支撑。而软体开发环境又通过精心的设计和工程实践,从应用角度将3门课程所学的知识串联起来。从而将基础知识和工程开发更有机整合在一起。首先,阐述为什么将以上课程整合在一起的理由。要回答这个问题,必须先回答什么东西支撑了优秀程式设计师。在我们的调查人员中,无一例外地都具有很深厚的底层软体开发背景。有长期从DOS的Hack入手的;有长期从事Unix核心程式设计的;有从Windows的driver起步的;有以反汇编逆向为根基的。长期在最底层的经历,使他们建立了最真实和能触控的系统观,能以计算机的方式思考。所以面临新技术时,他们能透过新形式很快把握其精髓,深刻地把握其实质。“太阳下面没有真正的新事物”,例如号称21世纪最新的重要的软体技术AOPAspectOrientedProgramming,AOP,其实在20世纪60年代就出现在了汇编一级的软体技术中,它本质就是钩子技术的系统化。在底层的软体世界,我们不仅能够用到那些所谓的最新的技术,而且能看到其本质我们可能就是用机器码自己构建出来的,而不被新技术的华丽外衣障目。这些使得具有底层经验的开发者,更有创造力,更能创造,也更能洞察迷乱后的本质,庖丁解牛,解决那些异常复杂的工程问题。举一个笔者遇到的真例项子,一个具有深刻底层经验的程式设计师一直只有C语言和作业系统程式设计经验和一个只有深刻Java经验的程式设计师,在同时学习Javascript的闭包概念时,后者一个礼拜都还有些似是而非。前者很快就能自如运用,且最后指点了后者1个小时,后者顿时豁然开朗。这是典型的“新”与“老”,上层和底层经验在面对新事物时的对比。既然底层软体赋予我们如此强大的能力,那么哪些是底层软体呢?大家公认,作业系统、编译和资料库由来就是计算机工程自身的根基。所以,我们必须将这3门课涉及的知识好好淬炼。而如何将3门课的知识和我们日常的软体开发联络起来呢?如何用它们指导平时程式的开发呢我们大多数是开发使用者级软体,不会开发核心软体,因此许多人认为几乎整个在核心中的作业系统对使用者级软体开发无从指导?另一门课,《软体开发环境》解决了这一问题。它有一条主线,通过反汇编将C语言和汇编串联起来,让系统级的知识从高阶语言的面纱下展现出来。同时用逆向工程这把庖丁之刃,将编译、连结、面向物件等软体开发中的重要知识块剖剔,让底层与上层贯通一气。而逆向的技术技巧,本身也是非常高阶的软体开发技术。因此,我们用“3块连一线”来总结4门课的关系是最好不过了。为什么不纳入语言课程,比如C/C++语言?从我们的工程经验来看,语言只是计算机原理和思想的载体,是表述方式而已。为了表述形式而专门花大力气是不值得的。比如,国外的著名大学很多都不开设语言课,在其他课程作业中必须用C语言程式设计,学生们就在那里锻炼了。真正的语言的力量并非来自语言本身,而是底层知识为支撑的专案锻炼。我们的思路是以构建式完成大量的完整系统的编写,这样就很好锻炼了软体开发和工程能力。同时,“软体开发环境”本身从逆向层面也对语言有了深刻的剖析,这是纯粹的语言课难以完成的。另外,从大纲安排上,我们在大一就会让学生用C语言来初步接触程式编写,这时并不适合放入太高阶主题。而在教学中,语言的力量已经渗透到一个个工程构建中,随风潜入夜了。为什么不纳入演算法课程?从某种程度上,“程式就是演算法与资料结构吗”?我们认为在系统中运用演算法,演算法才具有生命力。而编译、作业系统、资料库以及我们专门设立的一些课程设计将全面运用各种演算法和资料结构。在实战中运用并学习提升才是王道。这也正是构建式学习的精髓所在,这也正是探索式学习培养学生的创造能力的精髓所在。演算法课已经为我们准备了元件,就看你怎么去组装甚至改造。
以构建主义的思路,深度实践的风格改革课程
前面我们论述了底层知识架构的重要性,那么怎么来将它们实际地建立在学生的工程实践中呢?简单地说就是“构建一个具体而微的系统”。讲作业系统就构建一个小作业系统,讲编译原理就构建一个我译器。同时,设计一些跨度较大的课程设计覆盖这些课程的一些重点内容。构建完整系统本身就可真实淬炼工程能力,而这些内容的复杂性、难度以及运用知识点的广度,本身就超越了简单的企业实训专案,在培养人才方面具有系统性、完整性、挑战性独特优点。我们需要的是运用团队的思路和现代软体工程的手段,将其开发过程管理发起来,从而熟悉企业级开发的工具链,将软体工程学到的知识贯通到实作中。这也回答了“和以前相似的强调基础课程教育,什么特点使得我们的做法能获得强大的工程能力?”这一问题。以前更多注重理论知识的学习,而现在的做法是回归计算机工程的自身科学规律———实践为王。
改革考核评价标准,充分强调动手实践
以前我们一直是卷面考试,实验分数只是象征性的点缀。这本身违反了计算机工程的特点。只有改变评价考核标准,才能真正驱动学生充分锻炼工程。在课程软体开发环境中,我们采取了平时的考试结合期末考试的方式,而两者均为软体编写。期末考试在实验室上机编撰指定题目。不强调对一些函式名等死知识点的记忆,可以用线上帮助。这本身也符合软体开发的规律。
4结束语
我们在计算机工程教育上试图做一些回归本质的工作,也取得了一些效果。比如在软体开发环境中,学生普遍认为:“似乎将3年学的程式课全学习了,收获很大”。更有同学,在外企公司的面试中,直接运用了课堂上的知识,这在传统的教学环节中是难以获取的。但整个工作尚在起步阶段,所以仍有很多工作需要做,许多环节需要优化。我们希望在以后的工作中更深入探索工程教育的规律和本质。
326 浏览 4 回答
282 浏览 3 回答
284 浏览 5 回答
161 浏览 6 回答
200 浏览 4 回答
106 浏览 3 回答
302 浏览 5 回答
186 浏览 5 回答
322 浏览 4 回答
279 浏览 2 回答
143 浏览 7 回答
178 浏览 2 回答
353 浏览 5 回答
234 浏览 3 回答
287 浏览 3 回答