《C程序设计伴侣》试读——1.3B 我们为什么现在还要学习C语言

时间:2021-06-02 23:33:41
http://chenlq.net/books/c-mate/c-programming-partner-probation-1-3b-why-we-now-have-to-learn-the-c-language.html
1.3B 我们为什么现在还要学习C语言

在上面小节中,通过C语言和C++语言的对比,我们更加清楚地知道了C语言的面向底层和更高性能的特点,这使得它在众多的程序设计语言中独树一帜,是一门优秀的程序设计语言。但是,并不是C语言优秀,就意味着我们一定要学习它。世界上优秀的程序设计语言多了去了,为什么我们要选择C语言来学习呢?只有认清了这个问题,我们的学习才会更有动力,才会事半功倍。

回归到我们为什么要学习程序设计这个最基本的问题,如果我说我是因为爱好程序设计,想要为程序设计奋斗终生而学习程序设计,恐怕难以得到所有人的认可。事实上,我们学习程序设计,想要从事软件行业,很多时候是想找一份理想的工作,好养活老婆孩子。既然我们选择了程序设计行业,那么相应的程序设计语言的选择就至关重要了。正所谓男怕入错行,女怕嫁错郎。选择一门正确的程序设计语言,可以让我们如鱼得水,左右逢源,而错误地选择了程序设计语言,恐怕就会让我们处处碰壁,职业生涯前途堪忧。而正是C语言广阔的市场前景、优厚的薪酬待遇,让我们在众多的程序设计语言中,慧眼独具地选择它来作为自己的开发语言。当你拿起这本书开始学习C语言的时候,我们应该为自己感到庆幸,因为我们作出了正确的选择,不仅仅是选择了C语言,更是选择了这本书。

l 应用广

在程序设计界有一个著名的TOBIE编程语言排行榜,它是某种编程语言流行趋势的一个晴雨表。而在这个由全世界的程序员、第三方厂商选出的编程语言排行榜上,作为编程语言之林的常青树,C语言的市场份额10年来长期保持在15%至20%之间。在某些时候,还能够位于这份榜单的榜首位置,成为最热门最受欢迎的编程语言。

这份榜单也从一个侧面反映了C语言在当今软件业界的应用范围之广,其受欢迎程度丝毫不逊色于后起的Java以及C#等。C语言不是最时髦的编程语言,但却是不折不扣的最受欢迎的、应用最广泛的编程语言。

clip_image002

C语言长期名列前茅

l 机会多

C语言的应用范围广泛,意味着它提供给我们的工作机会也相对较多。虽然从总量上来看,Java和C#等新兴语言的工作机会更多,但是,学习这些语言的程序员也太多。据说,如果从楼上往下扔一块砖头,砸到十个程序员,有五个是学Java的,有四个是学C#的,只有一个是学C语言的。所以平均下来,C语言程序员的工作机会,要比其他语言的程序员的工作机会多很多。即使你在一些招聘网站,使用C语言作为关键词搜索得到的结果也会比其他语言多。学习C语言,也就意味你将不再为你将来的工作机会发愁。只要你学好了C语言,工作机会多得是。

l 薪酬高

尽管对于顶尖高手来说,达到了编程思想、方法论层面的炉火纯青,可鸟瞰一切平台和编程语言,但对大多数初涉软件行业的程序员来说,选择哪种编程语言和开发工具往往直接决定了当下的收入水平和生活水准。选择学习和使用C语言,除了可以获得更多的工作机会之外,更加诱人的一个原因是,C语言程序员的薪酬普遍较高。从一份来自CSDN的关于程序员薪酬的调查报告来看,使用C语言的程序员收入较低(不到2000元)的比率相对较少,而更多的是收入较高(5000元及以上)的群体,这个比率达到了62.5%,比所谓的编程语言新贵C#高出了整整16个百分点。即使对比同样风头正劲的C++,也高出了接近2个百分点。这一统计结果表明,市场对于C语言以及使用C语言的程序员都是认可的。学习和使用C语言,大有“钱”途。

clip_image004

学习和使用C语言大有“钱”途

综合起来看,不仅C语言的应用范围非常广泛,就业机会更多,同时相对而言薪酬水平也较其他编程语言更高。而这些,都是我们为什么现在还要学习和使用C语言的原因。我们有理由拒绝吗?


更多试读:http://chenlq.net

13 个解决方案

#1


楼主是出版社还是作者,貌似宣传了挺久了

