30种编程语言的比较选择问题

http://blog.csdn.net/ljy1988123/article/details/7782700本文涉及到的编程语言:C、C++、Java、C#、Prolog、VB、Scala、Clojure、Haskell、Ada、Python、Ruby、Pascal(Delphi)、Fortran、Lisp、matlab、Perl、Erlang、Boo、Tcl、Bash、C shell、Objective-C、PHP、PL-SQL、Transact-SQL、ASP、JSP、Lua、smalltalk、R、D

涉及到的工具:sed、awk、grep

我们现在学一门语言,大部分是要用到了才学(基本上是中国的公司用什么我们学什么),基于兴趣的不多。

比如,大头肯定是C++和java,因为这个最容易混饭吃。最近多玩用了Erlang,还有不少公司跟风上了Erlang,让这个沉默了好久的语言忽然被明星了。

大公司一般除了C++外,都会招Java,事实上,互联网公司,Java占了半壁江山(当然,没选java架构的除外,有不少.net族的)。所以,生活在贫困线上的广大中国程序猿很少有人会去看看诸如scala之类的玩意。不过作为胶水,python、perl还是有一定的用户量的。

似乎,我们生活中只有这么几种语言。。。

貌似,遇到一个问题,我们该选择什么语言呢?虽然每个语言本质上都是图灵完备的,但是能用prolog写出来的东西,如果用别的语言写,会无比痛苦。这就是不同语言存在的原因:不同的问题,不同思考方式(编程范式)。

  • 解决问题case:已知大量事实,和事实之间的约束,要求挖掘关系。

果断用prolog族语言。

例如,汉诺塔、地图着色、数独问题、八皇后问题等这种考验智商,并且需要从已知规则中发现模式的问题。拥有一大堆已知案例的应用(例如大部分的人工智能情况)

  • 应用程序case:从小到超大型应用程序,非完全互联网应用

这也是大部分软件公司遇到的情况。一般有几种没办法分出高下的解决方案:C++,Java,C#,VB。当然,这里面可以有CLR和JVM的不同衍生。例如,理论上,你也可以用scala来代替(不过估计大型公司不会冒这个险)。还是在理论上,你也可以用函数式编程的ClojureHaskell来做(估计没人会那么傻)。还是在理论上,也可以用Ada这种强悍的通用语言,但估计没人愿意接收比C++还复杂的编程语言。理论上(基本只能在理论上),不嫌弃的话smalltalk也行。还是在理论上,python、ruby等配合一定的图形界面库也可以胜任(但项目大到一定的程度是,你会欲哭无泪)。

但是,我另起一行。有个语言:D语言。我个人不认为不可以列入首选名单。但是貌似知名度不行啊。。。。企业支持少啊。。。。。确实是门优秀的语言。C++太尾大不掉,需要一种语言,让C++成为纯粹的C++。

稍小一点规模的,无法接受面向对象的程序员,有不少用C的。虽然OOP程序员看他们像是不开化的人,但是他们有他们的哲学(我从嵌入式开发过来,相当长时间内也摆脱不了C,总本能的排斥OOP)

  • 解决问题case:程序规模不是很大的偏数学问题

