精英盒子 -> 程序设计 -> 转(后附个人见解):为什么C语言屹立不倒? [打印本页]

jybox 2012-06-11 23:33

转(后附个人见解):为什么C语言屹立不倒?

有些语言诞生几十年了依然是世界上最流行的语言,比如C语言。有些语言虽然号称新兴的语言却很少有人使用。在编程语言这个领域里似乎不符合长江后浪推前浪这个规律。这恐怕不止语言本身的因素,里面的缘由值得研究者好好去探索一番。


近年来,谷歌一直致力于开发出自己的编程语言以取代当今世上最常用的C、C++和JavaScript。在系统语言方向,谷歌的Go语言能够为用户在数据中心内建立大型软件提供更多的便捷,有望取代C语言和C++的地位;而在网络开发方面,谷歌希望凭借Dart取代JavaScript。编程语言的世界里可谓是江山代有人才出,可有那么一位引领风骚达数十年之久,它就是C语言。
编程语言之间的竞争一天也没能停歇,长江后浪推前浪,一代更比一代强。它们之中只有屈指可数的少数能够被市场接纳,成为程序员们日日夜夜的伴侣。究竟怎样的编程语言才能够成为大浪淘沙中的幸运儿?普林斯顿大学(Princeton)和加州大学伯 克利分校(University of California at Berkeley)的研究者雷欧·马耶若维奇(Leo Meyerovich)和阿里·拉布金(Ari Rabkin)希望通过自己的研究,来解开编程语言世界的丛林法则。他们在探寻一个问题——为何C语言虽垂垂老矣却能屹而不倒?
雷欧和阿里采访了数以万计的程序员,又在全球最大的软件仓库SourceForge梳理了超过30万份的程序。“为什么C语言没有被淘汰?”拉布金提出了这个问题。的确,C语言距问世之初已经有了35年的历史。在这期间里,计算机迈出了不可测量的发展步伐,软件和操作系统也早就今非昔比,编程语言中不乏叱咤风云的新生代,而C语言也有了升级版。即便如此,C语言依旧风采不减当年。
拉布金刚刚取得了加州大学伯克利分校的计算机博士学位,如今在普林斯顿大学攻读博士后学位。“在学术领域,现今的趋势是解决那些尚未出现的难题,”拉布金说,“学者们希望能够标新立异地建立起一个全新的语言系统,就没有考虑这么一套编程语言是否有实践的价值。编程语言的开发者们缺少一个明确的目标。”他指出,有些编程语言甚至缺失了最基础的东西,比如文档(Documentation);还有些开发者不停地在语言系统上画蛇添足,弄到最后搞的程序员们只能因为它太“丰富”了不得不放弃。马耶若维奇认为:“我们发现这个问题事实上不是一个技术领域的问题,它是因为整个学术界不够注重实践需求所造成的”。
新兴编程语言Scale是一个很好的例子。数据分析机构Slice-Data的创始人之一张洋(音译)是Scale众多使用者中的一员,他从2006年起开始接触Scale。Scale在问世之初文件编制就存在很大的缺陷,这给用户的学习使用造成了很大的不便和痛苦。“我当时肯定是个受虐狂。”他回忆道。
除却新兴语言本身的问题,这里面还有一个要素是程序员的学习能力。试验中收集的信息表明,因为学习新语言太辛苦困难了,程序员们在使用一款新型的编程语言前并不会认认真真地去学习一番。马耶若维奇拿Adobe公司开发的ActionScript作为例子。ActionScript是一款以用户为导向的编程语言,程序员们普遍认为ActionScript的使用比较简单。可是当要用ActionScript做新的事时,比如从媒体开发转向游戏开发,因为没有系统的学习过,他们就束手无策了。
我们普遍认为,程序员年龄越大,经验就越老道,掌握的语言就越多。事实又是怎样的呢?雷欧和阿里在试验中发现,多数程序员都掌握了3至4种程序语言,但当他们到了35-40岁时,很多人就会步入管理岗位。脱离了编程一线,学习新语言的动机和机会就大打折扣了。
马耶若维奇认为,他们正在研究的这个课题十分重要,关乎整个行业是否能够高速和健康地发展。他和拉布金把实验数据都发布在网络上,希望他人能够给出新的视角,同时为如何解决这一问题提供建议与帮助。

jybox 2012-06-11 23:33
http://www.guokr.com/article/222043/

文章编译自Wired网站: Why Do Some Programming Languages Live and Others Die?
作者: Caleb Garling

jybox 2012-06-11 23:51
我感觉C语言一直屹立不倒,稳定是其中非常重要的原因,从C语言诞生到现在,几乎没有多大的变动,即使是增加一些新特性,也会尽最大努力保证与原有代码的兼容性,即使是计划被移除特征,也只是“建议不再使用”,原有的代码依旧能够通过编译

这种高度的稳定性和C语言的定位是分不开的,C语言本来就是定位于较底层的驱动、操作系统等应用,它们需要效率,需要稳定。大量的其他应用都依赖于它们,它们(例如操作系统)不可能频繁地进行修改.

之前在百度贴吧看到一个帖子:
【板砖PK】不要再迷信C99了!没用!!!  http://tieba.baidu.com/f?kz=752636048

这贴被顶了200多楼,主要是楼主也是个奇葩....非说C语言标准更新的太慢,羡慕C#等语言经常更新、加入新特征。而且吐槽相当不到位,基本功不扎实.....



再说编程语言之间的比较,我一直纠结个问题,为什么人们,包括大牛们都常说编程语言之间无所谓好坏呢。应该是可以比较的呀
今天看C++之父的新书《C++的设计和演化》,他提出一个观点:
一般情况下,编程语言之间很难进行比较,首先你很难找到两种编程语言是用于同一个领域的,即使找到,也很难做出公正的评价。
你势必会偏向其中一种,你了解它,所以你免不了试图去用你偏向的那种语言刚刚推出的新的、高级的特征,去和另一种语言几年前的样子去比较。
你也免不了,对于自己了解的语言的缺陷,快速的给出一个合理的解决方案。而对于另一种语言的缺陷,因为你不了解,所以你认为是那是一个硬伤。

------------
在我周围,经常出现各种各样的争论,编程语言和各种技术的优劣,以及项目的可行性,占了很大的一部分,但是争论到最后大多很难得出一个共识
这其中,跑题(包括故意的转移话题)、混淆概念、人身攻击、车轱辘话来回说,恐怕占了相当大的比例
也由于上述情况的存在,让旁观者很难客观的了解谁是谁非

我想,是否能设计一个(网页)应用,能够让争论有条理起来。
例如,将聊天记录显示成一个树形的结构,列出所有分歧,当转移话题的时候,就从一个分支移动到另一个分支进行争论,以及其他一些措施,避免上述那些情况的发生

让围观群众能够看到,这个人在哪一个点上在理,那个点上不在理。因为很难有人完全是对的嘛,如果争论结果是“一刀切”,一方对,一方不对,那么谁都不会服气的
可以在上面提到的,每一个分支(就是双方的每一个分歧)后面达成一个结果

xttyctl9 2012-08-23 20:32

xttyctl9 2012-08-23 20:32
挖坟

abreto 2012-09-01 13:53
C语言接近底层,我比较喜欢。
另外jy后面说的那个撒子分支,可以考虑实现啊。

jybox 2012-09-01 18:26
abreto:C语言接近底层,我比较喜欢。
另外jy后面说的那个撒子分支,可以考虑实现啊。 (2012-09-01 13:53) 

JyBBS会实现其中一部分的




Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.044120 second(s),query:5 Gzip enabled