今天我们怎样学软件技术,怎样教软件课程?
==================
注:
本文是我这几年以来针对软件技术学习与教学方式所思索问题的一个阶段性总结,写出来与朋友们交流。
金旭亮
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反演公式”等。
分享到:
相关推荐
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
MMC整流器技术解析:基于Matlab的双闭环控制策略与环流抑制性能研究,Matlab下的MMC整流器技术文档:18个子模块,双闭环控制稳定直流电压,环流抑制与最近电平逼近调制,优化桥臂电流波形,高效并网运行。,MMC整流器(Matlab),技术文档 1.MMC工作在整流侧,子模块个数N=18,直流侧电压Udc=25.2kV,交流侧电压6.6kV 2.控制器采用双闭环控制,外环控制直流电压,采用PI调节器,电流内环采用PI+前馈解耦; 3.环流抑制采用PI控制,能够抑制环流二倍频分量; 4.采用最近电平逼近调制(NLM), 5.均压排序:电容电压排序采用冒泡排序,判断桥臂电流方向确定投入切除; 结果: 1.输出的直流电压能够稳定在25.2kV; 2.有功功率,无功功率稳态时波形稳定,有功功率为3.2MW,无功稳定在0Var; 3.网侧电压电流波形均为对称的三相电压和三相电流波形,网侧电流THD=1.47%<2%,符合并网要求; 4.环流抑制后桥臂电流的波形得到改善,桥臂电流THD由9.57%降至1.93%,环流波形也可以看到得到抑制; 5.电容电压能够稳定变化 ,工作点关键词:MMC
Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基于功率反馈的扰动观察法调整电压方向研究,Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基于功率反馈的扰动观察法调整电压方向研究,Boost二级升压光伏并网结构,Simulink建模,MPPT最大功率点追踪,扰动观察法采用功率反馈方式,若ΔP>0,说明电压调整的方向正确,可以继续按原方向进行“干扰”;若ΔP<0,说明电压调整的方向错误,需要对“干扰”的方向进行改变。 ,Boost升压;光伏并网结构;Simulink建模;MPPT最大功率点追踪;扰动观察法;功率反馈;电压调整方向。,光伏并网结构中Boost升压MPPT控制策略的Simulink建模与功率反馈扰动观察法
STM32F103C8T6 USB寄存器开发详解(12)-键盘设备
科技活动人员数专指直接从事科技活动以及专门从事科技活动管理和为科技活动提供直接服务的人员数量
Matlab Simulink仿真探究Flyback反激式开关电源性能表现与优化策略,Matlab Simulink仿真探究Flyback反激式开关电源的工作机制,Matlab Simulimk仿真,Flyback反激式开关电源仿真 ,Matlab; Simulink仿真; Flyback反激式; 开关电源仿真,Matlab Simulink在Flyback反激式开关电源仿真中的应用
基于Comsol的埋地电缆电磁加热计算模型:深度解析温度场与电磁场分布学习资料与服务,COMSOL埋地电缆电磁加热计算模型:温度场与电磁场分布的解析与学习资源,comsol 埋地电缆电磁加热计算模型,可以得到埋地电缆温度场及电磁场分布,提供学习资料和服务, ,comsol;埋地电缆电磁加热计算模型;温度场分布;电磁场分布;学习资料;服务,Comsol埋地电缆电磁加热模型:温度场与电磁场分布学习资料及服务
1、文件内容:ibus-table-chinese-yong-1.4.6-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ibus-table-chinese-yong-1.4.6-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
基于51单片机protues仿真的汽车智能灯光控制系统设计(仿真图、源代码) 一、设计项目 根据本次设计的要求,设计出一款基于51单片机的自动切换远近光灯的设计。 技术条件与说明: 1. 设计硬件部分,中央处理器采用了STC89C51RC单片机; 2. 使用两个灯珠代表远近光灯,感光部分采用了光敏电阻,因为光敏电阻输出的是电压模拟信号,单片机不能直接处理模拟信号,所以经过ADC0832进行转化成数字信号; 3. 显示部分采用了LCD1602液晶,还增加按键部分电路,可以选择手自动切换远近光灯; 4. 用超声模块进行检测距离;
altermanager的企业微信告警服务
MyAgent测试版本在线下载
Comsol技术:可调BIC应用的二氧化钒VO2材料探索,Comsol模拟二氧化钒VO2的可调BIC特性研究,Comsol二氧化钒VO2可调BIC。 ,Comsol; 二氧化钒VO2; 可调BIC,Comsol二氧化钒VO2材料:可调BIC技术的关键应用
C++学生成绩管理系统源码
基于Matlab与Cplex的激励型需求响应模式:负荷转移与电价响应的差异化目标函数解析,基于Matlab与CPLEX的激励型需求响应负荷转移策略探索,激励型需求响应 matlab +cplex 激励型需求响应采用激励型需求响应方式对负荷进行转移,和电价响应模式不同,具体的目标函数如下 ,激励型需求响应; matlab + cplex; 负荷转移; 目标函数。,Matlab与Cplex结合的激励型需求响应模型及其负荷转移策略
scratch介绍(scratch说明).zip
内容概要:本文全面介绍了深度学习模型的概念、工作机制和发展历程,详细探讨了神经网络的构建和训练过程,包括反向传播算法和梯度下降方法。文中还列举了深度学习在图像识别、自然语言处理、医疗和金融等多个领域的应用实例,并讨论了当前面临的挑战,如数据依赖、计算资源需求、可解释性和对抗攻击等问题。最后,文章展望了未来的发展趋势,如与量子计算和区块链的融合,以及在更多领域的应用前景。 适合人群:对该领域有兴趣的技术人员、研究人员和学者,尤其适合那些希望深入了解深度学习原理和技术细节的读者。 使用场景及目标:①理解深度学习模型的基本原理和结构;②了解深度学习模型的具体应用案例;③掌握应对当前技术挑战的方向。 阅读建议:文章内容详尽丰富,读者应在阅读过程中注意理解各个关键技术的概念和原理,尤其是神经网络的构成及训练过程。同时也建议对比不同模型的特点及其在具体应用中的表现。
该文档提供了一个关于供应链管理系统开发的详细指南,重点介绍了项目安排、技术实现和框架搭建的相关内容。 文档分为以下几个关键部分: 项目安排:主要步骤包括搭建框架(1天),基础数据模块和权限管理(4天),以及应收应付和销售管理(5天)。 供应链概念:供应链系统的核心流程是通过采购商品放入仓库,并在销售时从仓库提取商品,涉及三个主要订单:采购订单、销售订单和调拨订单。 大数据的应用:介绍了数据挖掘、ETL(数据抽取)和BI(商业智能)在供应链管理中的应用。 技术实现:讲述了DAO(数据访问对象)的重用、服务层的重用、以及前端JS的继承机制、jQuery插件开发等技术细节。 系统框架搭建:包括Maven环境的配置、Web工程的创建、持久化类和映射文件的编写,以及Spring配置文件的实现。 DAO的需求和功能:供应链管理系统的各个模块都涉及分页查询、条件查询、删除、增加、修改操作等需求。 泛型的应用:通过示例说明了在Java语言中如何使用泛型来实现模块化和可扩展性。 文档非常技术导向,适合开发人员参考,用于构建供应链管理系统的架构和功能模块。
这份长达104页的手册由清华大学新闻与传播学院新媒体研究中心元宇宙文化实验室的余梦珑博士后及其团队精心编撰,内容详尽,覆盖了从基础概念、技术原理到实战案例的全方位指导。它不仅适合初学者快速了解DeepSeek的基本操作,也为有经验的用户提供了高级技巧和优化策略。
主题说明: 1、将mxtheme目录放置根目录 | 将mxpro目录放置template文件夹中 2、苹果cms后台-系统-网站参数配置-网站模板-选择mxpro 模板目录填写html 3、网站模板选择好之后一定要先访问前台,然后再进入后台设置 4、主题后台地址: MXTU MAX图图主题,/admin.php/admin/mxpro/mxproset admin.php改成你登录后台的xxx.php 5、首页幻灯片设置视频推荐9,自行后台设置 6、追剧周表在视频数据中,节目周期添加周一至周日自行添加,格式:一,二,三,四,五,六,日
运行GUI版本,可二开