当有朋友希望我教授编程的时候,有一个问题对我很困扰。

教哪一门编程语言

我想现在大家或多或少会听说过那么几种编程语言

Java

Ruby

Go

在Wiki上还专门有一个页面列出了几乎所有的编程语言List of Programming Language。没仔细数,感觉怎么也得有几百种。我想这也是想学习编程的初学这感到头大的事情,究竟要从哪个开始学习?

对我个人而言,教大家c语言是最轻松的,因为我这么多年的工作经验就是c语言。随便挑一个点,都可以讲上很久,直到把你讲晕。然而这么做没有意义。对来听的同学,学不到真的东西。而对于我,这就是随便糊弄。

在《通往财富自由》专栏,老师对知识的定义又加了一个维度--时间。有些知识的时间作用范围比较短,而有些知识的时间作用范围比较长。我想

那些时间作用维度长到一定界限的知识就是经典。

经过多日的思考,我认为c语言确实可以算得上是经典。

历史悠久

C语言在1969年由两位贝尔实验室的科学家创造。仅从年头上来看,也就四十年。但是要知道第一台电子计算机是1946年才发明的,而第一台晶体管计算机诞生于1954年。所以c语言的历史,几乎就是整个计算机发展史。

别看c语言是编程界的老大爷,他老人家身体还硬朗着呢。

编程语言排名

这是2017年,全球编程语言的排名。大家可以看到c语言排名第二,活跃程度依然很高。然而与c语言同期的其他很多语言,几乎已经看不到他们的身影了。

看完了这张图,我突然想插入一个观点。

c语言并不难学

现在有不少不推荐入门者学习c语言的原因是觉得c语言的语法太复杂,对初学者来说不容易理解。然而这个排名却恰恰显示了这个观点是不正确的。如果这个语言的语法真的非常难学,那么应该会有更多的项目会采用更好的语言来实现。也就不会有c语言依然保持这么高排名的情况了。比如说大家几乎已经不记得的COBOL。

子孙众多

另一个可以说明c语言是经典的就是由c语言实现或者和c语言相关的语言达到了60多种。

这个网站上列出了这些相关的语言,其中包括了大家耳熟能详的

Java

Go

这么庞大的c语言家族正说明了c语言本身的优势。

或是运行快速

或是代码精简

或是结构简练

如果我们从生物学的角度来看,凡是后代众多的都是因为其基因强大。而c语言这么多的后代,也证明了其语言自身强大的生命力。

其中我最想强调的不是运行快速,而是结构简单。当大家去看c语言代码的时候,如果和其它语言进行比较你会觉得c语言代码简直有种“裸”的感觉。

从一个层面上讲,“裸”带来的是“慢”。正如大家知道的,用Ruby搭一个网站可能只要几分钟。但用c语言,那么。。。

但是从另一个层面讲,“裸”带来的是“活”。就好像降龙十八掌,虽然只有十八掌,但是只要内功深厚能破一切。就好像我们所说的“元认知”,虽然简单,却可以用来认知万物。就好像《道德经》中的道,能够“道生一,一生二,二生三,三生万物”。

承上启下

假入我们把编程语言的发展看做是物种的演化,那么粗略的可以把编程语言分成这么几类

机器语言

汇编语言

高级语言

机器语言基本就不是人能看的,一般能看得懂机器语言的我都称之为神。汇编语言也很难懂,除非特别熟悉计算机体系结构的。而高级语言则是我们大家通常能够见到的。比如Java, Ruby, Python这些都是高级语言。

而c语言是最接近机器的高级语言

绝大部分高级语言中出现的语法,在c语言中都有呈现。

判断

分支

循环

这几个套路在各种高级语言中都是一样一样的。从底层逻辑来讲,学好了c语言,其余的高级语言也就学会了。

而c语言还有这其他语言没有的特点--接近机器。

很多人认为这是c语言的缺点,暴露了机器的运行情况对大部分用户来说是不关心的。但是我在使用过程中却并这么认为。

了解了底层机制,你能更好理解语言的运行,发挥语言的效能

通过c语言的代码,你可以完全确认代码执行的行为。但是对于其他的高级语言,你可能必须要查阅手册,甚至是做实验你才能知道函数的行为。这点其实非常让人头疼。在这我就不举例子了,因为大部分读者应该很难理解。

那我说另一个点,为什么理解机器运行是有益的,尤其对初学者来说。最近在看python的代码,发现python中仍然对数据类型需要区分定义。比如fload64, float是区分的,但是不理解原理的就不清楚这是在说什么。

这么讲大家估计还是不懂,那我做一个类比。

就好像食堂师傅炒菜和家里炒菜,使用的锅应该是不一样的。食堂里用的应该会大一些,家里用的会小一些。食堂用小锅,那估计大厨要累死,吃饭的要饿死。家里用大锅,连放哪都不知道。而float64和float之间的关系就类似于这个食堂大锅和家里小锅的关系。

如果你知道了原理,这个概念就非常好理解。而c语言的概念中就包含了这些原理性的东西,让你在一次学习之后就能举一反三,知道这一类问题在其他语言中的处理。

这种原理性的东西和举一反三的能力,我认为就是经典。

写在最后

王强老师说过“读一流书,做一流人”,所以学习就要学经典。

