从语言层次的角度看为什么要精通C语言

---2017年7月12日

---宁哥 QQ 1455153071

---微信公众号:宁哥实战课堂

谈到C语言,很多人的第一反应就是定义变量、if...else...等这些细节语法,然而更应该时刻不能忘记的就是它在编程世界中的位置。前者那些是语法细节,后者是更需要一种宏观认识,才能对它理解的越来越深刻。为什么有句话说“十年都不敢说精通C语言”是有一定的道理的。所以,这里从宏观上来看待C语言。

编程语言一开始是由0101这些机器码编程开始的,那时候的编程的确是一种只有高智商的人方可做的工作,因为你得背诵一堆堆的指令,如:ADD指令假设为10011100,这你得记住!所以,这样的编程要麻烦的多,也不利于普及,人数力量有限,就不能把功能做的太强大。

所以前辈们根据社会需求改进了,提供了最初的翻译器:汇编。这样人们不再需要写机器指令如:10011100,而只要写ADD,通过汇编工具就可以把ADD转换成机器码,从而简化了编程,这是最初的为人而做的编程语言:汇编语言。然而这种语言还不能解决一个事情,那就是你写的指令是由机器CPU的指令系统决定的,言下之意,不同的CPU指令系统就决定了你写的指令是不一样的。也就是移植性的问题,这个不是汇编语言产生的,而是本来就有的,汇编只是还没解决。

移植性的问题不解决,那么同样的软件在不同的平台就得又要重新写一套,甚是麻烦。

所以更上层的编程语言就应该出现了,这就是C语言。它解决了CPU指令系统的跨平台,但是越来越多的对硬件的操作,都被封装为各种各样的驱动,由操作系统来承载,所以现在的跨平台不但是要CPU指令系统的跨平台,还要包含操作系统的跨平台。这样就要继续产生更高级的跨平台,如:java。java是通过弄出中间字节码的方式(而不是最终的二进制的方式)来实现更完美的跨平台。

虽然是功能上解决了,但是牺牲的却是代码质量。兼容性越好,需要考虑的异常就会越多,容错性也就要做的更好,代码则会更多,这样又对编译器的功能要求越来越强大,功能强大则意味着性能会降低,就像整体的效率是由串联电路上的多个关键环节共同决定,最差的那个环节决定了整体的效率。因此越是上层的编程语言,性能势必越低下。表现为:功能强大的东西需要底层语言来开发。所以游戏行业的引擎是不宜用PHP和JAVA来开发的,都是用C/C++来开发...否则就会卡到死...同理,安装软件和APP中很卡的软件,就是因为用上层语言来开发而导致了无法解决的性能问题。

所以,不管是人们追求的火热行业:嵌入式,移动互联网,物联网,云计算,大数据,这些的性能要好,就得是C/C++去支撑。更多技术行业,水到深处,就是落实到C/C++了。

如:导弹的航行速度8000米/秒。试想你的程序如果有0.1秒的误差,那么你将会误差800米,这就不是指哪打哪,而是指东打西了,打的牛头不对马嘴。

差之毫厘谬以千里,这句话在编程效率和性能领域内比比皆是。

现在追求的是速度,速度,还是速度!!!

1:性能对比参考:

效率最高的是机器语言。其性能大概是汇编语言2倍;而汇编语言又是C语言2倍;而C语言又是C++的1.5倍;C语言是JAVA的5倍;

如果从速度上来看:机器语言执行1秒,汇编语言要2秒完成,C语言要4秒完成,C++要6秒,JAVA要20秒完成,黄花菜估计都凉了。

语言越高级,速度越慢;

2:语言的层次发展汇总:

图示:

3:C语言地位...

C语言的核心地位从这里可以看到,它是其他语言如:C++以及更高级语言的基础语言。C语言学不好,C++难精通,C/C++学不好,JAVA难精通,PHP同样难精通,JS同样难精通,数据结构和算法的必学基础课...linux操作系统难把握。这些都是连贯到一起的,就像应聘PHP高薪的职位,别人不是考你PHP的语法,而是问你linux操作系统,数据结构,Nosql这些去了。

C语言是有史以来最为重要的编程语言,要进入编程行业高手级别必学C语言,当然要挣大钱必须要精通C语言。它是所有大学理工科必学的科目,也是未来科技中的核心编程语言。是几乎所有名企、外企、高薪编程职位的面试比考内容。做黑客、红客也必须掌握的编程语言。

所以,才是:学好C/C++,走遍全球都不怕。现在赶紧恶补C语言...,不论你现在是做.NET,还是JAVA,还是PHP,还是JS...《C语言,好爽》2017,就是为它而生的!

时间: 2024-12-29 06:49:23

从语言层次的角度看为什么要精通C语言的相关文章

一起talk C栗子吧(第一百三十二回:C语言实例--从内存的角度看进程和线程)

