臧成威的博客

不要让惯性影响你的未来

2014-8-28 周四 晴

不要忽视C语言

看到过很多人发表过对C语言的抨击,称其看起来很难看,面向过程是一种旧时代的产物。

我想说的是,请不要忽视C语言。

几乎所有的学校都会以C语言作为一个入门的语言。我觉得有几点需要思考:

  1. C的确是很“入门”的语言,因为他的学习曲线较为轻松,初学的时候既没有大量的库和框架,也没有复杂的语法概念(指针稍微麻烦一些),还没有很复杂的开发环境。面向过程的程序是最直观和易了解的。

  2. C语言很利于锻炼一个人的开发思想,实际解决问题的能力,C语言的考核应该是纯粹的能力考核,而不是对各种库和框架的熟悉程度。

  3. C语言是实现操作系统和数据结构的最佳语言,首先它没有太多的库的包袱,其次它可以方便的访问硬件。它不会让你觉得实现动态数组是很无聊的事(Ruby、Python党绝对不会想自己实现可变数组)。

  4. C语言被老师给认为太简单了,很多的教师和教学机构只让最菜的老师来教C语言,这直接导致大家没有学好C语言。

  5. C语言最精髓的部分被砍掉了,很多的学校C语言的学时通常不够,所以结构体、位段、高级指针、预编译等通常都被阉割了。第4条所说的老师们,又碍于面子,对学生提出的”指针的指针应该怎么用?”“为什么int a[3][5]和int **b不能互相转化?”的问题回答通常是“这个用不到。”。这就导致大家对C的普遍认知存在问题。

  6. C语言的教学目的是让入门者可以更快的掌握计算机开发的一些原理,并快速实践。但C语言绝不是只能面向过程设计的,几乎所有的C核心代码都是面向对象设计的,例如Linux、Win32内核、大家在iOS中的各种核心库如CoreGraphics、CoreText等。对于iOS开发者来说,如果你稍多了解就可以知道你是可以用C来生成ObjC的类和方法的,而这些几乎没有老师交代过。

首先背负着沉重的教育背景,C已经让绝大部分人忽视了,接下来的就业环节又让C被更加的忽视:

  1. 没有多少公司用C

  2. 很多的公司和老板觉得C没啥用,又干不了什么

  3. 搞Java、Ruby、Objective-C的同学都看起来不错,搞C的同学都在嵌入式公司赚少量的钱(呵呵,我当年就是)

最后我来说一说了解C的必要性:

  1. 对内存和硬件的操作,是目前绝大部分高级语言所隐藏的,只有坚实C背景的同学,才可以考虑的更多,如果你想对原理有更多的了解,那么C其实是不可绕过的一个环节。

  2. 想要缔造一个新的系统和语言,没有C是不行滴(或许C++勉强)。

  3. 不管是OC的消息系统,Java的自动回收,Ruby的动态类扩充,这些花哨且时髦的东西,其实都可以用C来实现,而且很多都是用C来实现的,如果你想自己实施,看C吧。

  4. 破解和分析程序,C可以起到很大的作用。C是可以人为创建Bug来破坏一个系统滴。

最后我引用我的一个大牛朋友的话:“请不要忽视C语言,它上可九天摘月,下可五洋捉鳖”。

Comments