没学过 C 语言的代价

简介:

C 语言确实显得有些老旧。最近一版权威性的 C 语言还是 1988年 发布的;在接近 30 年的时间里,这个语言的作者一直都没有对它进行过更新,可见它有多过时了(这里有误。2011 年 12 月 8 日,国际标准化组织(ISO)和国际电工委员会(IEC) 旗下的 C 语言标准委员会(ISO/IEC JTC1/SC22/WG14)正式发布了 C11 标准。C11 标准是 C 语言标准的第三版,前一个标准版本是 C99 标准。)现在,一说到必须有所了解的编程语言,大家都会想到 Rust、Go 或是 Clojure,却很少有人会想到 C 语言。

但是我的同事 Myles 和我都不是追求潮流的人,因此我们坚持让所有学生都熟练掌握 C 语言。

之所以要求学生学习这门古老的编程语言,我们有下面 4 个理由:

在湾区的 web 和移动初创企业之外的地方,C 语言依然是一个被广泛应用的编程语言;

许多现代编程语言都受到了 C 语言的影响;

C 语言能让你像计算机一样思考;

在编写软件的时候,你现在所使用的大部分工具,都是使用 C(或C++)语言所开发的。

对于第一条理由,如果你就是想在湾区的 web 或是移动初创企业找一份工作的话,你可以忽略它。但是第二条原因是你无法回避的。而大多数工程师,都应该重视第三条理由,要想做好计算机工作,你就必须要理解计算机的思考方式。对于第四条理由,它也是非常难以忽略的。

掌握 C 语言,意味着你可以更好的理解你所使用的各种工具。例如,对于 web 开发者来说,他们必须要透彻的理解浏览器、操作系统以及所使用的各种语言,而这一切都是以 C 语言为基础的。

我们的大多数学生,在使用直译式语言的时候,都会同时使用那些用 C 语言所编写的流行的实施工具。我们经常做这样一个联系:让学生们编写一个 Python 字节码解释器,从而让他们更好的理解堆栈式机器和直译式语言;在进行这个练习的时候,学生需要仔细阅读 CPython 的部署。另外,Ruby 的实施参考也是用 C 语言编写的,还有大部分 JavaScript 部署,他们是用 C++ 编写的。

在学习 hashmaps 和动态数组的时候,我们有两种方式:第一,自己进行部署,使用一种能让我们具体对内存布局进行思考的语言;第二,阅读相关优秀的部署实例。学生要想理解 Python 列表或是 Ruby 数组的工作方式,我们同样有两种方式:第一,让他们从头自己编写一个版本;第二,阅读标准库部署的资源——在没有接触过 C 语言的情况下,要想彻底理解这些概念,基本上是不可能的事情。

如果不掌握 C 语言,要想了解操作系统也会变得更加困难。我们现在所使用的大部分操作系统,都是用 C 语言编写的,C 语言的标准库与 syscall 接口紧密相连,而且大部分与操作系统相关的概念都需要你先熟悉 C 语言。

在计算机网络方面,虽然对 C 语言不熟练并不会影响你的日常工作,但是那些要想了解操作系统 TCP/IP 堆栈的从业者,会逐渐意识到 C 语言的重要性。

最后再来说说数据库,关键值存储,消息队列和其他分布式操作系统技术,要想获得较高的性能,它们都需要你对 C 语言有所了解。

很多软件工程师可能对 C 语言并不了解,在某一个狭小领域内的日常工作,或许并不需要你掌握基础知识。但是我们要求学生必须要打好基础,而 C 语言就是计算机科学工作的先决条件。如果你也有着较高的目标,那么我建议你暂时搁置那些潮流语言,花几个周末的时间去学学看上去有些过时的 C 语言。

文章转载自 开源中国社区 [http://www.oschina.net]

目录
相关文章
|
3天前
|
SQL 存储 算法
高效查询秘诀,解码YashanDB优化器分组查询优化手段
高效查询秘诀,解码YashanDB优化器分组查询优化手段
|
10月前
|
存储 算法 编译器
掌握Go语言:探索Go语言递归函数的高级奥秘,优化性能、实现并发、解决算法难题(28)
掌握Go语言:探索Go语言递归函数的高级奥秘,优化性能、实现并发、解决算法难题(28)
163 0
|
10月前
|
算法 搜索推荐 程序员
C++标准库算法指南:从线性到复杂度 — 选择最佳工具
C++标准库算法指南:从线性到复杂度 — 选择最佳工具
144 0
|
缓存 算法 Cloud Native
面试技巧:如何在有限时间内优化代码性能
面试技巧:如何在有限时间内优化代码性能
90 0
|
SQL 算法 数据挖掘
SQL练习:轻轻松松,1(中等)+2(较难)
SQL练习:轻轻松松,1(中等)+2(较难)
128 0
SQL练习:轻轻松松,1(中等)+2(较难)
|
编译器 C++
C | 一种需要特别留心的编程错误(++i) + (++i) + (++i)
诸如此类的表达式`(++i) + (++i) + (++i)`,很多学校都喜欢用在学生的期末考里,看似经典的考题,有没有可能本身就是错误的呢?这种错误并不是语法错误,是可以正常运行的,这就造成了“==它是正确的编程==”这种假象
130 0
C | 一种需要特别留心的编程错误(++i) + (++i) + (++i)
|
Java C语言 Python
编程语言对高手没有差别,对低手差别太明显
编程语言对高手没有差别,对低手差别太明显
82 0
|
缓存 Rust 网络协议
一行“无用”的枚举反使Rust执行效率提升10%,编程到最后都是极致的艺术!
最近不少读者都留言说博客中的代码越来越反哺归真,但讨论的问题反倒越来越高大上了,从并发到乱序执行再到内存布局各种放飞自我。 其实这倒不是什么放飞,只是Rust对我来说学习门槛太高了,学习过程中的挫败感也很强,在写完了之前的《Rust胖指针胖到底在哪》之后笔者一度决定脱坑Rust了,但截至本周这个目标还是没有实现,因为我所在的Rust学习群,有一个灵魂拷问,Rust的技术本质什么?不回答好这个问题,我简真是没法得到安宁。
一行“无用”的枚举反使Rust执行效率提升10%,编程到最后都是极致的艺术!
|
量子技术 算法
带你读《量子编程基础》之三:量子程序的语法与语义
本书讨论了如何扩展当前计算机的新程序设计方法和技术,以利用量子计算机的独特能力。相比于现有计算机系统,量子计算机在处理速度上具有显著优势。世界各地的政府和企业都投入了大量资金,希望建造实用的量子计算机。本书结合作者在量子计算领域多年的研究经验,并辅以大量的例子和插图,介绍了量子编程语言及其所需的重要工具和技术,对于学者、研究人员和开发人员来说都是非常宝贵的参考资料。

热门文章

最新文章