昨天晚上回家后突然在朋友圈发了个问卷,看下国内大学第一门语言到底有多少是用的C语言。
结果也是很符合预期,使用C语言做第一门编程语言课的大学达到了90%以上。
之前在知乎看见一个问题,问为什么还有高校给大一上C语言课,如下:
原问题不过这个提问方式未免有引战嫌疑,所以被知乎管理员编辑为如下问题:
现问题这样显然中立很多了,是在摆事实提问题。
接下来我们就聊聊大学为什么还是给大一上C语言课。
一、为什么要学C语言?首先,我们学的是ComputerScience,而不是ProgrammingLanguage,语言真的真的真的不是重点。
语言只是工具,工具没有优劣,只有各自适用的场景不同。
所以,以下所有讨论皆不涉及语言优劣,一切论述以怎样才是有利于学好ComputerScience为原则(求生欲满满
大学教育,尤其是、这种国内最顶尖的一批高校,应该注重通识教育而不是专项教育,在专业上更要注重基础、底层、偏向原理。
只有掌握了最核心的东西,学起那些偏技能的东西才会很快很轻松。
我记得当时大二需要写爬虫,大概看了一天左右的Python教程,会基本的循环、判断、控制流、一些builtin函数和类,然后学了下quests库就直接开干了。
其实像JS、Python、Node、PHP这些东西,科班学生几乎都是自学,哪还用得上单独开一门课呀。
自学是最基本的要求,需要用到的时候自己去看教程、文档,直接就上手写了。
所以这种语言完全没必要开一学期的课来学,倒是非常适合放在计算机导论课程中,成为其中一个章节。
比如Berkeley开设的导论课CS61A就是以Python作为练习语言,但是似乎国内很少有高校开这种导论课。
但是C、C++这种语言,不学个一两个月,连个像样的程序都写出来,这种才是适合开一门课。
先说一下学习C语言的目的,上面我说语言不是重点,这也包括C语言。
但是C语言特殊就特殊在它可能是唯一最适合用来学习一系列计算机基础课的工具和媒介。
比如操作系统,实验几乎都是用的纯C写的lab;
又比如汇编,学习的时候可以和C语言对应起来,了解if、for、while、数组访问等对应汇编是怎么样的;
又比如学习计网,这里面有很多的网络协议,会有不同的header定义,这些header中很多都是按bit来划分字段的,用C语言的union和struct是最好操作这些字段的,Java和Python等语言虽然也能表示,但是可控性会差很多,以前尝试过用Python去组装IP包头,非常的麻烦也不优雅。
并且C语言本身抽象层次非常低,语法也很简单,没什么语法糖,很贴近操作系统。
而其它很多解释型语言会存在虚拟机这一层,虚拟机对我们算是一个黑盒,不利于透过语言去理解计算机的一些行为。
所以我之前在--如何成为一个计算机知识体系完整的毕业生中把C语言也列为计算机专业的基础,而且是程序员必学的知识。
二、C语言的优点C语言已经走过了四十多年的历史,但是在今天,任然常年霸占TIOBE编程语言排行榜前三,甚至榜首,这足以说明它是一门经久不衰的语言。
在日新月异的计算机行业,一个历经四十多年任然流行的技术,才是需要我们去