【在主画面加入捷径】
       
【选择语系】
繁中 简中

技术杂谈:为什么要 (或不要) 学习 C 语言

【赞助商连结】

    在大专院校的资讯科系中,C 语言是必学的,这有一些教学上的考量,不纯然以实用观点出发;不过,现在自学程序的风气较以往兴盛,对于这些人来说,C 语言是否还要学呢?笔者一开始自学程序设计时,也傻傻地买了 C 语言的书来看,但是 C 语言要学到能做出足够实用的应用程序来,其实并不是那么容易,经过一段时间后,笔者才慢慢了解 C 语言在电脑界的位置。C 语言的知识仍然有其必要,但是否要深入学习,则要看当下的情境而定。

    对于初学者来说,虽然大专院校都以 C 语言做为学习工具,但这不代表我们就要用 C 语言做为第一个语言。对于初学者来说,学习程序设计的重心应该在于学习高阶的概念,并不是成天在跟指针 (pointer) 奋战,或是用一些低阶的手法处理字串。国外的一些 MOOC 开始用 Python 做为程序设计教学的工具,代表国外的教学者也有类似的想法。我们不用神化 Python,其实 Ruby 也提供相似程度的高阶抽象;重点并不是使用 Python 或是 Ruby 或是其他语言,而是使用一个可以专注在学习程序设计的工具。

    那么,是不是代表我们就不用学 C 了呢?倒也不是。C 语言在电脑科学上有着特殊的地位,不仅是第一个广泛使用的跨平台语言,也是许多重要软件所采用的工具。像是操作系统、驱动程序、编/直译器等软件界的基础建设都是用 C 写成;一些常见的函式库,也是用 C 写成 (一部分用 C++),再制作不同语言的 binding;许多程序语言都会提供 C 的 API,用来扩展语言的功能;对于嵌入式系统,由于硬件效能的限制,仍然需要 C 这个层级的工具。虽然高阶语言的舒适圈很舒服,但许多延伸模块内部其实内部是用 C (一些是 C++) 写成。

    有些程序学习者会以为 C 语言没有用,这是因为一般人一开始使用电脑是从 Windows 开始,而 Windows 设计的使用对象是一般使用者,软件都做成安装精灵程序,使用者不会接触到函式库。对于开发者来说,Windows 生态圈没有一个良好的套件机制让开发者分享 C函数库,一些学习者误以为 C 语言只有标准函式库那些东西,说实在的,只有标准函式库很难写到实用的程序。不过,原本 C 语言就没有规范套件的形式,一些类 Unix 系统,像是 GNU/Linux 或 BSD 家族系统,是透过系统套件自行处理掉这些问题。

    由于语言的选择变多、分工变细,直接用到 C 的机会比从前少,一些程序设计者会转用和 C 接近但对面向对象支援更好的 C++,或是转用 Java 或 C# 等运行在虚拟机器之中的语言;对于不注重效能的程序,使用 Python 或 Ruby 等高阶语言就足以处理;Go (golang) 等新兴编译语言和 C 速度差异不大,但写起来更轻松。C 仍然是电脑界的地基,许多基础工具仍会用 C 撰写,其他高阶语言也会用 C 做为接口。了解 C 对了解电脑的确有一些帮助,只是不是每个人都要跳下来自己写 C。