各位看官们,大家好,上一回中咱们说的C程序内存布局的例子,这一回咱们说的例子是:从内存的角度看进程和线程.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们刚刚介绍完C程序的内存布局,我们趁热打铁,从内存的角度来分析一下进程和线程. 不管是进程还是线程,他们都会加载到内存中才能运行,因此他们在内存中的布局和其它C程序的内存布局完全相同.进程和线程的内存布局也分为代码区,数据区,堆区和栈区. 对进程来说,父子进程只共享代码区中的内容,父子进程拥有各自的数据区,堆区和栈区.而且它们只能

从另一个角度看癌症,现象、结果并不一定是病因!

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 早上刚醒,不知怎地,有了关于癌症的一些辩证想法, 其实,很多事情不是没有解决办法,而是看问题所站的角度不同, 所以,微信网传的那个外国人弄出的 Y

Android IOS WebRTC 音视频开发总结(四八)-- 从商业和技术的角度看视频行业的机会

本文主要从不同角度介绍视频行业的机会,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,欢迎关注个人微信公众号blacker ------------------------------------------------------------- 这段时间在北京呆了10天左右,相对深圳,这边有点冷,也比较干燥,期间发生了两件大事: 1,优酷和土豆被阿里招安了 2,搜狐出品人大会召开了 第一件事是大事,但跟我们关系不大,第二件事不算大事,但跟我们关系不小,原因如下: 1,优酷土豆

2018-03-28 从人机交互角度看中文编程:'打开微信'

前文通用型的中文编程语言探讨之一: 高考是基于现有英文编程语言的一个技术思路. 在这个回答以及下面的讨论中, 又提到了编程其实是人机交互的一种形式. 不禁试着跳出程序员视角看这个问题. 几年前才发现Mozilla的火狐浏览器早在2008年开始了一个叫Ubiquity的项目, 而且根据这里介绍, 它直到最近的火狐浏览器大改才失效. 官网介绍摘选: Its purpose was to explore whether a radically different type of interface t

从实践者的角度看软件架构的历史

无论什么东西,套用宋丹丹的话,就是都有它的过去.现在和将(jiǎng)来.因此学习一样东西,如果能多学一点它的历史,会让我们对其为何有如此现状少一些纠结,同时才有可能对其未来趋势有靠谱一点点的洞见.昨夜窗外雨声稀疏,难以入眠,突然想到软件架构的发展史是怎样的,于是今晨起来网上逛一圈,邂逅到这篇论文<The History of Software Architecture – In the Eye of the Practitioner>,因此,这是一篇译文. 小弟不才,没有能力自己去梳理这么庞

从一个程序员的角度看——微信小应用

前言: 最近初步了解了一下微信小应用,APP端的同事也非常感兴趣,于是在公司内部做了一个小小的分享,分享的过程中有很多讨论内容,大家也是非常感兴趣和有自己的看法,当时"混乱"的场面好几次我都没有把持住.以下内容部分来自于内部分享所用ppt.文章对微信小应用的使用做了展示性介绍,并简单介绍了代码结构.后端交互方法.最后提出一些总结和疑问.文章内容比较主观,有不对的地方欢迎大家指出纠正. 前段时间微信小应用公开内测,在朋友圈火了一把,各种阐述疯狂蔓延,干掉APP之类的说法比较突出,确实达到

另一种角度看《RFID Advanced Security》首部曲

机缘巧合,有幸看到了不少关于RFID的资料,并且有幸看到了<RFID Advanced Security>这份PDF,听说这是国内安全大会上比较早出现关于RFID的议题.又听说这份是乌云内部的高级教程,文章内容单薄是无可厚非,毕竟是演讲,单单时间上来说不可能什么都讲.看完了以后实在有点不(fei)知(yi)所措(si),因为槽点实在是太多了. 文章分成4大块,分别为"RFID Basic Knowledge.RFID Basic System Security.RFID Multip

从JVM的角度看JAVA代码--代码优化

从JVM的角度看JAVA代码–代码优化 从JVM的角度看JAVA代码代码优化 片段一反复计算 片段二反复比較 在JVM载入优化为class文件,运行class文件时,会有JIT(Just-In-Time)的介入,它会做进一步优化,这样就须要考虑是否可能被JIT优化. 片段一:反复计算 // 反复计算,这里b()被计算两次 Object a = b() == null ? "" : b(); // 优化代码 Object c = b(); Object a = c == null ? &

INDEX--从数据存放的角度看索引2

在上次<INDEX--从数据存放的角度看索引>中,我们说到"唯一非聚集索引"和“非唯一非聚集索引”在存储上有一个明显的差别:唯一非聚集索引的非叶子节点上不会包含RID的数据,让我们继续来深挖一下. 准备测试数据: CREATE TABLE TB1 ( C1 INT, C2 INT, C3 INT ) GO CREATE UNIQUE CLUSTERED INDEX IDX_C1 ON TB1(C1) GO CREATE UNIQUE INDEX IDX_C2 ON TB1(