C语言确实显得有点老了。C语言最新的权威版本发布于1988年;将近30年了,这门语言的作者还没有更新,可见它的过时程度。现在,说到必知的编程语言,大家都会想到Rust、Go或者Clojure,很少有人会想到C语言。但我和我的同事Myles都不跟风,所以我们坚持要求所有学生都精通C。我们要求学生学习这门古老的编程语言有4个原因:在湾区的网络和移动初创公司之外,C仍然是一个广泛使用的编程语言;受C语言影响;C语言让你像电脑一样思考;在编写软件时,您今天使用的大多数工具都是用C(或C++)开发的。对于第一个原因,如果你只是想在湾区的网络或移动创业公司找工作,你可以忽略它。但是第二个原因是你无法避免的。而大多数工程师应该注意第三个原因。要想做好计算机工作,就必须了解计算机的思维方式。至于第四个原因,也很难忽视。掌握了C语言就意味着你可以更好地理解你所使用的各种工具。例如,对于Web开发人员来说,他们必须对浏览器、操作系统以及所使用的各种语言有深入的了解,而这一切都是以C语言为基础的。我们的大多数学生在使用文字语言的同时,同时使用用C编写的流行实现。我们经常会做这样的联系:让学生写一个Python字节码解释器,让他们更好地理解栈机和直译语言;做这个练习时,同学们需要仔细阅读CPython的部署。此外,Ruby实现参考也是用C编写的,而大多数JavaScript部署都是用C++编写的。在学习hashmaps和动态数组的时候,我们有两种方式:一是自己部署,使用一种可以让我们详细思考内存布局的语言;第二,阅读相关的优秀部署示例。如果同学们想了解Python列表或者ruby数组是怎么工作的,我们也有两种方式:第一,让他们从头写一个版本;在这样的情况下,基本不可能完全理解这些概念。如果不懂C语言,那么理解操作系统就比较困难。我们现在使用的大部分操作系统都是用C语言编写的。C语言的标准库与syscall接口紧密相连,大部分与操作系统相关的概念都需要先熟悉C语言。在计算机网络方面,虽然C语言不熟练不会影响你的日常工作,但那些想了解操作系统TCP/IP栈的从业者会逐渐意识到C语言的重要性。***我们来谈谈数据库、键值存储、消息队列和其他分布式操作系统技术。要达到更高的性能,它们都需要你对C语言有所了解。很多软件工程师可能不会C语言,在某个狭窄领域的日常工作可能不需要你掌握基础知识。但是我们要求学生打好基础,C语言是计算机科学工作的前提。如果你也有更高的目标,那么我建议你暂时放下那些时髦的语言,花几个周末的时间学习一下看似落伍的C语言。