《C程序设计伴侣》试读——1.3B 我们为什么现在还要学习C语言

#2


楼主的书在CU被批得太惨,转移阵地到这来了,哈哈。

#3


>通过C语言和C++语言的对比,我们更加清楚地知道了C语言的面向底层和更高性能的特点
更高性能。。。光这句就让我不想买了
C的性能最好会比C++高啦,两者的性能差距总是在正负5%之间
会觉得C的性能就是比C++高,八成是自己的C++写得太差了

#4


引用 3 楼  的回复:
>通过C语言和C++语言的对比,我们更加清楚地知道了C语言的面向底层和更高性能的特点
更高性能。。。光这句就让我不想买了
C的性能最好会比C++高啦,两者的性能差距总是在正负5%之间
会觉得C的性能就是比C++高,八成是自己的C++写得太差了


C++的空间开销普遍大于C,从ACM提交页面上其实就能看出来

性能上不用多态、不用流,C/C++差距基本可以忽略

但C++软件实际上确实大多比C版本慢,这不是C++本身的原因,而是大部分用C++的软件相对于用C的软件,性能不是那么重要,所以实现上一般更重量级,也缺乏一些优化

#5


进来看看吧。

#6


引用 3 楼  的回复:
>通过C语言和C++语言的对比,我们更加清楚地知道了C语言的面向底层和更高性能的特点
更高性能。。。光这句就让我不想买了
C的性能最好会比C++高啦,两者的性能差距总是在正负5%之间
会觉得C的性能就是比C++高,八成是自己的C++写得太差了

从总体方面上说,“更高性能”也可以这样说啦。毕竟BS当年发明C++的目标,是不低于或接近于C的性能,用可容忍的性能损失来换取相对而言较高的开发效率。

但是,那个“面向底层”就说得太离谱咯,会误导初学者的,这反映楼主对C语言的定位理解得并不准确。C语言虽然带有一些例如指针、位运算符等小数几种与低级语言相似(注意仅是相似,而非相同)的语言设施,但这远远不足以将其称为“面向底层”,无论从C在软件开发中的地位及语言的抽象特征等方面来说,C都属于高级语言,实际上,C的高层抽象使它对于操作系统、CPU等底层设施一无所知,这些都不是C所关心的东西,在C的眼中,它操作的实体都仅存在于它所规定的内存模型和对象模型之中,至于内存模型和对象模型是如何实现的,C并不关心,这是编译器的事情了。

所以,不要再说什么“C是面向底层”的,这种理解太粗糙了。汇编和机器语言才可称为面向底层的语言。

#7


>从总体方面上说,“更高性能”也可以这样说啦。毕竟BS当年发明C++的目标,是不低于或接近于C的性能,用可容忍的性能损失来换取相对而言较高的开发效率。

我觉得重点还是在于使用者要怎么用,因为设计的时候BJ很重视“zero overhead”的原则
所以C++的效能可以跟C一样好,但是实际应用上
C++的开发者确实有不少会用上更耗效能的写法
以换取较高的开发速度

虽然BJ有示范过如何利用template写出不会降低效能的程式
不过GP一直到今天依然只有那些开发library的人会大量使用而已
例如boost或stl。template的除错讯息根本不是人看的

#8


引用 7 楼  的回复:
>从总体方面上说,“更高性能”也可以这样说啦。毕竟BS当年发明C++的目标,是不低于或接近于C的性能,用可容忍的性能损失来换取相对而言较高的开发效率。

我觉得重点还是在于使用者要怎么用,因为设计的时候BJ很重视“zero overhead”的原则
所以C++的效能可以跟C一样好,但是实际应用上
C++的开发者确实有不少会用上更耗效能的写法
以换取较高的开发速度

虽然BJ有示范过如……


早期的许多优化理念其实都不适合现在了,template这种空间换时间的做法,导致可执行文件膨胀,是有可能造成缓存命中率下降而影响性能的,包括有时候O(1)复杂度的查表法性能不如O(n)复杂度的一般方法也是这个情况

#9


引用 7 楼  的回复:
>从总体方面上说,“更高性能”也可以这样说啦。毕竟BS当年发明C++的目标,是不低于或接近于C的性能,用可容忍的性能损失来换取相对而言较高的开发效率。

我觉得重点还是在于使用者要怎么用,因为设计的时候BJ很重视“zero overhead”的原则
所以C++的效能可以跟C一样好,但是实际应用上
C++的开发者确实有不少会用上更耗效能的写法
以换取较高的开发速度