经过了几日的思考,我终于确认在编程语言界,c语言是我能见到的经典语言。大家通过对c语言的学习,不仅能掌握绝大部分高级语言必须的知识,更能够通过c语言了解计算机体系相关的知识点,做到融会贯通,举一反三。那么此时我再推荐大家学习就问心无愧了。

PS:不知道王强老师的请关注微信公众号《杨小伟的世界》,查阅文章《学编程,究竟学的是什么》。

c 是哪一代编程语言,c是经典编程语言相关推荐

  1. 函数式编程语言python-函数式编程语言

    最近一段时间总是听到或者看到有人谈论"函数式编程",第一次接触是在大概半年前的一次沙龙中,当时听人讲的时候,心想这有什么难理解的,函数式编程,函数嘛,那就是C呀,C++放在首位的是 ...

  2. python编程语言能干什么-python编程语言的优势与劣势--python能干啥

    首先先发表小编的观点吧嘿嘿:python并不适合作为第一编程语言,但是第二编程语言的首选 (哥哥们先别喷我,且听我慢慢说来~~~) 先解释一下啥是第一第二编程语言吧: 通常从事开发的程序员都会学不止一 ...

  3. Java 答疑:编译器和解释器有何区别?Java 语言属于编译型编程语言还是解释型编程语言?

    文章目录 前言 一.Java 与 Java 字节码 二.什么是编译器(Compiler) 三.什么是解释器(Interpreter) 四.编译器与解释器有何区别? 五.Java 语言属于哪种语言? 总 ...

  4. PHP跌出前十,Python依然霸占榜首,C#有望摘得年度编程语言 TIOBE 12 月编程语言排行榜

    整理:丁广辉 出品:CSDN 日前,全球知名 TIOBE 编程语言社区发布了 12 月编程语言排行榜.下面让我们一起来看看,本月榜单中有哪些值得注意的新变化吧. PHP跌出前十,C#可能成为2021T ...

  5. 「干货」编程语言十大经典算法,你知道几个?

    算法与数据结构是计算机学习路上的内功心法,也是学好编程语言的重要基础.今天给大家介绍一下十大经典算法. 十大经典算法分别是:冒泡排序,插入排序,选择排序,希尔排序,快速排序,归并排序,桶排序,堆排序, ...

  6. C/C++只做经典编程语言

    1.从C到C++ 计算机诞生初期,用机器语言或汇编语言编写程序; 第一种高级语言FORTRAN诞生于1954年; BASIC语言(1964)是由FORTRAN语言的简化而成的是为初学者设计的小型高级语 ...

  7. 计算机编程语言历史_早期编程语言的历史

    计算机编程语言历史 From Babbage to Babel and Beyond is an article written by Linda Weiser Friedman. This text ...

  8. 全部python编程语言-可以用 Python 编程语言做哪些神奇好玩的事情?

    贪吃蛇.迷宫.吃豆人.扫雷.Flappy Bird...这些游戏可以是非常经典,甚至伴随着很多人的童年回忆.那么,你是否想过自己开发一款专属游戏?是否思考过开发这样一款游戏需要多少工作量? /> ...

  9. 脚本语言和编程语言的区别_编程语言和脚本语言之间的区别

    脚本语言和编程语言的区别 A programming language is a language used to write set of instructions to perform a tas ...

最新文章

  1. RabbitMQ入门(4)--路由
  2. LCLFramework框架之Service模式
  3. 第七周项目一-友元函数(3)
  4. 产品网络推广方案浅谈网站的相关性对优化的影响!
  5. Gradle项目中gradle.build文件中的buildScript代码块
  6. 为什么font-family最后都会加上sans-serif字体?
  7. comet for java_java comet tomcat推送
  8. 转----ASP.NET中常用的优化性能方法
  9. JS原型继承工作原理
  10. 月薪多少最幸福,离你有多远?
  11. 【CodeForces - 471D 】【构造差分kmp】MUH and Cube Walls
  12. 单片机ISP烧录原理
  13. oracle复合索引第一个字段,复合索引的先决使用条件 - stacktestor的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  14. 计算机音乐A谱,WPSOffice谱写音乐简谱
  15. 微信电脑版找不到服务器,实用微信小技巧:微信无法连接服务器解决办法
  16. MongoDB报错,Sort operation used more than the maximum 33554432 bytes of RAM.Add an index
  17. 百度收录提交 网站快速收录提交方法【附工具】
  18. c语言编程统计学生个数,c编程统计并显示500至800之间所有素数的总个数以及总和...
  19. Packet Tracer学习小结(基本SwitchPort VLan)
  20. 关于人工智能的定义,这篇文章定义比较全面了

热门文章

  1. 美光并没有背信弃义,而是在向英特尔示好
  2. 从新版电视剧《笑傲江湖》看到的颠覆思维
  3. 在 64 位 linux 机器上安装 jdk1.6 jdk-6u45-linux-x64.bin的安装
  4. 软件测试需要学什么(软件测试人员怎么入行)?
  5. 招商银行2021FinTech精英训练营数据赛道方案分享
  6. 自动驾驶汽车?法律:伦理
  7. 问渠那得清如许?为有源头活水来。——java面向对象的思想
  8. 一家赔了15年的书店,为什么得到人们如此厚爱?丨好书优选
  9. 有数列:9,99,999,9999...,编程计算前10项的值。
  10. 服务器双通道与单通道的差别