本文涉及到的编程语言: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,但是都明显在退步。大型通用语言(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加速,是一种很有趣的实践。
•特殊应用:人工智能
人工智能上,prolog和lisp是宠儿。
R语言有时也被用于数据挖掘(但是太慢了)
http://www.thebigdata.cn/SheQuDongTai/12808.html
http://doc.studyget.com/showdoc-19317.html
Basic
BASIC(Beginners' All-purpose Symbolic Instruction Code,又译培基),意思就是“初学者的全方位符式指令代码”,是一种设计给初学者使用的程序设计语言。BASIC是一种直译式的编程语言,在完成编写后不须经由编译及连结等手续即可执行,但如果需要单独执行时仍然需要将其建立成执行档。
Pascal
Pascal是一种计算机通用的高级程序设计语言。Pascal的取名是为了纪念十七世纪法国著名哲学家和数学家Blaise Pascal。它由瑞士Niklaus Wirth教授于六十年代末设计并创立。Pascal语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言。
C语言
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。
C++
C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
Csharp
Csharp(音标 [∫a:p])(又被简称为"C#")是微软公司在2000年6月发布的一种新的编程语言,并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、界面、与Java几乎同样的语法,和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角。 在本文中,我将考察创建一种新计算机语言的一般动机,并将特别指明是什么原因导致了C#的出现,然后我将介绍C#和它与Java、C、C++的相似之处。其次我将讨论一些存在于Java和C#之间的高层次的、和基础的差别。我将以衡量在用多种语言开发大型应用程序的时候所需的知识(或者对这种知识的缺乏程度)来结束本文,而这正是.NET和C#的一个主要战略.以及Windows 2000的一个"d预览版本",还有MSDN上迅速增多的文档集子的形式获得(还没有最终定型)。
JAVA
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
AAuto
AAuto是专用于桌面软件快速开发的新一代混合型编程语言 - 具有动态语言轻便、灵活、快速开发的特性,而且又可以同时支持静态类型开发,象静态语言那样使用。AAuto可以直接支持原生DLL,即使是外部EXE进程中的函数,也可以使用一句代码声明为普通的AAuto函数对象(原生call支持),AAuto支持非常多的标准调用约定,例如 stdcall,cdecl,thiscall,fastcall,regparm(n) 等调用约定都可以支持。AAuto虽然小,但支持的接口很丰富、可以支持com静态动态双接口,象VBS一样原生支持com对象。
这种全新的混合编程语言开创了一种全新的编程方式,也因为这种语言特性,AAuto可以非常方便的嵌入各种第三方语言,目前AAuto可以嵌入汇编机器码,C语言,Java,PHP,C#,Python,Javascript,VBScript......等等数量众多的第三方编程语言,方便的互调函数,并且这些调用第三方语言的功能模块都是使用AAuto实现( 开放源码 )。混合型语言让我们可以体验到激动人心的全新编程方式。
AAuto可以将硬盘目录,硬盘文件一键嵌入EXE文件,将全部程序包含所有资源生成独立的绿色EXE文件,所有文件读写的相关函数自动支持,无需更改代码,AAuto制作的程序不需要安装程序,也不需要释放DLL运行库,AAuto制作的程序都是免安装绿色软件。
AAuto属于类C系语言、并且可以自定义一套自己的语法。AAuto在语法风格接近流行类C系语言。有其他语言基础的可以轻松上手,学习AAuto以后学习其他编程语言更可事半功倍。
AAuto支持多线程开发,复杂的多线程开发在AAuto中变得非常简单,标准库也提供大量简化多线程开发的辅助支持库,为多线程软件开发带来很大的方便(请参考快手范例 -> 多线程 )。
AAuto的标准库基本使用纯AAuto源码实现,并且全部开源,标准库提供了大量的简化编程的常用函数,涉及到软件开发的方方面面,极大的简化了桌面软件开发过程。
AAuto提供web.form支持库( 开源 ),可以创建web窗体加载网页创建web风格的软件界面,网页与本机代码可以直接交互,在快手工程向导里,就提供了 WEB UI 的模板。在使用web窗体时,你能感受到AAuto这种混合语言带来的巨大方便,较之传统编程语言,AAuto 可以更快更加方便的创建 WEB UI 程序,在AAuto自带的范例中,就有一个多窗口浏览器的范例,仅仅使用了一页300行源码就实现了一个功能较完整的多窗口网页浏览器,可以看出使用AAuto极大的简化了Web相关开发技术。 另外,AAuto提供了web.layout支持库,封装了轻量快速的界面引擎HTMLayout,可以使用传统的HTML,CSS技术,更加方便的实现漂亮的界面,而且运行,响应速度极快,官方也提供了大量HTMLayout的范例,教程。 使用AAuto开发传统界面也非常的方便,AAuto提供可视化开发工具,可以象VB一样(实际上比VB更简单)的通过拖拉控件创建程序。
易语言
易语言是一门计算机程序语言。以“易”著称,以中文作为程序代码表达的语言形式。易语言的创始人是吴涛。早期版本的名字为E语言。易语言最早的版本的发布可追溯至2000年9月11日。可以说,创造易语言的初衷是进行用中文来编写程序的实践。从2000年至今,易语言已经发展到一定的规模:功能上、用户数量上都十分可观。
创建者:大连吴涛易语言(吴涛)
易语言简称:e、VE、E语言
最新版本:易语言5.2 (20140825) (支持静态编译)
特色:
1.以简体中文作为程序代码进行编程操作。
2.全中文支持,无需跨越英语门槛。
3.全可视化编程,支持所见即所得程序界面设计和程序流程编码。
4.中文语句快速录入。提供多种内嵌专用输入法,彻底解决中文语句输入速度慢的问题。
5.代码即文档。自动规范强制代码格式转换,任何人编写的任何程序源代码格式均统一。
6.加入了png支持,所涉及到组件: 标签, 按钮, 选择框, 图片框, 图形按钮, 画板, 窗体, 表格。
SQL
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的结构化查询语言语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使他具有极大的灵活性和强大的功能。
SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言,得到了广泛的应用。如今无论是像Oracle,Sybase,Informix,SQL server这些大型的数据库管理系统,还是像Visual Foxpro,PowerBuilder这些微机上常用的数据库开发系统,都支持SQL语言作为查询语言。
O语言
O语言是一款中文计算机语言(或称套装:O汇编语言、O中间语言、O高级语言)[7]
AWK
二十世纪70年代Bells Labs创立了Awk语言,它是一种用于处理大数据量强大的命令行语言。
BASH
Bash(Bourne-Again Shell)是一种专门为GNU操作系统服务的命令行语言。
Common Lisp
Common Lisp,即为大家所熟知的CL,一种遵循ANSI-standard规范高效运行的编程语言.使用Common Lisp最好的地方是用户可以根据应用领域选择合适方法和范例。
Eiffel
Eiffel是一种面向对象的语言。它演变自1985年,是世界上众多最成熟的编程语言中的一种.在解决计算问题中,Eiffel代码是可读的和可重用的。
Emacs Lisp
一种计算机编程语言的变体,Emacs Lisp可以被任何其他的编程语言所使用。
Erlang
Erlang是另外一种编程语言,通常分布在网络环境中,被用于构建强大的系统程序,Erlang和Java类似。
Forth
Forth是一种基于堆栈概念的高层次编程语言.它不依赖于变量的使用。这种语言帮助解决了一些编程中的老问题。
Icon
Icon是另外一种具有处理数据结构和字符串特征的高层次编程语言。Icon的运行速度比C语言还要快。它在程序员尝试新想法,快速编程,文本处理,图像编程,处理大的数据类型方面很有作用。
Lisp
在处理大数据量演算,解决方案,动态变化的问题,以及多种混杂数据的问题上,Lisp是一种理想的编程语言。它适合定位最具有挑战性的问题。
Lua
Lua是一种强大快速的脚本语言。
Mercury
它是一种将逻辑编程方式和功能编程方式联合在一起的编程语言。Mercury在复杂的,严格类型风格的系统上运行。
PHP
PHP是一种广泛使用的编程语言.因为它所编写的代码量小,越来越多的公司转向PHP编程。
Perl
由Larry Wall设计,Perl是最为广泛使用的编程语言中的一种,Perl第一次被应用在文本编辑器上使用了。
Pike
Pike和C语言以及Java类似。它是一种易学的语言,因为它不牵涉复杂的函数功能。
Python
Python是一种面向对象、直译式计算机程序设计语言。