计算机软件基础课程设计的探索与实践

2023-02-28

1 问题的提出

大多数地方高校本科教育的培养目标是:培养创新能力较强的应用型人才。而应用型人才的重要特征是:学生的专业素质能够适应市场的需要。电子信息类专业的学生要想适应市场需要, 必须坚持“软硬兼通”的培养模式[1]。据统计, 电信领域70%以上的增长靠软件, 在一定的硬件设施基础条件上, 软件业务是电信产业的主要业务增长点。由于硬件基础设施是相对稳定的, 而软件业务的发展变化是非常快的, 它必须适应新形势的发展和用户的需求, 因此电信软件的发展带动了整个通信行业的发展, 进而成为推动整个IT行业向前发展的主要动力。目前, 在大学教育扩招的背景下, 对于纯硬件职位, 用人单位在招聘本科人才时, 几乎都要求有相关工作经验。也就是说, 出于成本的考虑, 用人单位“不敢“让应届本科生直接从事硬件工作。而单纯懂软件, 不懂硬件也不利于系统搭建。事实上, 约有8 0%的行业应用软件是由非计算机专业的人编写的。而既掌握本专业知识, 又掌握相当计算机应用知识, 两者结合成为了各行业对高校大多数专业毕业生的普遍要求。在此背景下, 计算机软件基础作为计算机软件的基石成为高等院校电子信息类专业的必修课。

目前, 地方高校电子信息类专业学生对计算机软件课程不够重视, 认为软件是计算机专业的课程, 电子信息类专业软件知识讲的少, 即使学也学不过计算机专业的, 所以在学习态度上“欺软偏硬”。殊不知, 软件是电信系统的重要组成部分, 是找到理想工作的法宝。此外, 由于社会就职压力的需要, 学生普遍有好好学习专业课的愿望。但在学习软件知识开始阶段, 由于进行程序设计需要具备语言、算法、数据结构等知识, 而计算机软件课程教学的对象是低年级学生, 这方面的知识预备非常薄弱, 对其学习方法陌生, 自学能力及分析、解决问题的能力较弱。从心理学角度看, 学生原有知识结构在该课程方面的同化能力弱, 如果处理不当, 就使得有意义学习减少, 增加挫折感, 削弱了学生主观参与的积极思维活动, 不仅不利于激发学习兴趣, 促进创造性思维形成, 甚至会减少己经调动起来的积极性, 产生抵触情绪, 对后续课程造成不利的影响。

2 课设内容选取

《计算机软件基础》是计算机软件的核心课程, 其主要内容包括数据结构, 操作系统, 数据库系统概论[2]。开设这门课程的目的是让学生具有初步的软件编程能力, 掌握数据结构的相关算法, 理解操作系统的基本概念, 熟悉数据库的基本操作。为了培养学生的软件素质, 此课程也有相当数量的常规上机实验练习, 但是学生上机练习的题目规模较小, 所涉及到的上机内容也是以章节为主, 缺少一些连贯性和系统性。更为突出的是:上机内容仅仅从计算机专业的角度加强学生的软件素质, 并没有结合电子信息类专业特点, 以至于在大四进行的相关通信系统综合课程设计中, 学生对硬件有较好的掌握, 但对信源编码等通信软件知识所知甚少, 影响课程设计的进度。由此可见, 结合电子信息类专业的特点, 科学有效地培养学生的软件素质, 对于培养应用型人才起着至关重要的作用, 具有现实意义。

目前有些高校在为电子信息类专业开设的软件基础课程设计中让学生自行设计一个管理信息系统, 例如“学生成绩管理信息系统”, 虽然这类题目能够在一定程度上提高学生的软件编程能力, 但它没有结合专业特点, 学生课程设计做完后, 不能感受到计算机软件和专业课之间到底有何关联?为什么系统离不开软件?为了更好地加强电子信息类专业学生的软件编程能力, 我们在第5学期增加了《计算机软件基础》课程设计。该课程设计将结合电子信息类专业的基础课《信息论基础》和《通信原理》, 以Huffman数据压缩编码为主线, 着重培养学生运用计算机编程语言 (C语言) 编写通信领域相关软件的能力, 加深学生对数据结构算法的理解, 使他们掌握软件开发的实用技术和方法。教学改革的目的就是为了加强学生通信软件综合设计实践能力、创新思维能力的培养。我们强调用C语言实现, 不同于在《信息论基础》课程实验中对信源编码或信道编码的某个模块进行Matlab仿真, 仿真强调对算法的理解, 而用C语言实现既要对算法有深刻认识, 也要对编程技巧了如指掌, 两者缺一不可。从我校的课程设置来看, 计算机软件课程与其他课程的关联图如图1所示, 其中《计算机软件基础课程设计》重点针对信息论和通信原理信源编码内容, 进行相关的软件编写, 主要培养学生如下能力:编程能力、创新能力、检索能力、撰写文档能力等[3]。

3 课程设计的任务

