北京经济管理职业学院 人工智能学院 刘建国
摘要:本文是“丝路工匠””国际技能大赛编程技术赛项辅导教师的参赛感想,从数字经济时代学习编程的意义,编程需要掌握的内容和思想,高职学生编程语言的教学方法编程比赛的选手培养、选拔与训练,对于丝路工匠编程比赛的认识等方面谈了自己的认识和感受,希望能够在未来参赛中进一步提升比赛水平。
一、数字经济时代学习编程的意义
数字经济时代是一个通过大数据技术进行资源配置与优化,保证经济高质量发展的时代。在这个时代,以数字技术为基础,应用了云计算、人工智能、区块链、物联网等新技术,其中编程技术是数字技术得以实现的重要保障,从这个意义上说,编程技术已经渗透到各个数字经济领域。
编程技术不仅是一种编程语言,更是一种思维方式。在现代职业中,编程思维不仅仅是属于信息技术领域的工作人员,其他职业也需要懂得编程思维。因为,数字经济时代大部分职业实现了数字化和自动化,实际上就是各种程序和软件的应用。对于编程技术的理解,有助于推动实现职业岗位的自动化和数字化。同时,对于软件不满足需求的情况,也能够提出合理要求,帮助程序员理解客户的真实需求,对软件进行合理的适应性维护。另外职业岗位人员理解编程技术,更有利于与程序员进行顺畅地交流,有效地沟通。在数字经济时代,懂得编程技术以及相关知识,是职业晋升的一种通道。在充分实现数字化的职业领域,一般可以是初级的操作人员、高级操作人员以及管理人员、高级管理人员的职业岗位,其中掌握了编程技术,初级操作人员可以迅速理解和掌握软件的内核以及软件的架构,逐步成长为高级操作人员,并向管理人员迈进。在现代职业岗位中,懂得计算机技术是一般岗位的需求,懂得编程技术是现在以及未来岗位的必然趋势。例如,在SAP ERP领域,懂得ABAP编程的顾问人员的需求越来越多,掌握ABAP领域编程技术的咨询顾问也越来越获得市场的青睐。对于职业教育而言,它的出发点和落脚点都是培养满足市场需求的职业技术人员,在管理、财会、智能制造等专业,数字技术、编程技术对职业的影响逐渐加深,专业也越来越主动地与数字技术相结合,以适应数字化时代的要求,这也从客观上对学生的编程能力提出了要求。总之,数字化时代的到来,对各个专业都带来了挑战,也提供了机遇。适当掌握编程技术,可以帮助职业人员抓住机遇,以更大信心迎接挑战。
二、掌握编程需要掌握的内容
对编程技术的掌握关键是编程思想的掌握。无论任何编程语言,C语言、Java语言、Python语言、BASIC语言、Visual Basic语言、Visual C++语言,以及各种数据库语言(SQL Server、Oracle、MySQL)等,对于编程部分都是顺序、选择、循环三种基本程序结构。对于选择结构一般采用if…else结构,特殊情况下用到了Switch结构;对于循环部分一般是明确循环次数的For语句,以及根据条件判断是否循环的While、Do…while语句。掌握了三种基本程序结构,任何一门语言都可以快速入门。编程语言在关键词以及应用范围是有区别的,但是编程思想是一致的。所以牢固掌握编程思想,就跟上了编程的基本思路,区别在于不同语言的表达上。对于高级语言编程,一般是数组以及面向对象思想。数组就是下表有序的元素序列,一般数组元素是相同的数据类型,个别的不强调计算的程序语言,例如PHP语言类型可以不相同。与一般的普通变量不同,它主要是若干变量的集合体,单开看每一个数组元素就是一个变量。对数组的操作,主要是运用下标的规律实现对部分或者全部数据元素的操作。面向对象技术是软件开发的方法,是相对于面向过程而言的另一种编程的范式。本质上,面向对象就是把部分数据以及与数据相关的程序组合起来组成类,为了区别把数据称为类的属性,程序称为类的方法。从这个基本点就可以延伸出继承、封装、重载、接口、包等不同的概念。另外,不同语言为了适应自己的应用环境,都提供了丰富的函数。函数存放在函数库中,每一个函数实现一定的程序功能。函数库中的函数是一种松散的组合,函数与函数之间没有联系,只是可以根据应用范围进行分类。而面向对象中类的方法虽然可以理解成函数,但是这些方法都是为类的主题来服务的。对于任何一种语言,掌握函数可以提高程序的开发速度,增加程序的可读性。掌握函数的应用是对编程技术掌握的一个提高。
对于编程而言,都可以分成数据和操作(程序)两部分。数据库语言在这方面最明显,首先需要建立数据库、数据表,输入数据,然后进行数据库表的插入、删除、更新、查询的操作。其他语言其实也需要确定数据类型和操作程序。不同语言的数据类型侧重点会有不同。对于财会类程序语言会强调时间数据类型;对于偏重计算的程序设计语言,整形、浮点型的要求更加丰富;新的程序语言,例如Java语言,会有布尔类型用true和false表示逻辑判断的真和假,C语言会使用0、1表示真和假。对于刚接触程序设计的人员,不必过于纠结于数据类型,只要知道数值型数据主要用来进行加减乘除运算,字符型数据主要处理文字就可以了。随着对编程掌握的深入,可以逐步加深对数据类型的理解。
总之,编程思想是学习编程的关键,每种程序语言都是为解决某一领域的问题而提出的,理解了编程思想,在学习新语言的时候可以很快进入,在学习新语言的过程中,可以回顾当前语言与以前学过语言的相同点和不同点,这是学习程序设计语言的最好的方法。
三、高职学生编程语言的教学方法
高职学生数学基础比较薄弱,部分学生英语水平欠缺,这些对学生学习程序设计语言有一定的负面影响。但是也有积极的一面,他们活泼好动、思想活跃、乐于接受新鲜事物和感兴趣的事物。在教学过程中,需要对薄弱部分进行弥补,对积极方面进行引导。
传统的软件开发是采用结构化开发方法,既采用需求分析、系统分析、系统设计、系统开发、系统检测的开发过程。在程序设计教学中可以采用这样的方法,对于一个程序编写项目,对程序设计要求进行分析,设计出程序流程,编写代码实现功能,对程序进行测试。这样的教学过程,需要学生理解每一个教学环节,并对每一个 环节的衔接和相互联系有充分理解,因此这种教学方法适用于学生系统学习整体软件开发的过程,要求学生对软件开发的基础知识有一定的了解。但是对于刚刚接触程序设计的学生而言是比较困难的,尤其在学习过程中,每一步骤都会让学生丧失部分学习的兴趣。
在教学实践中,类比法能够取得较好的教学效果。类比教学方法类似于原型化软件开发方法,首先开发一个原型程序,在根据需求对原型程序进行改进。例如对于循环程序部分教学过程中,教师可以先引导编写案例程序,并对程序进行讲解,在学生理解的基础上,对程序需求做出部分改变,学生对新需求的程序对原型程序进行适当改写以实现新的功能。通过反复练习、重复加深印象,从而掌握这部分内容。
例如可以从1+2+3+…+100的程序原型进行反复练习。
它的Java语言实现程序如下:
int s=0;
for(int i=1;i<=100;i++) s+=i;
可以做第一次引申,对于任意n>1,求1+2+3+…+n和。学生很容易发现,把上一个程序的100改成变量n,就可以实现。既,
int n=50;
int s=0;
for(int i=1;i<=n;i++)s+=i;
第二种引申可以是,求2+4+6+…+100的和,既1到100之间的偶数和。
显然还是以第一段程序作为原型,可以引导学生的发散思维:可以是改写s+=i;一句为:
if(i%2==0)s+=i;也可以修改for语句为:for(int i=2;i<=100;i++,i++) ;还可以两句修改为for(int i=1;i<=50;i++)s+=2*i;等等。
同理,可以求1到100之间的奇数的和。
进一步的引申可以是:1+1/3+1/5+…+1/99’的和;以及1-1/3+1/5-1/7+…+1/99的和。反复的训练,在原型程序上反复加深印象,这样训练能够取得良好的效果。
另外,还可以采用项目教学方法,项目教学方法一般根据现实项目改写。把一个较大的项目分解成若干个小项目,分散到课程教学的每个环节。如果各个教学环节的项目彼此没有关联,那么就失去项目教学的目的。因此,项目教学更适合程序设计课程的综合实践,即学生已经掌握了程序设计语言的各方面知识,把这些知识和技能应用到项目中,教学效果是良好的。
四、编程比赛的选手培养、选拔与训练
编程比赛与课程教学既有区别又有联系,它们的内容是一致的,但是课程教学强调知识的系统性和完整性,在教学过程中强调普及型;编程比赛实际上各个参赛院校编程能力较强的学生之间的比赛和交流,知识的深度有了一定的提升,对学生的心理素质和能力素质也有较高的要求。为实现广泛性,学校可以开设程序设计通识课程,让所有学生有一定的编程基础。授课教师要注意发现具有良好编程能力的学生,建立学习兴趣小组,对他们的能力进行提升。可以采用以老带新的方式开展活动,建立一个梯队,老师带动学生,优秀的队员带动新队员,共同提高编程水平。每次活动针对某一个主题展开,争取每次活动中学生都有收获。
在参赛选手的选拔上,首先要综合考虑学生综合素质,在本次比赛中主要考查学生知识的掌握程度、程序的阅读能力、程序的编写能力;同时,遇到问题采取的措施以及应对的心态也应该在考虑范围内。其次,需要注意选拔的广度,如前所述,在数字经济时代,编程能力不仅仅是计算机专业的要求,其他专业对编程能力也有一定的要求,所以在选手的选拔上一定要广泛宣传,吸引更多的学生参加选拔,对于非计算机专业的学生可以有适当倾斜,激发更多学生的编程兴趣。在选拔过程中要注意营造比赛氛围,让有一定编程能力的学生都有参赛的欲望。
在选手的训练上,主要是针对学生认识比较模糊的知识进行厘清和提升。比赛的题目必须有区分度,区分度的产生就在于对选手易错、理解不清的知识和技能进行比较,知识掌握扎实、技能应用灵活的选手才能够取得良好的成绩。在备赛阶段,鼓励学生在有限的时间内尽量多做训练。训练必须有针对性,主要针对自己的短板进行训练。比赛经常考察学生知识欠缺的地方,补足缺陷是比赛取得好成绩的保障。例如:i++与++i语句在应用上的区别,辅导教师必须帮助学生能够准确区分,并在训练中进行进一步地加强和巩固。每一份收获,都需要辛勤地付出。高水平的训练是提高学生比赛能力的前提。作为选手的指导教师一定要制定合理训练方案。必须让参赛学生认识到比赛是对所学知识的一次检验,与所学知识的侧重点可能存在差异,需要学生认识到这个差异,并进行弥补,指导教师做好相应的指导。只要努力,差距是可以缩小的,学生不放弃,指导老师也不放弃。这个过程也不要急于求成,需要循序渐进的方法,避免学生产生厌倦情绪。最好的结果是学生能够感到每一天都有进步,每一天都有提高,对比赛信心逐步增强。写代码的天赋和兴趣很重要,但是只要坚持肯定会有收获。另外,教师要做好学生的心理辅导。比赛不仅比学生的知识和能力,还要比学生的心理素质。指导教师要关心参赛学生的心理波动,帮助他们适当减压。保证既有动力,又有压力,心情舒畅地进行备赛和比赛。指导教师要及时回复学生提出的每一个问题,不论是学习上的,还是生活上的,指导教师都要耐心辅导。训练虽然辛苦,要让学生感到乐在其中。保持选手的水平,把选手的状态在比赛时调整到最好状态,是一项比较重要的工作。因此,比赛前一两天,需要给学生明确:比赛就是去开阔眼界,见识一些其他选手的水平,比赛成绩固然重要,更重要的是在比赛这个平台上展示自己的真实水平和真实实力。
五、对于丝路工匠编程比赛的认识
“丝路工匠”国际技能大赛秉承“和平合作、开放包容、互学互鉴、互利共赢”的丝路精神,这次的编程技术赛项在职业院校学生之间以及各指导教师之间搭建了一个技能交流的平台,彼此之间加深了了解,表达了进一步合作的意向,对于提高学生的编程技能水平以及教师的教学水平,都具有积极的推动作用。充分地交流开阔了学生的眼界,也在比赛中发现了自己的不足和差距,为未来的进一步提高编程水平增加了动力。当然,比赛中也有遗憾,最重要的一点是比赛在线上进行,缺少了一些选手之间的相互交流。不过,比赛能够顺利举行并取得了积极成果,就是一次成功的赛项。
六、结语
“丝路工匠””国际技能大赛编程技术赛项对院校间编程技术技能领域合作,促进编程技能人才培养能力整体提升具有重要意义。从某种意义上来说,数字经济时代是通过软件程序提升经济发展质量的时代,学生编程水平的整体提升对于提升技能人才质量和促进数字经济发展也具有积极作用。最后,感谢赛事主办方的付出,对比赛获奖选手表示祝贺,希望在下一届比赛中,大家再一次合作交流,展示彼此在职业教育领域取得的成果。