你已经是个成熟的985大学了,请不要在大一教 C 语言

以下文章来源于编程指北, 作者编程指北
你已经是个成熟的985大学了,请不要在大一教 C 语言文章插图
编程指北
【你已经是个成熟的985大学了,请不要在大一教 C 语言】编程学习之路的好帮手、指南针~
昨天晚上回家后突然在朋友圈发了个问卷 , 看下国内大学第一门语言到底有多少是用的 C 语言 。
你已经是个成熟的985大学了,请不要在大一教 C 语言文章插图
结果也是很符合预期 , 使用 C 语言做第一门编程语言课的大学达到了 90% 以上 。
你已经是个成熟的985大学了,请不要在大一教 C 语言文章插图
之前在知乎看见一个问题 , 问为什么还有985高校给大一上 C 语言课 , 如下:
你已经是个成熟的985大学了,请不要在大一教 C 语言文章插图
原问题
不过这个提问方式未免有引战嫌疑 , 所以被知乎管理员编辑为如下问题:
你已经是个成熟的985大学了,请不要在大一教 C 语言文章插图
现问题
这样显然中立很多了 , 是在摆事实提问题 。
接下来我们就聊聊 985 大学为什么还是给大一上 C 语言课 。
一、为什么要学 C 语言?首先 , 我们学的是 Computer Science , 而不是 Programming Language , 语言真的真的真的不是重点 。
语言只是工具 , 工具没有优劣 , 只有各自适用的场景不同 。
所以 , 以下所有讨论皆不涉及语言优劣 , 一切论述以怎样才是有利于学好 Computer Science 为原则(求生欲满满
大学教育 , 尤其是 985、211 这种国内最顶尖的一批高校 , 应该注重通识教育而不是专项教育 , 在专业上更要注重基础、底层、偏向原理 。
只有掌握了最核心的东西 , 学起那些偏技能的东西才会很快很轻松 。
我记得当时大二需要写爬虫 , 大概看了一天左右的 Python 教程 , 会基本的循环、判断、控制流、一些 builtin 函数和类 , 然后学了下 requests 库就直接开干了 。
其实像 JS、Python、Node、PHP 这些东西 , 科班学生几乎都是自学 , 哪还用得上单独开一门课呀 。
自学是最基本的要求 , 需要用到的时候自己去看教程、文档 , 直接就上手写了 。
所以这种语言完全没必要开一学期的课来学 , 倒是非常适合放在计算机导论课程中 , 成为其中一个章节 。
比如 Berkeley 开设的导论课 CS 61A 就是以 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 编程语言排行榜前三 , 甚至榜首 , 这足以说明它是一门经久不衰的语言 。
在日新月异的计算机行业 , 一个历经四十多年任然流行的技术 , 才是需要我们去关注和学习的经典 。
我在那篇文章中说 C 语言是最适合用来理解计算机系统底层机制的语言 , 那今天就详细说说 , 这些底层机制都有哪些:

  • 内存
一名合格的程序员必须了解内存 , 学习 C 语言是了解内存布局最直接、有效的途径 , 大家可以看到之前讲解指针那篇文章--深入理解内存和指针 , 全部都是从内存、内存布局出发进行讲解 。