以往的课程设计不成功的原因, 主要是没有充分考虑到学生的心理特点、知识结构和学生的个体差异, 任务难度安排不合理。任务太难会打击学生的信心, 例如, 用C语言编写专业课的应用程序, 由于学生C语言普遍学得不好, 绝大多数同学对老师布置的任务没有兴趣, 经常是一个班只有一两个版本。任务太容易, 例如老师已给出课程设计的参考程序, 则大部分学生只是把程序输入计算机, 同样不会有什么收获, 仍然起不到培养能力的目的。同时以往课程设计是以向学生传授知识为主, 采用的是注入式的教学方法, 学生的主体地位没有得到体现, 学习积极性不能得到充分调动。为了激发学生的学习欲望, 引导学生自主、主动地获取知识, 课程设计的教学方法应以启发式替代注入式, 由传授知识转为教会学生如何学习, 同时还要注意教学方法的多样性和灵活性。我们在以下方面作了改进。

3.1 跳跃性分级设计任务

针对学生的程度差别较大的情况, 设计了跳跃性分级任务。以往的课程设计中提倡学生先完成较低层次的任务, 然后鼓励他们向高一层次的任务挑战。但随之而来的问题是:若学生在某处遇到困难, 停滞不前, 在课程设计的有限时间内渴望向高层次任务挑战却没有机会怎么办?跳跃性分级任务能够在一定程度上解决此类问题, 它的主体思想是按模块划分任务, 借助某种方式打破模块之间的先后次序性, 使每个模块对于学生而言都是平行的, 学生可以“借力”任选能够完成的模块进行相关的设计, 从而屏蔽了任务的次序性, 实现了跳跃性设计。例如课程设计分成4个模块先后次序是, 即只有完成了模块A, 才能继续设计模块B, 以此类推。采用跳跃性分级设计后, 即使不能完成A和B, 学生也有可能实现C和D。可见, 跳跃性分级的关键是采用何种方式打破模块之间的次序性。动态链接库 (Dynamic Linkable Library, 简称DLL) 可以有效地支撑跳跃性分级设计。教师把每个模块编写成动态链接库, 学生若可以完成模块A, 则可以重新定义函数, 独立完成模块A;若学生暂时不能完成模块A, 则可以调用教师编写的模块A的DLL, 在此基础上去尝试完成模块B, 从而打破了必须先完成A, 再完成B的次序。对于教师提供的DLL, 学生看不到源代码, 只能调用, 若他们“借力”完成了模块B, 则有可能给他们带来启发, 进而去攻克模块A。以下是这次课设编码函数模块及相关简化注释:

3.2 验证型实验和设计综合型实验相结合

在以往的课程设计中, 非常强调其设计性和综合性的属性, 尽量避免出现验证性的设计[4]。所谓验证性, 就是教师把课设内容、原理方法、过程、结果等全部教给学生, 学生“照方抓药”, 对某个现象、问题进行验证。题目是相同的, 过程是一定的、相同的、重复的, 结果是已知的、唯一的。一旦课设中出现了验证性属性就意味着课设水平低, 不利于培养学生的应用能力和创新能力。但是验证性属性可以让学生对某个现象和原理方法有更直接的认识, 是学生培养过程中不可缺少的。我们在课设中适当地融入验证性属性, 就是让学生加深对数据压缩的理解, 让他们看到基本的编码和解码结果, 激发他们的学习兴趣, 让他们感受到课设的成果是有用的, 激励他们编写出更好的程序。在课程设计中, 我们把编码和解码的主函数告知学生, 并在主函数中以D L L的形式调用每个模块, 让学生看到最后编码和解码的结果, 隐藏具体的实现过程, 鼓励他们自己独立实现每个模块, 编写完整的程序。基本程序编写完毕后, 对于基础好的学生, 可以进一步引导他们开发基于马尔可夫链的自适应压缩编码, 让他们在实践中学习如何把复杂的数学模型转换成软件程序, 进而更深刻地体会到计算机软件知识在专业课中发挥的重要作用。

3.3 成绩评定合理

由于任务中每个模块的难度不同, 可以事先设定每个模块的难度系数, 评分时综合考虑难度系数、创新性和课设中的独立工作能力而得到每个设计的总评分, 这样评定成绩较为公平合理, 学生们争相挑战有难度的模块, 不仅促进了设计能力的提高, 而且能够让不同层次的学生都“有事可做”。为了培养学生实事求是、严肃认真的工作作风, 我们对抄袭现象决不姑息, 以30%的比例抽查一些同学进行口头答辩, 对于发现雷同的设计, 则取消这些学生的设计成绩。

3.4 重视课程设计总结报告

要求学生完成课程设计任务后对设计的全过程做出总结, 把自己在课程设计中遇到的问题、解决的方法及收获体会以及不完善之处总结出来, 总结的过程就是一个提高、深化的过程。在课程设计过程中我们注意培养学生下面几方面的能力。

3.4.1 编程能力

