sctarena
30种编程语言的比较选择问题
本文涉及到的编程语言: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
来代替(不过估计大型公司不会冒这个险) 。还是在理论上,你也可以用函数式编程的
Clojure 和 Haskell 来做(估计没人会那么傻) 。还是在理论上,也可以用 Ada 这种强悍
的通用语言,但估计没人愿意接收比 C++还复杂的编程语言。理论上(基本只能在理论上) , 不嫌弃的话 smalltalk 也行。还是在理论上,python、ruby 等配合一定的图形界面库也可 以胜任(但项目大到一定的程度是,你会欲哭无泪) 。 但是,我另起一行。有个语言:D 语言。我个人不认为不可以列入首选名单。但是貌似知 名度不行啊。。 企业支持少啊。。。 。。 。。 确实是门优秀的语言。 C++太尾大不掉, 需要一种语言, 让 C++成为纯粹的 C++。 稍小一点规模的,无法接受面向对象的程序员,有不少
用 C 的。虽然 OOP 程序员看他们像是 不开化的人,但是他们有他们的哲学(我从嵌入式开发过来,相当长时间内也摆脱不了 C, 总本能的排斥 OOP)
解决问题 case:程序规模不是很大的偏数学问题
曾经很多人用 Pascal(包括扩展的 Delphi) ,曾经很多人用 Fortran,但是都明显在退步。
1
sctarena
大型通用语言(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:系统管理
2
sctarena
这个系统管理,一般指 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 加速,是一种很有趣的实践。
特殊应用:人工智能
人工智能上,prolog 和 lisp 是宠儿。
R 语言有时也被用于数据挖掘(但是太慢了)
成都达内 成都 c++培训 成都 c++软件培训 成都 c++ 成都 php 成都 android 成都安卓 成都 java 成都达内科技 达内 php 培训 成都 android 培训学 校 成都 c++培训 成都 java 学习 成都 php 学习 成都达内怎么样 sctarena 达内 成都 java 培训 成都 android 培训 成都 c++培训 成 都 php 培训 成都达内怎么样 达内科技
3
上一篇:
30条编程名言佳句这不是Bug只是未知的特性_Ruby代码
下一篇:
软件工程网上辅助教学系统(毕业设计论文)