虽然BJ有示范过如……

C++当然存在一些例如模板元等甚至能超越C数倍的语言设施,但我讲的是总体。

#10


出于人道主义精神  哈哈

#11


做个可能不太恰当的比喻:
人想让狗帮忙逮只兔子,可是人说话狗听不懂,于是人发明了一种介乎人言和狗语之间的语言,即口令。
人想让电脑帮忙做计算,可是人话电脑听不懂,于是人发明了一种介乎人言和汇编机器码之间的语言,即C语言。
人对狗的口令得让人容易学、也得让狗容易懂。
C语言同样得让人容易学、也得让电脑容易懂。
相比之下C++、Java就是人学得费劲、电脑也经常闹不懂。

#12


引用 4 楼  的回复:
引用 3 楼 的回复:
>通过C语言和C++语言的对比,我们更加清楚地知道了C语言的面向底层和更高性能的特点
更高性能。。。光这句就让我不想买了
C的性能最好会比C++高啦,两者的性能差距总是在正负5%之间
会觉得C的性能就是比C++高,八成是自己的C++写得太差了


C++的空间开销普遍大于C,从ACM提交页面上其实就能看出来

性能上不用多态、不用流,C/C++差距基本可以……

虽然C++抽象流存在虚拟继承,但由于C++标准流的具体流是独立实现的,所以实际上C++流与C流的性能对比是实现相关的,不同的实现会有不同的结果,如果再去除两者的互操作性,C++流的性能甚至可能大大超越C流。

#13


引用 6 楼  的回复:
引用 3 楼  的回复:
>通过C语言和C++语言的对比,我们更加清楚地知道了C语言的面向底层和更高性能的特点
更高性能。。。光这句就让我不想买了
C的性能最好会比C++高啦,两者的性能差距总是在正负5%之间
会觉得C的性能就是比C++高,八成是自己的C++写得太差了

从总体方面上说,“更高性能”也可以这样说啦。毕竟BS当年发明C++的目标,是不低于或接近于C的性能,用可容忍的性能……


谢谢你的观点
这里的面向底层和更高性能,都是通过与C++对比得出的,都是先对而言的
如果相对于汇编语言,当然是汇编更加底层了

#1


楼主是出版社还是作者,貌似宣传了挺久了

《C程序设计伴侣》试读——1.3B 我们为什么现在还要学习C语言

#2


楼主的书在CU被批得太惨,转移阵地到这来了,哈哈。

#3


>通过C语言和C++语言的对比,我们更加清楚地知道了C语言的面向底层和更高性能的特点
更高性能。。。光这句就让我不想买了
C的性能最好会比C++高啦,两者的性能差距总是在正负5%之间
会觉得C的性能就是比C++高,八成是自己的C++写得太差了

#4


引用 3 楼  的回复:
>通过C语言和C++语言的对比,我们更加清楚地知道了C语言的面向底层和更高性能的特点
更高性能。。。光这句就让我不想买了
C的性能最好会比C++高啦,两者的性能差距总是在正负5%之间
会觉得C的性能就是比C++高,八成是自己的C++写得太差了


C++的空间开销普遍大于C,从ACM提交页面上其实就能看出来

性能上不用多态、不用流,C/C++差距基本可以忽略

但C++软件实际上确实大多比C版本慢,这不是C++本身的原因,而是大部分用C++的软件相对于用C的软件,性能不是那么重要,所以实现上一般更重量级,也缺乏一些优化

#5


进来看看吧。

#6


引用 3 楼  的回复:
>通过C语言和C++语言的对比,我们更加清楚地知道了C语言的面向底层和更高性能的特点
更高性能。。。光这句就让我不想买了
C的性能最好会比C++高啦,两者的性能差距总是在正负5%之间
会觉得C的性能就是比C++高,八成是自己的C++写得太差了

从总体方面上说,“更高性能”也可以这样说啦。毕竟BS当年发明C++的目标,是不低于或接近于C的性能,用可容忍的性能损失来换取相对而言较高的开发效率。

但是,那个“面向底层”就说得太离谱咯,会误导初学者的,这反映楼主对C语言的定位理解得并不准确。C语言虽然带有一些例如指针、位运算符等小数几种与低级语言相似(注意仅是相似,而非相同)的语言设施,但这远远不足以将其称为“面向底层”,无论从C在软件开发中的地位及语言的抽象特征等方面来说,C都属于高级语言,实际上,C的高层抽象使它对于操作系统、CPU等底层设施一无所知,这些都不是C所关心的东西,在C的眼中,它操作的实体都仅存在于它所规定的内存模型和对象模型之中,至于内存模型和对象模型是如何实现的,C并不关心,这是编译器的事情了。