曾经很多人用Pascal(包括扩展的Delphi),曾经很多人用Fortran,但是都明显在退步。大型通用语言(C++、Java、C#)表明了他们在各种环境的适应能力。lisp系列也在一些问题上展现出古老的魅力。(但这个语言远没有《黑客与画家》的作者给我们描述的那样神奇,个人认为。不过我的C++风格思想占了主导,可能没办法公正的评价lisp,但是据我的使用lisp经验,在大部分情况下,我最后还是放弃了它。因为大部分情况下我总能找到用C++(或其他OOP语言)更好的原因)

另外,读研的一般都用过matlab。这个工具,两个字:强大!不过仅指科学计算方面。脱离了这个方面,就得考虑合不合适了,毕竟固定的矩阵思维不是啥情况都有效的。我用matlab最多的是神经网络,图片和信号处理。毫不夸张的说,matlab活脱脱一个photoshop啊。。。(当然,你得会用。。。)不过matlab的神经网络确实不行,做的太差了,小规模的网络可以,3层不用BP的F网,几十个就挂掉了。有这个需求的用ANN吧。(还是C++,偷笑)

  • 特殊应用case:需要大量处理字符串的应用

首选利器是Perl,不过如果你习惯了sed、awk、grep,也能很方便的完成相同的功能,但perl是吸收三家所长做的。

其次是C++,别拍我。诸位用过regex吗?就是boost里的那个,最近被并入C++11啦。有了正则表达式的C++,处理字符,无敌了很多哇。当然,Java程序员别拍我,我知道这种库一个大型的通用语言都会有。我提C++,一般顺带着不否定Java和C#能以相似的代价完成相同的功能。

  • 特殊应用case:需要一个胶水,粘结不同语言写出来的程序

首选是python。俩字:精简(呀,这么说一个强大的语言有点太轻浮了,但比起ruby,确实简单呐。。。)(另外Boo在.net是可以用来取代python)

其次是ruby。俩字:复杂

毕竟,没有rails,ruby根本火不起来。事实证明,python的哲学很对。当然两种语言有很多细节的不同,甚至在编程范式上不同(真想不明白白ruby支持多种范式怎么可能是个优点?市场证明了python的纯粹)

  • 特殊应用case:自动化测试

不用问了,肯定是tcl了。

由于这个特殊应用,所以个人用户基本用不到,大部分是嵌入式公司。华为、数通、迈普等。。。

  • 特殊应用case:系统底层

这个肯定是C了。操作系统,驱动,底层软件,大部分都是C写的,调用API,如果不用微软的Activex之类的技术,还是得老老实实用C API的。

  • 特殊应用case:系统管理

这个系统管理,一般指linux的。首选肯定是各种shell啦:Bash、C shell

  • 特殊情况case:苹果平台

我们没得选。。。。objective-C

  • 特殊领域:嵌入式

大部分都是C了。不过andriod平台和苹果平台就得听话了。gmszone 网友建议把Ada也放在这里,我不否定Ada在嵌入式领域的广阔未来和实实在在的实力。但C主导了嵌入式这么久,程序员基本没办法接受别的思维了。比如ARM,三年前我用的Xscale,我实在不愿意想象放弃C。嵌入式的玩意对错有时候根本没办法说,所以很重要的是经验,前人的积累,所以就像垄断一样,不是革命性的优秀根本无法动摇根基的。我用过spartan的FPGA,我记得当时选的core也全部是用C做编程接口。所以,很抱歉这里我无法接收该网友的意见。

  • 特殊应用:网页

嵌入网页内的,最火的肯定是PHP(后端)和javascript(前端)了。前者代替了古老的cgi。

但是,java系的jsp内嵌java,asp内嵌C#,都是php的强劲对手。

通用语言在各个方面咄咄逼人。

  • 特殊应用:数据库

就是比哪个SQL版本更被人接收。标准sql自然不必说,根据排名,PL(SQL)/Transact-SQL上榜。

  • 特殊应用:并行,分布式

并行越来越重要了。

首选Erlang

但是,基于已有的条件,还是考虑选用通用语言的并行优化。C++、Java、C#等都在这方面做了很多优秀的工作。

  • 特殊应用:特定语言的功能增强

不用问了,我想说的是Lua。用C++写实现,用Lua写逻辑是好多游戏的经典开发策略。(当然像Unity用的javascript,Unreal用的自己的。)

在通用大型语言的基础上学会用Lua加速,是一种很有趣的实践。

  • 特殊应用:人工智能

人工智能上,prologlisp是宠儿。

R语言有时也被用于数据挖掘(但是太慢了)

时间: 2024-10-01 03:22:33

30种编程语言的比较选择问题的相关文章

我应该选择哪种编程语言?(Java*、C#、C++ 或 HTML5)

您是否有关于 Android* 应用的绝妙创意,而不知道如何通过可用的编程工具和语言来实现? 本文将为您介绍可用于 Android 开发的主要编程语言. 最常用的编程语言有 Java.C#.C++ 和 HTML5. 每种语言都有自己的发展历史.用途,和利弊.下面我们来一一介绍它们的工作原理.适用框架和 IDE. Java Java 作为互联网应用语言,于 1995 年首次亮相. 不过现在它应用于多个不同的开发领域,包括游戏.导航.企业解决方案和移动行业. Java 是一种经典的 Android

12 种编程语言的起源故事

过去的几十年间,大量的编程语言被发明.被替换.被修改或组合在一起.每种语言总在争论中诞生,又在进化中消亡.而这些语言的的创造者,无一不是编程世界中的标志性人物,高举探索的旗帜不断前行.敬仰之情促使了这篇文章的诞生,这里收集并分享了这五十年来最成功.最流行的十二门编程语言和它们的创造者的故事. 1.Java 的起源 1990 年代初,任职于 Sun 公司的詹姆斯·高斯林等人开始开发 Java 语言的雏形,最初被命名为 Oak,目标设置在家用电器等小型系统的程序语言,应用在电视机.电话.闹钟.烤面包

30 天学习 30 种新技术系列 - SegmentFault【转】

body { font-family: Microsoft YaHei UI,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5; } html, body { } h1 { font-size:1.5em; font-weight:bold; } h2 { font-size:1.4em; font-weight:bo

【新手必看】2015年需要学习的15种编程语言!

如果你是一个程序员,那么你的美好时光来了.根据美国劳动统计局的预测,计算机方面的工作岗位将在接下来的七年时间里增长8%.如果你很擅长于写代码,那么你的薪资可以高达300美元一小时甚至更多. 想要拿到这一领域的高薪,那么你就得掌握最需要的几门编程语言. 下面是老郭--在线学习平台扣丁学堂的总监指出的2015年你需要知道的15种编程语言: 1. Java Java用于构建企业web应用的后端,是当今最为流行的编程语言之一.Web开发人员可以凭借Java和基于Java的框架为各种用户建立可扩展的Web

2015年你需要学习的15种编程语言

如果你是一个程序员,那么你的美好时光来了.根据美国劳动统计局的预测,计算机方面的工作岗位将在接下来的七年时间里增长8%.如果你很擅长于写代码,那么你的薪资可以高达300美元一小时甚至更多. 想要拿到这一领域的高薪,那么你就得掌握最需要的几门编程语言. 下面是Doug Winnie——在线学习平台Lynda的内容总监指出的2015年你需要知道的15种编程语言: 1. Java Java用于构建企业web应用的后端,是当今最为流行的编程语言之一.Web开发人员可以凭借Java和基于Java的框架为各

帮你提升 Python 的 27 种编程语言

以下为正文: 作为全球最流行的编程语言联合设计者之一,我经常看到的一种令人沮丧的行为(在Python社区和其它社区都有),就是那些有影响力的人试图把“缺失”的恐惧感灌输给其它开源社区,将其当作对社区贡献的源动力.(我偶尔会对自己的这种不当行为感到内疚,当别人落入同样的陷阱时我也就更容易察觉到). 虽然借鉴其他编程语言社区的经验是一件好事,但以恐惧为基础的方法来激励行动存在严重的问题,因为它将助涨社区成员为争取贡献者的关注而将其它社区的成员视为敌人,而不是当做潜在的盟友去迎接更大的挑战,共同推动顶

Java等13种编程语言名称的来历

Java的发展历程丰富多彩.充满了传奇色彩,被现在众多程序员和企业广泛使用,不用质疑这是Java的领先技术的结果. Java或者Python等编程语言,你可能每天都在使用,他们是你工作的乐趣来源和实现梦想的工具,但是你知道这些语言的名称来历吗?本文尚学堂小编为大家总结了常13种编程语言的名称来历, 快来看看你的语言名字是怎么来的吧. 可能程序员们都认为编写代码时给变量取名是件烦人的事,不过他们还需要给另外一个东西取名, 那就是新的编程语言.编程语言命名通常有几个规律,如根据特性取缩写(如BASI

哪一种编程语言适合人工智能?

用Python机器学习库,opencv和haarcascading概念来培训.建立了样品POC来检测通过安置在不同地点的无线摄像头传递回来基础情感像幸福,生气,悲伤,厌恶,怀疑, 谷歌的AI击败了一位围棋大师,是一种衡量人工智能突然的快速发展的方式,也揭示了这些技术如何发展而来和将来可以如何发展. 人工智能是一种未来性的技术,目前正在致力于研究自己的一套工具.一系列的进展在过去的几年中发生了:无事故驾驶超过300000英里并在三个州合法行驶迎来了自动驾驶的一个里程碑:IBM Waston击败了J

【转】2015年你需要学习的15种编程语言

如果你是一个程序员,那么你的美好时光来了.根据美国劳动统计局的预测,计算机方面的工作岗位将在接下来的七年时间里增长8%.如果你很擅长于写代码,那么你的薪资可以高达300美元一小时甚至更多. 想要拿到这一领域的高薪,那么你就得掌握最需要的几门编程语言. 下面是Doug Winnie——在线学习平台Lynda的内容总监指出的2015年你需要知道的15种编程语言: 1. Java Java用于构建企业web应用的后端,是当今最为流行的编程语言之一.Web开发人员可以凭借Java和基于Java的框架为各