教C/C++、JAVA是肯定没问题的,不教Go、Python、Rust绝对没有好处,不过我认为学生可以自学,这是长期以来形成的历史原因。缺少好的教材,老一辈的教授大部分也都没接触过这些新的语言,他们又习惯了几十年的教学,想要改变难度太大。
在写这篇文章之前,我依然去国内大学MOOC网站检索了一下相关课程,国内计算机教学很多高校基本上还是以C/C++为主,JAVA、Python等作为应用语言会在大三大四讲。我甚至发现在开发环境选择上,国内很多计算机名校不少选择CodeBlocks,但是依然会推荐VC6.0,看了之后还是让我感慨颇深的。
清北复交计算机专业现在基本上是跟美国名校CS专业的课程设置比较接轨了。每个学校的课程安排不太一样,国外高校是传统与创新兼备,国内高校基本上还是传统为主。不过国内高校也有一些特例,清华姚班就比较接轨国际顶尖CS专业的课程安排,专业课基本上也都是全英文授课,交大也有很多课程是英文授课,而且早在多年前交大CS就在尝试推进Python作为一门主要 编程语言 授课。
提一下清华姚班和南大 周志华 组
国内今天我不会详细说,国内计算机比较强的学校,清华、国防科大、北大、浙大、哈工大、北航、交大、南大、 华科 ,都是实力非常强的,传统的两电一邮、中科大、 东北大学 等等这些学校的计算机系也都是比较强的。大家也能找自己的同学、同行能够问到,我就不需要给大家普及了。
今天我要说两个特殊的,一个是清华的姚班,一个是南大周志华组。
清华姚班是行业内大名鼎鼎的,姚期智教授作为到目前为止,唯一的一个华人图灵奖得主,在学术界是泰斗级别的人物,来到清华教学,为清华培养了很多优秀的计算机人才。一个是南大的周志华组,周志华教授在全球 机器学习 领域也是著名科学家,对的、就是那本大名鼎鼎的西瓜书《机器学习》的作者,要知道南大在国内相对于清北复交浙也没有生源优势,在国际上更不能跟斯坦福、麻省理工等世界CS名校相比,但是还是取得了这样的成就还是很值得肯定的。
全球顶尖CS专业常用的编程语言
全球计算机界的四座金字塔, 斯坦福大学 、 加州 伯克利、麻省理工、卡耐基梅隆,在学术界都有着很高的地位,各大企业、高校抢人才,也基本上把这些院校作为首选目标,当然除了四大校,伊利诺伊香槟分校、 康奈尔大学 ,也都是计算机系很出名的,我们来看一下这些学校的一些经典课程相关的编程语言。
Stanford大名鼎鼎的CS106A和CS106B,这两门课非常出名的,很多人也会选公开课看,其中CS106A是JAVA语言为开发语言的入门课程,CS106B是以C++为开发语言的进阶课程。
UCB比较出名的是CS61A(计算机程序的构造与解释),就是传说中上千人分上下两层听的神课,这门课程是用Python来讲的,是的你没有听错,确实是Python,这里我要解释一下,SICP这本书吧是以 Scheme为主的,不过这本书本质上还是讲思想,语言并不冲突和影响,UCB用Python也说明了这点。
MIT 6.00.1x,这门课麻省理工同样适用Python来讲的,这门课全名叫做计算机科学与Python编程导论;MIT 6.006,算法导论,这门课主要还是用 C语言 实现,不过大部分都是讨论算法。当然还有很多经典的课程,比如Stanford 吴恩达 教授的CS229机器学习、 李飞飞 教授 的CS23N 卷积神经网络 。这些也都是非常经典的课程,大家都可以去看看。
被 谭浩强 老师和VC6.0支配的恐惧
我自己就是CS专业毕业的,我对于这些是有过体验的,我自己中学时开始学习编程,算是了解得比较早,后来到了大学之后,确实让我受到了一些冲击。
学C语言和C++的时候,我们当时上机环境主要也是在Windows XP上跑VC6.0,说实话我是有点难受的,我自己那时候主要还是在Vim(后来主要是Emacs)和CodeBloks写C/C++,对VC6.0很多不舒服的地方确实不太喜欢,可是考试环境是这个,我就逼着自己去习惯。
大家可能不太理解我看到周志华教授的西瓜书之后,那种感动到真的想要流泪的感觉,早些年在我国计算机专业教材中,真的是缺少精品,很多销量很高、被广泛使用的教材确实培养了一代又一代的本土计算机精英,可是也确实给很多学生造成了困扰,这也是我想跟大家唠唠这件事儿的原因。
当时我们的老师除了自己学校的教材之外,给我们推荐了谭浩强教授的那本销量千万的C语言神书,当然得向谭浩强老师为首的老一辈计算机教育家致敬,他们确实为我国计算机人才的培养、为我国计算机高等教育做出了伟大的贡献,这一点无可厚非。可是我还是要说,这本书真的会给很多学生造成非常大的困扰。我也是在造成困扰之后,选择了《C Primer Plus》和 K&R C,突然就发现很多搞不懂的事情,豁然开朗。
学习CS我觉得几点比较重要,好的教材或者书籍,好的公开课尤其是国外那几所名校那些响当当的课程,不断的练习和训练,加强自己的算法等方面的能力,随时准备去了解和学习一些比较新的技术知识,这才能够真正把这门课学好。