今天我们怎样学软件技术,怎样教软件课程?
==================
注:
本文是我这几年以来针对软件技术学习与教学方式所思索问题的一个阶段性总结,写出来与朋友们交流。
金旭亮
2008-5-9
===============================
自从人类社会进入信息时代,知识总量急剧膨胀,软件技术更是进入了一个快速增长的新阶段,新的理论不断提出,新的技术不断出现,让软件从业者无不感到巨大的竞争压力。就拿微软技术而言,老的Win 32还没弄明白,2002年就蹦出了个.NET,桌面开发刚熟悉了Windows Form,2007年又变成了WPF,Web开发更是变化巨大,先是老的ASP退出江湖,ASP.NET取而代之,没多久又加上了AJAX,晃一晃眼Silverlight又在那儿向你招手……,从2002年发布.NET 1.0开始,5年左右的时间,.NET版本就从1.0一路蹦到3.5,原有的许多技术或被淘汰或被更新,短短几年时间,微软技术的各个领域几乎全都洗了一轮牌。许多人都感叹,老的东西还未掌握,新的东西又出来了!然而,“人在江湖,身不由已”,既要在IT业里混,就得认命。面对着这一切的挑战,该怎么办?
也许经验丰富的你会坚持“以不变应万变”的原则,结果却可能发现自己成了一只迟钝的鸵鸟,知识老化,面临着后辈强劲的冲击。
也许你不断地追踪最新技术的进展,但却疲于奔命,最终发现自己不过是一株“技术风暴”中的墙头草,永远跟在别人屁股后头跑,根本就看不到超越的希望。
我是一名IT教育工作者,有过十多年的软件技术自学经历,也有五年多的从教生涯,承担着向青年学生讲授现代软件开发技术的职责,这么些年来,我在高校中先后讲授过“Java/C++程序设计”、“面向对象分析与设计”、“.NET技术基础”几门与软件开发技术密切相关的课程,接触到了许多学生。由于工作的缘故,我一直在琢磨着这样两个问题:软件技术应该怎样学,又应该怎样教?
著名作家王蒙
[1]在其自述——《我的人生哲学》一书中说:“我是学生,学习是我的骨头,是人生的‘第一智慧’与‘第一本源’,思想美丽,学习着也是美丽的”。在王蒙先生看来,人生就是一个不断学习与成长的过程,在这个漫长的过程中,人应该通过不断的学习而完善自身,获得智慧。这应该是学习的本来面目与最终目的。
如果能从这个角度来看待学习,学习就不是一个负担了。然而,现实中我们大都是为了“谋生”而学习,说穿了,软件技术不过是实现个人攫取“名”和“利”的一种手段罢了,我怀疑,有多少人真能达到王蒙先生的那种境界?
当前浮燥之风弥漫社会,诺大的中国,很难有人能静下心来钻研技术和做点研究。我漫步于大学校园,曾见过“XXXXX让你10天成为.NET 程序员!”的大横幅在风中飘扬,我不禁苦笑,如果10天就能培养出一名.NET程序员,那象我这样愚笨之人,居然学了那么多年还无所成,岂不应该赶快找块豆腐一头撞死?
南宋人郑樵所著之《诸葛亮传》说:“初,亮在荆州,与元直及汝南孟公威、颖川石广元游学,三人务于精熟,而亮独观其大略。”
请注意诸葛亮与元直等三人的学习方法的重大差别。元直等“务于精熟”的学习方法,其实正是当前我国高校中所占据绝对主导地位的思想,在这种主导思想下,许多课程的教学安排是讲授得细之又细,比如计算机系所学之高等数学一般要讲两个学期,而象北大所编之本科生教材《离散数学教程》,更是按照3个学期共220学时设计的。我怀疑这种门门课都深挖细掘的教学方式,在现在这个知识爆炸的时代,是不是也应该有所调整?要知道,一个学生在学校里使用的学习方法,将会不自觉地跟随着他很多年,而这种学习习惯,恐怕难以应对软件技术的现实,问一下:你现在有多少的时间和精力对各种技术(哪怕是很重要的主流技术)进行“深挖细掘”?
是否在软件技术的学习上和教学上都有所调整,走一走“观其大略”的路子?
既要学习,就要选择好书。请到书店看看,有关软件开发的书往往占据科技书店的半壁江山。国内计算机图书市场前几年是泥沙俱下,读者在网上怨声载道。这几年好些了,各大出版社或影印或翻译或原创,都出版了许多有一定质量的书籍,但我感觉好书仍然不多。
现在不少的技术书籍,一本比一本厚,装帧越来越精美,相应地价格也涨船高,但其中的“干货”却很少。如果给书籍减减肥,不仅节约读者金钱,更节约了读者宝贵的时间和精力。
我看过不少的书籍,其实要讲的东西就那么多,浓缩一下,许多篇幅可以压缩三分之二还多。不要将书籍变成满是图片的“操作手册”,或整页都是代码的程序清单。
我个人感觉,一本真正有价值的技术书籍,要不能引发读者深入的思索,要不就能帮助读者形成对某个软件技术领域的全局观,在此全局观下去学习具体的编程技术,就能事半而功倍。
著名数学家华罗庚先生曾有言:
学习数学要先把书读厚,再把书读薄。移到软件技术书籍这一领域,我觉得把书写厚很容易,而要把厚书写薄很难。
期望能看到有质量的“薄书”来帮助我们高效地学习软件技术!
软件技术是个庞大的体系,任何一个软件学习者都很容易陷入“见木不见林”的困境,而互联网如果应用不当,会加剧陷入这种困境的可能性。
许多人非常推崇搜索引擎对学习的重要性,有问题“谷歌”、“百度”一下,一切就有答案了。因此,现在有不少软件工程师(尤其是初学者)高度依赖于互联网来帮助解决软件开发中遇到的实际问题,这种方式的确非常有效,值得大力推崇,但要知道,“万应灵丹”也有不灵的时候,有不少困难的问题,在互联网上根本就找不到有效的解决方案。
另外,通过互联网学习软件技术有其难以克服的弊端,可以简单分析一下:
第一:通过互联网得到的知识往往正确与错误并存,这就要求具备较强的鉴别与判断能力的,不是每个人都天然地具备这种素质的。
第二:通过互联网得到的知识往往是是零散的,而且信息量过于庞大,要由这些碎片“拼”出某个技术领域完整的知识框架,在许多情况下非常困难。
我感觉,对软件技术的学习,应该是先有一个某个技术领域的全局观,然后再去深入钻研某个技术子领域,即“先见林后见木”。而要想形成全局观,阅读经典的技术书籍与综述文章,听相关领域专家的访谈或其讲授的各种课程,以及参加各种技术讲座,是一个有效的方法。在形成对技术的全局观上,通过互联网搜索来的鱼龙混杂的知识有可能是帮了倒忙。
因此,软件技术学习者要对互联网有正确的认识,才能尽其利而避其弊。
前面说到学习软件技术要“先见林后见木”,要想“见林”,必须高度注重计算机科学理论的学习。因为理论往往是现实的概括,是认识的深化,是“见林”重要手段,在理论的指导下学习技术和进行实践,往往“事半而功倍”。
然而,计算机科学有许多理论是比较抽象难懂的,怎么学习它是一个值得深入探讨的问题。有这么一种观点很流行:
不要以为在大学里学习的许多抽象复杂的理论课没有用,要好好地认真学习,别去问它们有什么用,等你们工作以后,就会慢慢地体会到这些知识的作用了。
几乎每个老师都这么说,学生对此也不敢有任何的怀疑,难道这有什么错吗?
然而,我却渐渐地怀疑起这个观点来。因为如果不明了某个计算机科学理论的实际背景,有可能把握住它的精髓吗?我看不可能,而且这种观点有些情况下还成了教师在教学上不负责任的“挡箭牌”。据我所知,在当前教育方式下,计算机专业学生一个学期往往要学它七八门专业课,其中还有五六门是闭卷考试,根本就没有足够的时间去消化与吸收知识,煮成夹生饭是正常,煮熟了才是怪事。
但我并不是反对认真学习软件科学理论,而只是强调软件科学理论的教学与学习方式应有所转变,要遵循“
理性知识感性掌握”的基本原则。
因为
抽象的理性的知识要转化为具体的感性的形式后才能为人所掌握。
这个不是什么新观点。就拿公认为抽象难学的数学来说,多位杰出的数学家就说过:只有把抽象的数学定理形象化,才算是真懂。当代数学家徐利治
[2]曾多次撰文强调中国数学教育要改革,要培养学生的数学直觉,要给学生讲授数学史,要锻炼右脑的形象思维,要教会学生运用科学归纳法而不是只讲授演绎法,能从特殊例子中发现一般性的东西……。
这些观点对于我们学习也比较抽象的软件理论非常有帮助和启发。比如不动手做一个小的编译器出来,就很难对相关编译理论有深入的理解。又如在项目中需要为某个实际问题建立模型,设计算法并评估解决方案时,才可能会体会到算法理论的作用。
在归纳的基础上演绎,在感性的基础上抽象,是行之有效的学习方法。
脱离理论的历史渊源与现实背景去学习理论,以考试为目的对理论死记硬背和生搬硬套,不可能真正掌握理论。
基于对软件技术学习与教学相关问题的思索,我自己进行了一些实践。从2003年开始,在北京理工大学为本科生开设了“.NET软件技术基础”通识选修课(面向全校各专业的学生),我在教学中渗透了以下的原则:
(1)兴趣是学习的第一动力。我自行设计和收集了可现场演示的大量软件实例(比如将数学与软件技术结合起来创建出绚美的计算机图形),向学生展示“现代软件技术能做这么多有趣的事情”,以此来激发他们对软件开发的兴趣。
(2)理性知识感性掌握。通过现场设计并完成一个小的软件实例(比如设计一个小程序自动生成数学练习题,给小学生练习四则运算),向学生形象地展示出软件开发的典型过程,从而帮助他们直观地理解软件工程理论。我觉得课堂讲授的重点是帮助学生形成对某个技术领域的感性认识,并指出如何在感性认识的基础上形成技术全局观和上升为理性知识的途径,而将理性认识的形成留给学生自己去完成,不需要在课堂上详细讲授示例中的每个技术细节与编程技巧。
(3)先见林后见木。比如在介绍ADO.NET时,先根据自己的理解将其整个技术的“骨架”抽取出来,点出其中的关键点,然后再分析具体的实例。我觉得一名软件技术教师应该是一名导游,带着学生在“软件王国”里“旅游”,告诉他们这儿有什么风景,那个又有什么景观,整个“技术森林”是什么样的,大致分为哪几大块区域,每一块森林子区域中又有哪几种具体的“技术之树”,要先用“望远镜”去了解“技术森林”的全貌,然后再用“放大镜”去研究具体的“技术之树”……。
(4)技术学习与社会现实相结合。《.NET软件技术基础》共32学时,讲10次课,每次课我都带领学生到某个 “.NET技术景点”去“旅游”,展示其技术发展的趋势和脉络,而最后一次课更是抛开具体的技术专讲“故事”——介绍IT业的风云变幻,以开拓学生的视野。
我这门课几乎每学期都能挖掘出几名好学生,而且成功激发了有些学生原先潜在着的对软件开发的兴趣,执续努力两到三年自学软件技术,在本科毕业时跨专业直接报考计算机专业研究生,或者在毕业时进入IT行业的知名企业。
在每学期针对每门课程进行的学生评教中,我这门课得分从未低过85,而在最近一次2007~2008学年第二学期的学生评教中,这门课程更得到了96.9的平均分,为我从教5年以来的最高分。
从教学实践上看,“观其大略”的“见木又见林”,而以“见林”为主的教学原则是有一定效果的。我相信这对于软件技术的自学者也有一定的借鉴意义。
互联网的普及给传统的软件学习与教育方式以巨大的冲击,我个人感觉基于互联网的在线教育可能是整个变革的突破口。软件技术学习与教育将进入一个个性化的新时代。
现在有多家IT培训机构在网上招生,诸如网易等各大网站也纷纷提供在线教育的功能。拿微软公司为例,在MSDN上介绍其最新技术的Web Cast拥有很高的下载量。互联网上还可以搜索到许多集声音、动画和视频为一体的教学课件(比如众多的Flash格式的电脑教程),其下载量惊人,甚至于许多传统的软件技术书籍,现在也要在配书光盘中附上相关的视频教学内容。这一切都说明人们通过互联网以多媒体的方式来学习新知识已成为一种现实。
虽然现在基于互联网的在线教育有了很大的发展,但我个人认为整个还处于初期发展阶段,比如现有Flash形式提供的课件虽然很好,但仍是人与机器间的“单向沟通”,无法实现学习者间的相互交流。这可以类比于早期的单机版电脑游戏,虽然单机版电脑游戏精品很多,但最终还是由玩家可以互动与交流的网络游戏主导了电脑游戏产业。
另一方面,网上在线教育与传统的教育模式相比有着自己的独特的优点和缺点,“老革命遇见了新问题”,传统的教育理论与方法必须要有新的突破和思路。
计算机技术的飞速进步和IT行业竞争的空前激烈,使得不断学习与提高自己的能力和素质成为每一个IT人的迫切需求,这其中隐藏着巨大的机遇。
我很关注着网络教育的发展,从去年下半年开始,我与CSDN合作共同在ITCAST教育平台(http://www.itcast.net)上进行网络在线教育实践,试图搭建一个基于互联网的虚拟学习社区,通过一系列的循序渐进的系列课程,帮助学员掌握.NET软件开发技术,降低其学习成本,提高其学习效率。第一个.NET入门教学系列于去年底上线以后,先后举办了几期试验班,出乎意料之外的是,学员90%以上是在职IT从业人员而非在校学生,这也从一个侧面说明了 “终身学习”时代的确已经开始。从实验班得到的数据上看,如果课程设计合理,在线学习的学员由于目的明确,主动性强,对知识与技能的掌握程度并不比传统的面对面授课低多少。而且线上教育成本低廉,方式灵活,学员在学习时间和学习内容上可以各取所需,拥有很大的自主权,则是传统教育方式所无法比拟的。另一方面,从教学组织方式上看,线上教育可以随时跟进知识和技术的最新进展,并且可以通过互联网为学习者搭建一个跨越地区界限的平等的学习交流平台,具有独特的优势。
我认为在线教育是一个方兴未艾的新的教育领域,其发展前景广阔。基于互联网在线教育的发展,对于打破我国现有教育资源分配的垄断与不平衡状态,提升全民族的教育水平有着巨大的推动。一流强国必有一流的教育,而一流的教育将培养出大批高素质的国民,这对我国发展成为文明和民主的现代化国家起着决定性的作用,百年大计,教育为本!
[1] 王蒙,现代著名作家,主要著作有《青春万岁》、《活动变人形》等,1958年的“右派”,1963年被“发配”新疆逾16年,人生境遇坎坷,1986至1989年任文化部长,著作等身。
[2] 徐利治,当代数学家,西南联大毕业,师从华罗庚等数学大师,其重要成果有“徐氏逼近”、“徐氏渐近公式”,“Gould-Hsu反演公式”等。
分享到:
相关推荐
《软件技术基础课程全套PPT教程》是一套全面讲解软件技术基础知识的教育材料,适合初学者及希望系统学习软件开发的人员。此教程以PPT形式呈现,内容丰富,易于理解,结合了教师在课堂上的讲解精华,为学生提供了丰富...
计算机软件技术基础课程是自动化专业学生必选的一门核心课程,它主要涵盖了计算机科学与技术领域的基础知识,旨在为学生提供全面、深入的软件开发和技术理解。这门课程的重要性在于,它构建了学习者对计算机系统、...
《软件测试案例教程-吕云翔》是一门深入讲解软件测试技术的课程,涵盖了从基础概念到具体实践的多个方面。课程重点讲述了白盒测试和黑盒测试这两种主要的测试方法,同时也涉及到了面向对象软件的测试策略以及特定...
* 利用软件建模与分析课程所学知识和方法独立完成所布置题目 * 掌握面向对象的分析方法 * 能够积极上网查询所需资料 * 提交设计报告书,可以选择打印和手写 7. 答辩与评分标准 本课程设计的答辩与评分标准包括: ...
\01软件测试基础视频课程 \02软件测试流程及测试体系视频 \03自动化测试技术视频 \04自动测试工具QTP的使用视频 \05性能测试技术视频 \06性能测试工具loadrunner使用视频 第一讲 软件测试理论体系模型? 主要内容: ...
在现代通信技术中,软件无线电(Software Defined Radio, SDR)是一种重要的概念,它将传统的硬件功能通过软件来实现,从而极大地提高了通信系统的灵活性和可扩展性。本课程旨在深入探讨软件无线电的基本原理、设计...
在软件开发过程中,技术文档是不可或缺的一部分,它不仅有助于团队成员之间的沟通,还能确保项目的顺利进行和后期维护。本教程“软件开发技能实训教程——技术文档篇”将带你跟随Microsoft工程师的脚步,深入学习...
### 国外软件工程课程教学知识点详析 #### 加利福尼亚大学伯克利分校计算机系软件工程课程 ##### CS169—软件工程 **课程目标:** - **核心内容:** 设计、开发及维护大型软件系统的核心概念和技术。 - **模块化...
计算机软件技术基础教程是一门旨在帮助初学者理解并掌握计算机软件技术核心概念的课程。这门教程涵盖了软件开发的各个方面,包括但不限于编程语言、数据结构、算法、操作系统、数据库管理和软件工程的基本原则。NLC...
2. ASP.NET 开发资料:包括微软 ASP.NET 2.0 快速入门系列课程视频学习、微软 ASP.NET 开发实践系列课程、太平洋 ASP.net 视频学习和软件学院 ASP.net 视频学习等多种 ASP.NET 教程。 3. SQL Server 开发资料:包括 ...
配套软件"管理运筹学配套软件3-5版.zip"是为辅助学习和实践这门课程而设计的,主要包含了从第三版到第五版的软件资源。 该压缩包内的核心文件"管理运筹学v3.5-8-20.exe"很可能是一个可执行程序,用于运行管理运筹学...
《软件工程学教程》是一门深入探讨软件开发过程和实践的学科,旨在通过工程化的理念和方法解决软件开发中的各种问题。课程的目标是使学生掌握软件工程的基本理论、方法和工具,以提升软件项目的成功率和软件产品的...
该压缩包文件“行业教育软件-学习软件-软件下载_学习软件_职称考试_IT精品网络技术黄皮书免费下载.zip”主要聚焦于IT行业的教育和学习资源,特别是针对职称考试和网络技术的学习材料。其中可能包含一系列电子书籍、...
【完整课程列表】 完整版 由浅入深学习MATLAB软件 MATLAB编程入门教程 第1章 MATLAB概述(共31页).ppt 完整版 由浅入深学习MATLAB软件 MATLAB编程入门教程 第2章 MATLAB数值运算(共34页).ppt 完整版 由浅入深学习...
课程目标旨在使学生通过学习,能够理解并应用软件工程的基本知识,包括基本概念、原理、过程和技术,了解软件工程的最新发展趋势,并能按照工程化流程开发和管理软件项目。此外,学生还将学习如何使用工程方法进行...
根据提供的文件信息,我们可以归纳出一系列与“软考软件设计师全套教程+试卷+学习资料”相关的重要知识点。以下是对这些知识点的详细解读: ### 软件设计师考试概述 软件设计师是计算机技术与软件专业技术资格...
《软件工程》是一门至关重要的课程,主要针对计算机科学和技术、软件工程专业的学生,旨在系统地教授软件开发的全过程和方法。本电子教案全面涵盖了软件工程的理论与实践,为学习者提供了丰富的学习资源。 软件工程...
该压缩包文件“行业教育软件-学习软件-2016人教版新起点小学英语三年级上册点读软件 1.6.zip”是专为2016年人教版新起点小学英语三年级上册设计的一款教育软件。点读软件是教育技术的一种创新应用,它结合了数字媒体...