原创 计算机程序设计课程教学之我见收藏

新一篇: 一本被忽略的好书 —— “深入理解Microsoft Windows 2000分布式服务” | 旧一篇: 选择教材遭遇的尴尬

计算机程序设计课程教学之我见
潘爱民,2006.12.30
 
我曾经在学校工作了十年之久,在这段时间里,我从事过软件开发,钻研新技术,做过网络管理员,也讲过课,做过科研。幸运的是,我始终近距离接触软件技术,主要以微软的技术为主,偶尔也涉及一些平行的技术,比如,与Windows对应的Linux,与COM对应的CORBA。
 
离开学校的环境以后,虽然身处工业界,但这学期我又有机会在清华大学计算机系讲授一门课程。姚期智先生在清华组织了一个软件科学实验班,每年招收一个班级,微软亚洲研究院提供几门课程的支持。我讲授其中一门关于程序设计与算法的基础课程。
 
我始终认为,从事教学工作是一种奉献,无论是新技术的课程,还是传统的基础课程。我所处的工作岗位并没有讲授课程的要求,但我还是很愿意尽我所能做一些教课工作。我原来的计划是今年秋季到北大开一门Windows操作系统的课程(主要的动因是,2005年秋季在微软校园行活动中有同学在大会上提出来希望我能回北大讲课),很早时候已经跟主管教学的老师商量好了。但后来,由于有了清华的教学任务,我便放弃了北大的计划。
 
