关于本科编程教育的一些想法
裘 初
计算机专业是一个实践性很强的专业,即使像操作系统、编译原理这样的理论课程都可以用程序代码去验证里面的原理,比如操作系统中的进程管理,学生至少应该能去读读已有操作系统的代码,看看实际是如何实现的,而不是单单学习理论知识(实际上,开源的Linux是很好的例子)。但是如果因为学生的编程能力不行,无法进行这些实践,这些课程的教学效果也会大大降低。
当然必须承认不是所有的学生毕业后会从事编程工作,但是计算机程序本身已经渗透到了IT行业的各个角落,例如服务器/数据库管理员可以通过编写一些脚本来使工作自动化(微软的Tech Net还开设了一个专门的脚本中心来指导此类工作);对于一些应用,软件测试员可能必须编写代码才能进行测试;科研人员总需要会用程序来验证自己的算法。所以,加强编程教学对学生无论是升学还是工作都是大有好处的。
同样,我们不是要把所有学生培养成编程高手,但至少应该让学生拥有这方面的基本能力,看到代码不会发怵。
编程教学的最大目的是培养学生将问题转化为程序的能力。我们的编程教学应该淡化语法教学,因为目前代码编写都有很好的IDE工具支持,语法错误可以很容易找到并被修正,强调语法没有多少意义。
同时也不应该死扣细节,例如讨论下面代码:
i=0;
printf(“%d,%d”,i,i++);输出是0,1还是0,0的问题。
实际上诸如此类的问题在考试中非常普遍。如果程序员在项目中写出上述代码是很愚蠢的事情,因为代码讲究的是逻辑简单,容易让人理解(注意,代码是给人看的,计算机无所谓!!!);实际上如果把上述代码改成两个printf语句,则可以避免很多误解,而且执行效率上不会受到多少影响。
我觉得我们更应该强调将遇到的问题转化成程序的能力,也就是怎么用程序解决实际问题。例如编写一段程序实现1到n的加法,问题实现很简单,如下:
int i;
int result;
int max;(www.daowen.com)
scanf(“% d”,& max);
result= 0;
for(i= 1; i<= max; i++)
{
result+= i;
}
printf(“% d”,result);
在教学过程中,我们不能单纯地解释代码怎么回事,应该让学生明白是如何把问题转化成代码的思考过程,培养他们这种思维方式,比如为什么使用循环,变量定义是如何确定的等等。考试也可以着重考查这种能力,比如增加程序填空题的比重,加强上机考试等。
还有一些内容也很重要,例如代码的结构方面,在教函数的时候,我们总要教会学生如何把复杂的代码分拆成若干个函数;如何提炼代码中相同的成分写成函数等等这些问题。
我们需要借助一些实际项目来提高学生编程的兴趣,比如Java社区有一个开源项目叫Robocode,它是一个坦克机器人战斗仿真引擎,参赛者必须利用Java对机器人进行编程,给机器人设计智能来自动指挥它,可以通过和其他参赛者的机器人对战来衡量自己的设计水平。还可以鼓励学生参加这类比赛,从而在娱乐的同时学习与提高Java技术。
最新的一些语言如C#,Java已经不是传统意义上的编程语言,而是平台的概念(C#的.NET,Java的J2EE),它们的编程方式都和平台密切相关。我们应该增加一些选修课来讲授这些语言,并让学生能够从整个平台的角度去理解语言本身。
上面仅仅是一些想法,可能不太成熟,权当抛砖引玉。实际上计算机学院已经开始了这方面的改革,相信未来会做的更好。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。