MIT使用python作为导论课的教学语言。
回复内容:
首先,大学教材更新速度慢是真的,只要在大学图书馆里看看Access和VB书的数量就知道了。当然,有些人说大学学的是基本能力,但我觉得这个解释很勉强,因为学不学基本能力跟学不学新东西根本不是矛盾的,新东西就不能学基本能力了吗?
然后,自学Python确实是完全没问题的,但我认为除了正儿八经的CS你好好学学C/C++啥的,别的都可以用Python来入门。现在大学非CS专业的情况是什么样的呢?一门课下来,70%左右的人不知道编程为何物,甚至对此产生了恐惧,还不如学Python快快乐乐地了解基本理论和方法。
最后,对于非码农而言,Python是日常真正能用的工具,用Python代替VBA操作Excel、用Python写个小爬虫从网上采集一些数据、用Python进行小规模定制化的自动测试,都是非常给力的。 我觉得楼上各位说的挺好,但都是“作为资深码农,如果我去教大学生,为什么我会教c”。远远高估了大部分大学教授和教研组的责任心和水平,其实还有别的原因
实际上作为本科生的老师,他们的实践水平是远远不能和一线人员比的,对于大部分c语言老师来说,会python的大概不多,不用说主要精力放在教学评估上的老师,很多老开发者都还在执着于mfc。
更重要的是,更换一个教学语言对于大学来说,太麻烦了,他们现在还在用vc6.0教学。(当然,教那点东西它确实够用了) 英国王尔德说过
真正有价值的东西 学校里没人教你(意译)
- 原文:Education is an admirable thing. But it is well to remember from time to time thatnothing that is worth knowing can be taught.
教育事業是值得欽佩的,但請不時想起:並沒有什麼值得知道的事是能夠被傳授的。 大学也不教PHP的,大学能教会怎么学习就不错了,Python真的很简单,有学习能力的学生很快就可以掌握基础 大学学习的基本设计思想,老师教授一两张语言即可,关键自己得去钻研,看自己喜欢什么就去多看多练习多钻研才可以 真的不明白为什么楼上要纠结大学入门课程教什么语言,对于入门来讲,语言知识一个桥梁,更多的是理解理念和,楼主所为的MIT拿python作为导论的语言,对于零基础或者没开发经验人来讲,我拿Ruby python,C++ 甚至java C #作为导论的语言其实没什么区别,导论课的核心在于导论,在于给没基础的人讲什么是数据结构,什么是算法,什么是基本的数据格式,内存,线程这些东西一类的,这门课就不是在教什么语法,更不可能是框架什么的东西,说白了就不是在教开发。至于开发,我认为有底子以后看个人兴趣自学了,有了底子上手什么语言都快。高等教育是一个引导,而不是说教你什么学什么, 如果说就为了学个语言,用会某个语言,不深入理解然后去做点东西就满足了,那还不如去北大青鸟上个JAVA python速成班来得快。说到底,高等教育不是功利性的教育,但很多学生没有理解到罢了。 Python在高级语言里面经常和Ruby、Perl拿在一起做比较。所以要看看Ruby和Perl或者Lua的地位,也可以知道一点Python的地位。
Python应该是定位于快速开发,作为低级语言粘合剂的脚本语言。
如果要看编程语言的地位的话,可以看看编程语言排名
http://sd.csdn.net/a/20110711/301407.html
python还是可以排在前十的。
国内的互联网企业,从最老的金山,网易,到新进的豆瓣,有很多使用Python的公司。应用范围也很广,从服务端后台、工具脚本到游戏客户端开发,非常多。总的来说,依然是应用非常广泛的。
为什么很多大学都不教Python呢?
个人觉得有两个原因:1 Python是可以自学的,比起C/C++来说简单多了;2 大学的教材和课程更新速度远远不及技术发展的速度。 刚毕业,正好我接触过各类背景的同学,从C/C++/Pascal/Java/Python入门的都有,讲讲我的感受,求轻拍
先讲个题外话:不要太低估国内大学计算机系的水平,国内比较好的大学开设的课程,其实都很紧跟国外的教学趋势的,前些年的Perl,最近的Python和ARM、hadoop,几乎都会有对应的课程。所以也可以不用那么愤青啦~
其实交大从去年开始电类专业的程序设计思想与方法就从C++转向了Python,用的教材是Core Python Programming. 基本上现在的格局是:
电类专业:一学期Python + 一学期C++
非电类专业: 一学期C++?
然后后面要用什么语言就自己去学吧,Java也好Verilog也好Haskell也好学校都不教了。
好处呢就是一开始Python的确比C++好上手啊。
坏处是:Python是一门好语言,但它不适合教学,特别是不适合电类的教学。结果是学弟学妹们并不是特别适应:
一方面,国内的硬环境,是除了计算机和生物类,几乎没有人大规模使用Python——对于很多行业内仍然在用VC6/MFC写界面的电气类学生,你教他Python,他还是要再回头学C++。更进一步说,由于C++的教学时间缩短,而人们又离不开C/C++——起码操作系统课要用,写ARM程序要用,所以反而使得新生没有办法专心掌握一种语言。
另一方面,Python并不适合入门:
Python之于C++,并不像是Lisp之于C,是
计算模型的不同导致的简化。相反,Python和C++的计算模型都是命令式为主的,而Python的美好,在于自然而隐藏了很多细节,像自省啊词典啊动态化啊。但是Python本身的计算模型是比较杂糅的——有一点过程、有一点对象、有一点函数式。这就要求编程者要选用合适的方式来实现自己的方法——如
@莫宇诚所述,这是很实用主义也很精彩的设计。但是命令式的计算模型和强类型系统决定了,这部分的复杂度并没有消失,只是隐藏了起来。理解这些复杂度,是能够顺畅使用Python的前提:我正在操作的是什么类型?这个for语法隐式的使用了哪个对象的迭代方法?方法有没有默认参数?
而偏偏,新生是很难理解这些的——在C语言里明明白白的写出来,都有很多人头痛,不要说藏起来隐式调用。就好像C++里的流,不深刻理解模板重载和迭代器,根本不会理解这东西“为什么能这么写”。
所以学Python和学C++的时候,都会有很多学弟妹惊讶的问——呀,为什么这个地方能这么写,不能那么写?我真的很难解释——因为这些问题,往往牵扯到类型啊对象啊继承啊——恰恰是语言的简单背后藏着的那些东西。
=========================
所以对于新生来说,我觉得入门的语言要的是简单:这种简单,不是指代码量上的短,而是指思维、语法和计算模型上的简单:让新手可以集中注意力理解少数几个概念,不需要纠结于很多惯用法啊隐藏的细节啊:那是给熟手加快进度用的,不是给新人学习用的。所以我觉得Python/C++/Java这种大型语言,都不适合入门——太复杂,太难掌握,最后只能学个皮毛,还不如教一种学生能吃透的语言,以后触类旁通。C/Scheme,在我看来是很好的语言:它还算好用,而且模型简单,学生容易彻底理解。日后比照着学习其他更加抽象化的语言,也更加容易。
至于C的缺点,是可以通过教学来改正的——教育学生合理的抽象,适度的隐藏,学会使用迭代和递归。而我觉得这,才是程序设计导论课区别于C++语法课的关键所在。但是很遗憾,不管使用什么语言,能讲到这个层次的老师,都太少了。(学生也不爱听,他们只关心怎么能做大作业,实现更多的功能)
=====================
其实MIT自己也认为现在学生用Lisp入门不太好,这里有一篇文章引用Sussman的话解释了原因。
http://cemerick.com/2009/03/24/why-mit-now-uses-python-instead-of-scheme-for-its-undergraduate-cs-program/
总之,语言教学这件事,重点不是要赶时髦,而是要接地气。 想想大家为什么用 Python。从语言上说,Python 并不够 clean。目前还有 2.x vs. 3.x 的分歧。从工程上说,Python 的集成性并不比 C 好,因为业界有很多库还只是 C 接口,用 Python 必须有一些封装。大家用 Python 是因为它的资源能够帮助很多人解决问题。
但是这个「Python 是因为它的资源能够帮助很多人解决问题」的问题不是大学生面临的问题。大学生面临的更多是 big, clean problem。这种问题需要逻辑纯洁的方案,或者完全形成标准的方案。比如学语言用 C,学计算用 Lisp,学 kernel 用 Linux, BSD 都是没问题。但是 Python 属于战场专业工具箱,应该等等。 编程范式,设计模式,MVC,软件开发方法和思想这些才是应该教而没有教的东西,编程语言都是些小角色,完全可以穿插到里面作为一个章节或一两个课时的内容。偏偏国内的很多高校,学了一个学期的java,对接口interface的存在充满疑惑,甚至很多学生还以为面向对象编程中的封装和信息隐藏是为了保密(让源代码不被泄露出去!)。