没学过 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]

目录
相关文章
|
1月前
|
SQL 缓存 PHP
PHP编程中的性能优化技巧
【10月更文挑战第42天】在Web开发的世界里,PHP以其易用性和灵活性广受欢迎。但随之而来的性能问题也不容忽视。本文将探讨一些实用的PHP性能优化技巧,帮助开发者编写更高效、响应更快的代码。从减少不必要的计算到优化数据库查询,这些建议将引导你走向更流畅的PHP编码之旅。
29 0
|
5月前
|
缓存 JavaScript 前端开发
优化中文编程语言的基准性能
【7月更文挑战第7天】本文探讨了对中文编程语言OTao的优化,涉及衡量性能、基准测试和剖析等关键步骤。通过分析和优化这些热点,可以提升整体性能。
99 3
优化中文编程语言的基准性能
|
5月前
|
监控 网络协议 Linux
Linux系统管理与优化技巧:提升性能与效率的深度探索
【7月更文挑战第24天】Linux系统管理与优化是一个持续的过程,需要管理员和开发者不断地学习和实践。通过合理的系统监控、内存管理、文件系统优化、进程与任务管理、网络优化以及软件与包管理,可以显著提升Linux系统的性能和效率,确保业务的稳定运行。希望本文的技巧能为广大Linux用户带来帮助,共同推动Linux生态的繁荣发展。
|
前端开发 Java 编译器
Java反射和new效率对比,差距有多大?
Java中,一般我们创建一个对象可能会选择new一下个实例。但是随着我们技术的不断提升,我们也学习到了,可以通过反射技术实现对象的创建。 可是,你有没有想一下,什么时候我们改用new创建对象,什么时候我们改用反射创建对象呢?
|
负载均衡 并行计算 算法
BWA序列比对方法丨针对较大基因组的并行计算和性能优化方式,利用多线程和负载均衡策略提高效率
BWA序列比对方法丨针对较大基因组的并行计算和性能优化方式,利用多线程和负载均衡策略提高效率
|
缓存 负载均衡 固态存储
MySQL优化心得:提升性能的关键步骤
MySQL作为最常用的关系型数据库管理系统之一,优化性能是每个开发者和管理员必须掌握的技能。
181 0
|
编译器 C++
C | 一种需要特别留心的编程错误(++i) + (++i) + (++i)
诸如此类的表达式`(++i) + (++i) + (++i)`,很多学校都喜欢用在学生的期末考里,看似经典的考题,有没有可能本身就是错误的呢?这种错误并不是语法错误,是可以正常运行的,这就造成了“==它是正确的编程==”这种假象
120 0
C | 一种需要特别留心的编程错误(++i) + (++i) + (++i)
|
SQL 关系型数据库 MySQL
巧用这19条MySQL优化,效率至少提高3倍
1、EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划 type列,连接类型。一个好的SQL语句至少要达到range级别。杜绝出现all级别。 key列,使用到的索引名。
1415 0