这个问题应该分成两个来看讨论:应不应该学C语言,和应不应该在大一的时候上C语言。
应不应该学C语言?- 应该!
大一的时候应不应该学?- 有待商榷,我倾向于不应该。
不要被漫天飞舞的各种培训机构的学Python,Java的广告骗了,认为C语言应该被淘汰,落后于这个时代了。如果用TIOBE的排名作为参考(这个排名主要评估编程语言流行程度),C语言长期处于第一或第二的位置(一般是Java、C轮流坐庄)。流行程度,某种程度上也可以看作工作机会的多少,从这个角度来看,C应该更火才对。
那么问题来了,为啥各种培训广告不教C语言呢?广告词都写好了,"长期霸占编程语言排行第一名,学习C语言走向财富自由"。一个简单的原因是C太难了!C难的不是语法,难的是学习C的过程,实际上也是了解计算机工作原理的过程,甚至是学习整个现代计算机,冯诺依曼体系结构的过程。培训学校当然不会教这个,他们只需要产出会码字的码农就好了。
所以C语言绝对应该是大学计算机相关专业的必修课。
但同样的原因,导致我倾向于大一的时候不应该学习C语言。国内国外越来越多的大学也在逐渐变革,使用Java、Python作为入门语言。教育本身就是一门复杂的学科,否则也不会有教育学这门学科了。我认为一门优秀的课程,应该有明确的教学目的。作为给大一新生的第一门编程课,它的目的应该是什么?我认为应该是教会学生什么是编程,让学生切实体会到,他们以后将从事的工作,是将解决问题的办法,转化成一行行代码,最后让计算机执行的过程。可以说第一门编程课,应该是程序员作为一门职业的导论课。如果以这样一个目的设计课程,显然C语言是不合适的。因为C语言本身杂揉了许多计算机原理的东西,这些知识应该是归在高级课程里,而不是塞给大一新生。
但其实我的假设本身就有问题,计算机专业(特指Computer Science)的教学目的到底是培养程序员(码农),还是学习计算机理论,亦或是其他。事实上,我认为计算机产业已经发展的足够庞大,需要进一步细分培养计划了。这一点上,我觉得更多的学校应该学习CMU,把整个CS拆成更多的小院,这样也更有利于不同背景的人才培养。