所以,不要再说什么“C是面向底层”的,这种理解太粗糙了。汇编和机器语言才可称为面向底层的语言。

#7


>从总体方面上说,“更高性能”也可以这样说啦。毕竟BS当年发明C++的目标,是不低于或接近于C的性能,用可容忍的性能损失来换取相对而言较高的开发效率。

我觉得重点还是在于使用者要怎么用,因为设计的时候BJ很重视“zero overhead”的原则
所以C++的效能可以跟C一样好,但是实际应用上
C++的开发者确实有不少会用上更耗效能的写法
以换取较高的开发速度

虽然BJ有示范过如何利用template写出不会降低效能的程式
不过GP一直到今天依然只有那些开发library的人会大量使用而已
例如boost或stl。template的除错讯息根本不是人看的

#8


引用 7 楼  的回复:
>从总体方面上说,“更高性能”也可以这样说啦。毕竟BS当年发明C++的目标,是不低于或接近于C的性能,用可容忍的性能损失来换取相对而言较高的开发效率。

我觉得重点还是在于使用者要怎么用,因为设计的时候BJ很重视“zero overhead”的原则
所以C++的效能可以跟C一样好,但是实际应用上
C++的开发者确实有不少会用上更耗效能的写法
以换取较高的开发速度

虽然BJ有示范过如……


早期的许多优化理念其实都不适合现在了,template这种空间换时间的做法,导致可执行文件膨胀,是有可能造成缓存命中率下降而影响性能的,包括有时候O(1)复杂度的查表法性能不如O(n)复杂度的一般方法也是这个情况

#9


引用 7 楼  的回复:
>从总体方面上说,“更高性能”也可以这样说啦。毕竟BS当年发明C++的目标,是不低于或接近于C的性能,用可容忍的性能损失来换取相对而言较高的开发效率。

我觉得重点还是在于使用者要怎么用,因为设计的时候BJ很重视“zero overhead”的原则
所以C++的效能可以跟C一样好,但是实际应用上
C++的开发者确实有不少会用上更耗效能的写法
以换取较高的开发速度

虽然BJ有示范过如……

C++当然存在一些例如模板元等甚至能超越C数倍的语言设施,但我讲的是总体。

#10


出于人道主义精神  哈哈

#11


做个可能不太恰当的比喻:
人想让狗帮忙逮只兔子,可是人说话狗听不懂,于是人发明了一种介乎人言和狗语之间的语言,即口令。
人想让电脑帮忙做计算,可是人话电脑听不懂,于是人发明了一种介乎人言和汇编机器码之间的语言,即C语言。
人对狗的口令得让人容易学、也得让狗容易懂。
C语言同样得让人容易学、也得让电脑容易懂。
相比之下C++、Java就是人学得费劲、电脑也经常闹不懂。

#12


引用 4 楼  的回复:
引用 3 楼 的回复:
>通过C语言和C++语言的对比,我们更加清楚地知道了C语言的面向底层和更高性能的特点
更高性能。。。光这句就让我不想买了
C的性能最好会比C++高啦,两者的性能差距总是在正负5%之间
会觉得C的性能就是比C++高,八成是自己的C++写得太差了


C++的空间开销普遍大于C,从ACM提交页面上其实就能看出来

性能上不用多态、不用流,C/C++差距基本可以……

虽然C++抽象流存在虚拟继承,但由于C++标准流的具体流是独立实现的,所以实际上C++流与C流的性能对比是实现相关的,不同的实现会有不同的结果,如果再去除两者的互操作性,C++流的性能甚至可能大大超越C流。

#13


引用 6 楼  的回复:
引用 3 楼  的回复:
>通过C语言和C++语言的对比,我们更加清楚地知道了C语言的面向底层和更高性能的特点
更高性能。。。光这句就让我不想买了
C的性能最好会比C++高啦,两者的性能差距总是在正负5%之间
会觉得C的性能就是比C++高,八成是自己的C++写得太差了

从总体方面上说,“更高性能”也可以这样说啦。毕竟BS当年发明C++的目标,是不低于或接近于C的性能,用可容忍的性能……


谢谢你的观点
这里的面向底层和更高性能,都是通过与C++对比得出的,都是先对而言的
如果相对于汇编语言,当然是汇编更加底层了