编程能力是当今大学毕业生特别是理工科大学毕业生的必备素质[5]。由于学生对编程普遍具有畏难情绪, 这时就要求教师一定要想办法来督促学生学习, 利用学生的好胜心、自尊心, 采用各种切实可行的教学手段, 更好地激发学生的竞争意识。虽然教师的教学示范在课设中起着积极的主导作用, 但学生的操作表演对全体学生的学习更有示范作用, 因此, 教师要尽可能地请学生上台来进行阶段性成果汇报。此时, 学生讲解时, 下面的学生看得更为认真, 他们会及时地毫不留情地指出别人编程中出现的问题, 同时也提醒自己在编程中要引以为鉴。教师通过学生的操作表演, 激发了学生之间的竞争意识, 鼓励学生互相促进、互相学习, 收到了很好的教学效果。

3.4.2 创新能力

创新是一个民族进步的灵魂, 是国家兴旺发达的动力, 学生的创新能力的培养已经受到了社会的广泛重视。教师要鼓励学生大胆地去想像、去设计, 不要被限制在别人的框框中。课设求解方法的多样化, 同学们之间的交流讨论可使他们在巩固理论知识的基础上综合考虑问题, 多方位思维, 还能培养互助精神, 这有助于学生综合素质的全面提高。另外教师在教学过程中要善于发现并培养有潜质的尖子生, 使他们成为“小老师”。在课设中, 当教师不能兼顾到每一个学生时, 就可充分发挥“小老师”的作用, 让他们对学生的问题给予解答, 他们与其他同学共同探讨, 共同学习, 也能减轻部分学生由于没做好上机练习而不愿直接面对教师的心理负担。在这种互帮互助中, 学生就能轻松面对难题, 有效地激发学习欲望, 从而达到很好的学习效果。

3.4.3 检索能力和撰写文档能力

让学生根据题目自己选择参考书籍和查阅文献资料, 一方面培养学生分析和解决问题的能力, 另一方面培养学生跟踪国际先进技术的现代意识。课设中, 教师指导学生充分利用先进的科学技术为课设提供信息化手段, 在网上、图书馆数据库中搜索信息, 检索文献, 查阅摘要, 阅读文章, 索取最新研究论文。然后要求学生对所检索到的信息资料进行加工处理, 就研究和讨论的某方面问题, 经自己的消化吸收、分析判断、归纳综合, 整理出阅读报告或文献综述。

文档编制是软件过程中的重要活动之一。软件开发部门都需要花费大量的时间和精力在文档编制上。课设中为学生提供某软件公司的软件开发文档撰写标准范例, 要求学生按照统一的标准和规范来撰写对应程序的文档, 告诫他们软件开发人员随意书写文档, 势必造成文档风格各异, 会给软件产品的维护、扩展功能带来极大的困难。课设中关键是培养他们的“规范文档意识”, 为他们今后的软件开发打下坚实的基础。

4 结语

通过这次改革的尝试, 笔者总结了一些教学体会和有待改进之处。

(1) 教师要勇于接受新的教学观念。新的学生观。学生其实有巨大的学习潜力有待于开发, 关键在于要还给学生“学习主动权”, 要充分体现学生在学习中的主体地位。学生的主体意识愈强, 他们对自身发展的责任也愈大, 对自己提出的要求也愈高, 愈能在教育活动中充分发挥自身的能动力量, 不断调整、改造自身的知识结构、心理状态和行为方式而达到较好的学习效果。

新的教学质量观。不能仅从学生掌握知识技能的程度和考分高低作为评判教学质量的标准, 而应从是否激发了学生的求知欲望, 培养了学习能力和创新能力来衡量。

(2) 由于学生长期习惯于注入式的教学方法, 习惯于被“喂着吃”, 因此学生对这种启发式的教学方法有一个适应过程, 表现在拿到设计任务后, 有不少同学感到茫然, 等待教师给他们参考程序。在以后的课程设计中应该事先把教师的教学思想向学生交代清楚, 让各阶段衔接得更好些。

(3) 以后的课程设计应该让学生自己选择一些更有实用价值的题目, 尽量作到一人一题, 这样可以真正杜绝抄袭现象的发生, 也可以更大程度地激发学生的学习热情。

摘要:本文首先以电子信息类专业为例, 对开设《计算机软件基础》课程设计的必要性进行了阐述, 然后提出了跳跃性分级设计任务, 把验证型实验和设计综合型实验结合起来, 对课设内容进行了改革, 取得了较好的效果。

关键词:计算机软件基础,课程设计,跳跃性分级设计任务

参考文献

[1] 胡伏湘.软件设计类课程实践性教学的研究与实践[J].计算机教育, 2008, 6 (2) :82~85.

[2] 周云, 辛华, 姚新宇.案例教学在计算机软件技术基础课程中的尝试[J].高等教育研究学报, 2007, 30 (3) :57~59.

[3] 丁茜.软件设计教学方法浅析[J].中国电化教育, 2007, 28 (12) :99~100.

[4] 张敏霞.程序设计语言课程教学方法改革的探索与实践[J].中国高教研究, 2004, 19 (2) :90.

[5] 郝爽, 李文阳.高校计算机课程中应用软件的教学模式研究[J].中国成人教育, 2008, 17 (1) :154~155.

上一篇:浅析工程造价信息化管理策略下一篇:基于CDIO教学理念的“城市历史文化与建筑保护”课程教学研究