c语言的使用比例远远高于python语言吗_有人说C语言过时了,要学就学Python,怎么反驳他?...

我个人认为,这实际上反映了编程语言(教学)史上两大学派--C和Lisp学派经久不息的争论.

C学派和Lisp学派分别代表了自底向上(from bottom to up)和自顶向下(from top to bottom)两种教学方式."自底向上"派观点认为,应当从计算机底层的知识开始教起,然后一步一步提高程序的抽象层次直至达到应用程序水平,所以在学习二进制之前,应该先具有逻辑电路的相关知识;在编写任何严肃的程序以前,必须先掌握内存架构和内存分配相关知识,是一个从具体到抽象的过程.而另外一派的观点则截然相反:应当先教授抽象的程序,这些程序是用什么语言写的不重要,甚至这些程序只不过是伪代码,只能"在心灵中执行",程序的思想不依赖于我们有没有计算机,然后在实现的过程中再教授具体的东西(譬如,如果我们要实现一个排序算法,应该采用什么数据结构,这些数据结构用C语言的结构体如何实现,内存如何管理等等),是一个从抽象到具体的过程(所以Lisp非常适合这一目的,因为Lisp本来可看做一种符号语言,在纸上也能执行演算).

这两种争端在别的学科中也有,比如在数学中有布尔巴基学派(对应着"自底向上").两种方法各有优越性,最后也是殊途同归:C学派最后也会教授程序抽象和结构化程序设计,而Lisp学派也会涉及到计算机底层的细节(譬如内存分配,大概会从垃圾回收器来入手,而不是从C学派所用策略).只不过就目前的趋势来看,"自顶向下"一派似乎更有优势一些.

其实也没什么奇怪的,考虑到计算机的普及,越来越多非专业人士也有编程的需要,这些并不关心任何计算机实现的细节,他们仅仅希望将手头的任务完成,他们需要一门编程语言来实现他们头脑中的想法,编程语言抽象层次越高越好,因为这样就越接近他们的想法,实现的难度也就下降.例如抽象数据结构(Abstract DataStructure),一个人只需要知道这个数据结构上的接口(例如Python的List可以append,extend等等),就可以使用这个结构,而无须担心这个List到底在堆上还是在栈上,实现的时候是单链表还是链表加上数组等等.

注意,这并不是说(像这个回答下一些人表达的观点),采用"自顶向下"方法的人,就比采用"自底向上"方法的人,要"低级"一些.只不过这些人不必做某事,不代表他们不能做某事.

一个使用Python的人,一样可以学习内存分配的相关知识(或者Java在这里更加合适),只不过,他并不像在C语言中那样要频繁使用到这个内存分配的知识,因为垃圾回收使得手动内存分配这件事情变得没有必要.这也不是说内存分配知识在动态语言中毫无必要,只不过在动态语言中,内存分配的相关知识的运用,并不在于进行手动分配这一点上,而在于如何与编译器的内存优化(局部变量放在栈上,逃逸变量检测)和垃圾回收器协作.同样的,Python没有显式的指针,不代表在Python不能学习指针这个概念,在动态语言中,引用是和指针对应的概念(引用是隐式的指针,动态语言的变量和静态语言的变量不是一回事).

换句话说,如果上述底层实现的知识对于一个人而言是必要的(不管这个人是出于好奇还是什么缘故),那么从理论上说,他可以从Python出发来获得这些知识,只不过实际上有一些因素限制了这一点,那就是绝大多数的较为底层的应用和教材都是用C语言写的(也还有一些是用Java或者伪代码之类的写的),由于C的设计比别的语言更加simple(不像例如Rust之类的基于LLVM的语言,优化就有好几层,编译以后代码都严重变形了),可以更好在课堂上教授(例如汇编代码更加好阅读等等,类型系统更加简单).

所以这又产生了一个新的问题:任何试图了解更多的人(尤其是操作系统和网络编程的这些知识)都不可能绕过C语言(不管是考虑到历史还是教育因素等等).但这并不能证明C语言没有过时(当然也不能证明C语言就过时了).

如果"过时"的含义是从编程语言设计的角度说的,不是从编程语言流行程度的角度说的.从某种意义上看,C语言和Python语言都"过时"了(当然Python还是比C年轻),因为他们都差不多是上个世纪80,90年代的产物了,至多只能反应当时的编程语言的设计水平,也就是面向对象风靡的时刻,而像近几年出现的Typescript等编程语言才能算是比较"先进",从这个角度说,没有吸收最新编程语言研究成果的C语言确实就已经"过时"了.不过这种"过时"并不说C语言就不好,只不过是说对于这种编程语言,大家都已经研究透彻了,所以大家在着手设计更加复杂,更加抽象的编程语言.简单的语言包含在更加复杂的语言之中,这并不代表简单的语言过时.举例而言,正则表达式比图灵完备的语言简单,但是日常编程的时候程序员仍然大量使用正则表达式,但这也并不代经常使用的正则表达式就要比更少使用的更加强大LL(1)优越一些.

说了那么多,就想指出一件事情:如果我们抽象的看待编程语言,那么C语言是完全包含在Python之中的,因此理论上,任何使用C的教材可以改成用Python来写(但是这种改写实际上至多发生在程序员的心灵之中,不会有人真的干这种事情),因此Python程序员无须因为Python比C更好写而感到自不如人或者低人一等.从编程语言设计的角度上(和上手难易度)说,C语言确实比不上现在出现的新语言,但是从实际的使用上看,C语言还是比较比较主流的选择.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值