这是我第一次为本科生讲课,很基础的课程,但我付出了很多的努力,基本上每个周末都在准备讲义,有时候还会写一些小程序来配合教学。虽然辛苦,倒也其乐无穷。因为这是针对计算机科学专业的基础课程,所以,我拟定了三个目标:
(1)    算法是基础,忽视算法永远是个错误。计算机算法建立在现代计算机体系结构的基础之上,已经形成了自己特有的一套理论体系,有大量经典的算法应用于各种计算环境中。没有算法内涵的程序设计是肤浅的,所以,我的课程有相当大的比重在介绍计算机算法。
(2)    关于程序设计或编程的教学,我倾向于由底向上的方法,而不是自顶向下的方法。对于非计算机系的学生,可以使用自顶向下的教学方法,但是对于计算机系的学生,一定要让他们知道程序下面发生的事情。细节不可忽略。
(3)    要有足够的代码量。我起初要求这门课程的代码量在10,000行C/C++代码,有些人(不仅有学生,也包括我的同事和朋友们)认为这个量太大,后来我降低到5000行,实际上,最终我要求达到3,000行。我的理由是,没有足够的代码量,很多程序设计的概念是很难体会到的。大学低年级的同学大多没有编程经验,所以,我希望这成为他们的一次编程体验。(不过,有人可能会恨我 :( )
 
虽然都是很传统的内容,而且绝大多数内容也正是我所擅长的话题,但我仍然认真准备每一次课。所以,这也成了我自己的一次再学习和整理的过程。收获还是颇丰的。以前有一些模糊的概念和算法,这次彻底搞清楚了。我自己上大学期间,没有正式地学习过程序设计类的课程,这次算是补了一回。因此,上完这门课以后,我有一种步入科班行列的感觉。
 
在计算机教学方面,我的观点是以基础为重,配合适度的训练。学生可以在课外找一些训练的机会,或者自己弄一些题目来做做。课堂上只能照顾知识点,起到引领的作用而已。我的幸运在于,我始终面对最优秀的学生,所以,我更加不得马虎,毕竟,耽误好学生比耽误一般的学生更加罪过。另外,通过教学我也发现,大多数同学在计算机方面的能力和悟性都超出了我的想象,比我们当年上大学时不知强了多少倍。从长远来看,中国的计算机事业是很有希望的,毕竟中国不乏人才。
 

发表于 @ 2006年12月30日 16:15:00|评论(loading...)|编辑

新一篇: 一本被忽略的好书 —— “深入理解Microsoft Windows 2000分布式服务” | 旧一篇: 选择教材遭遇的尴尬

评论

#linzhengqun 发表于2006-12-31 09:26:19  IP: 219.131.196.*
我只有第三条符合,回顾大学的生活,真想能再来一次,
算法真是永远的遗憾。
#yshuise 发表于2006-12-31 12:29:28  IP: 61.134.199.*
永远也不要回到大学生活。
#chammechane 发表于2006-12-31 14:24:38  IP: 125.33.135.*
能够遇到这样的好老师是一个可以决定一生的机遇。我自学数据结构时碰得鼻青脸肿。后来工作后才发现代码量是关键。没有编码的经验就是不能体会算法中要表达的解决问题的思路。10,000行真的不算多。
#yangkwch 发表于2006-12-31 15:14:48  IP: 218.104.228.*
建房也得先打基础,潘老师这话值得很多学生学习。在这个急功近利的社会要想打好基础还真难。
#bigwhite20xx 发表于2006-12-31 15:40:29  IP: 202.118.3.*
和潘老师一样,自己上大学期间,也没有正式地学习过程序设计类的课程,自己平时看书补。让自己逐渐有一种步入科班行列的感觉,让自己掌握计算机的知识体系,融汇贯通。
#David_w_johnson 发表于2006-12-31 15:42:26  IP: 211.156.179.*
耽误好学生比耽误一般的学生更加罪过。好和一般划分的标准是什么?教育不是做生意,是为人师表,只要是耽误,不论是耽误哪一类性质是是相同的,都是罪恶。
#David_w_johnson 发表于2006-12-31 15:43:10  IP: 211.156.179.*
耽误好学生比耽误一般的学生更加罪过。好和一般划分的标准是什么?教育不是做生意,是为人师表,只要是耽误,不论是耽误哪一类学生,性质是是相同的,都是罪恶的。
#David_w_johnson 发表于2006-12-31 15:52:17  IP: 211.156.179.*
”横和竖“缺一不可。实际的应用系统不是一个技术的简单应用,是多个技术的综合运用。光有代码量是不够的,横向知识面,横向思维同等重要,否则这样的学生出来就是一个钻牛角尖的coding machine,没有全局观念,没有系统思维能力,没有设计理念。
#David_w_johnson 发表于2006-12-31 15:52:45  IP: 211.156.179.*
”横和竖“缺一不可。实际的应用系统不是一个技术的简单应用,是多个技术的综合运用。光有代码量是不够的,横向知识面,横向思维同等重要,否则这样的学生出来就是一个钻牛角尖的coding machine,没有全局观念,没有系统思维能力,没有设计理念。
#David_w_johnson 发表于2006-12-31 15:53:00  IP: 211.156.179.*
”横和竖“缺一不可。实际的应用系统不是一个技术的简单应用,是多个技术的综合运用。光有代码量是不够的,横向知识面,横向思维同等重要,否则这样的学生出来就是一个钻牛角尖的coding machine,没有全局观念,没有系统思维能力,没有设计理念。
#David_w_johnson 发表于2006-12-31 15:53:12  IP: 211.156.179.*
”横和竖“缺一不可。实际的应用系统不是一个技术的简单应用,是多个技术的综合运用。光有代码量是不够的,横向知识面,横向思维同等重要,否则这样的学生出来就是一个钻牛角尖的coding machine,没有全局观念,没有系统思维能力,没有设计理念。
#David_w_johnson 发表于2006-12-31 15:53:16  IP: 211.156.179.*
”横和竖“缺一不可。实际的应用系统不是一个技术的简单应用,是多个技术的综合运用。光有代码量是不够的,横向知识面,横向思维同等重要,否则这样的学生出来就是一个钻牛角尖的coding machine,没有全局观念,没有系统思维能力,没有设计理念。
#David_w_johnson 发表于2006-12-31 15:53:20  IP: 211.156.179.*
”横和竖“缺一不可。实际的应用系统不是一个技术的简单应用,是多个技术的综合运用。光有代码量是不够的,横向知识面,横向思维同等重要,否则这样的学生出来就是一个钻牛角尖的coding machine,没有全局观念,没有系统思维能力,没有设计理念。
#David_w_johnson 发表于2006-12-31 16:00:15  IP: 211.156.179.*
”横和竖“缺一不可。实际的应用系统不是一个技术的简单应用,是多个技术的综合运用。光有代码量是不够的,横向知识面,横向思维同等重要,否则这样的学生出来就是一个钻牛角尖的coding machine,没有全局观念,没有系统思维能力,没有设计理念。比如不管一个人如何mastering java程序设计语言的底层机制,但跟一个要作出一个企业应用系统比较起来,差了十万八千里,一个企业应用系统涉及的技术实在太多了,jsp,html,css,servlet,ejb自不必说,光安全一项就够折腾的了。这里面暴露了一个问题,大学是要培养科学家,还是某个细小领域的专家,还是培养对社会和企业能使用的人才?
#l28791002 发表于2006-12-31 22:44:47  IP: 60.176.254.*
感觉仅仅做算法题,好象怎么也不需要那么多的代码吧。当然我也认为代码量是很重要的。

潘老师,您能不能给出一些需要10万行C/C++代码的算法程序的例子啊?

万分感谢!!!
#mhmdanger 发表于2007-01-01 01:12:36  IP: 222.209.105.*
如果要写好c代码,其实要学的东西很多,计算机原理,操作系统的具体实现等等都很重要,当然如果写应用软件可能这些不是很重要,但是要写系统软件这些显得额外重要,比如有人说精通linux环境下面的c语言编程,可是问他,如果让他设计一个getty程序,他根本不知道getty程序应该做些什么,这就是操作系统知识缺乏,还有就是让他说说telnetd是怎么工作的,他根本不知道应该跟伪终端主设备和从设备打交道
#chchzh 发表于2007-01-01 10:35:05  IP: 59.44.18.*
做程序和讲程序,其实都要说明一个道理就是怎样构造特定功能的程序架构,我做程序多年,认为语言和算法仅仅是一个程序员应该知道的必要知识,而构造程序必须要用程序员自己的逻辑语言描述出程序的框架,这是非常重要的,也是一个教师应该教授学生的基本知识。因此,愚见认为,程序结构是教授之根本,其中包括控制流和数据流结构。
#lonelyforest 发表于2007-01-02 11:29:45  IP:
第三条我满足, 大学毕业的时候搞了个小型的编译器,数目很多, 自我感觉良好, 如今工作了, 回顾时感觉自己以前水平太差了!!!
每天看着几万到几十万行的C++代码, 不知道如何形容
#jason176374 发表于2007-01-02 16:27:47  IP: 58.247.17.*
多实践才是硬道理,支持...
在实践中不仅可以学习算法,还可以学习调试思想和调试技术, 非常有用.
#Carven 发表于2007-01-03 12:43:37  IP: 222.76.229.*
昏死,需要十万行以上算法的程序例子不用潘老师给了,我现在就给你:3D RealTime 的 Engine。
#Carven 发表于2007-01-03 12:43:37  IP: 222.76.229.*
昏死,需要十万行以上算法的程序例子不用潘老师给了,我现在就给你:3D RealTime 的 Engine。
#Turinglife 发表于2007-04-11 22:49:14  IP: 222.209.140.*
您好!
可以给我一份这门课的教学资料嘛
谢谢
Turinglife@gmail.com
#Bellingg 发表于2007-04-18 10:42:31  IP: 202.107.201.*
Bellinggg@163.com
我也想要这份课的教学资料,麻烦了
由于本科不是计算机专业的,现在从事软件开发明显感到基础很薄.所以希望可以在业余时间给自己补课.
#lqheaven 发表于2008-05-24 13:58:19  IP: 125.46.30.*
潘老师,您好。我是高校的一名老师,在教学过程中,也经常遇到了您所说的这些问题,能否给我一份这门课的教学资料供我们参考。谢谢。
E-mail:lqheaven@163.com
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 潘爱民