计算机编程语言分类及各自用武之地 最近,见大家都在看C++,却很少人知道C++能干吗,觉得学了没意思,因为只是看些语法知识自然没意思,如果做出东西来,看着自己的成果,想必也会提高自己兴趣的。 针对学习编程语言的迷茫,从而引出一个问题,各种编程语言都是干什么用的?学了基本的语法,程序的流程,面向对象的思想,能干点啥? 对于ICT行业的的大学生来说,能够详细的区别编程语言的用途及使用方法,对以后的选择性学习以及就业方向来说是非常必要的。就此,本人就几种常用语言的简单分析一下。 先说一下计算机语言的分类(大家都知道,一笔带过): 1、机器语言。 2、汇编语言。 3、高级语言。 前两天看台湾蔡学镛先生著的《Java程序员的心声:爪哇夜未眠》,他把程序语言大致分为五类,还是不错的: 1、web page script languages 用来做网页的语言,就是网页代码,比如html、javascript、css、asp、php、xml都应该属于此类,但html算不上编程语言。Javascript和Java没有半毛钱关系,是两门单独的语言,在Web2.0时代,打造富客户端的绚丽效果,Javascript语言还是很值得学习的,新出的HTML5其实就是Javascript。我比较看好Javascript,应该算是值得学习的一门语言。 2、interpreted languages(解释型语言) 包括perl、python、rebol、ruby等,也常被称作script语言,通常被用于和底下的操作系统沟通。照蔡学镛先生的意思,每个人至少应该学会一套这类的语言。这类语言的缺点是效率差、源代码外露——所以不适合用来开发软件产品,一般用于网页服务器。google公司用的比较多的是C++、Java和python。有时间我也要学学python或者ruby。 3、hybrid laguages(混合型语言) 代表是java和c#。介于解释型和编译型之间。蔡认为c#是.net平台上最重要的语言,值得期待其后续发展;至于java,蔡叫你们看他的《sleepless in java》——我晕! 4、compiling languages(编译型语言) c/c++,Delphi都是编译型语言。C++变得越来越庞大,大多数的C++程序员只用到(也只懂)C++功能的一小部分。C++很复杂,要成为C++高手没三五年是不行的(就凭这句话,我决定向java投降),尽管如此,但真正要成为高手的都应该懂C/C++,重要的API一般都有C++的版本,可见C++的重要性,怪不得大家说C++是真正程序员的语言。 5、assembly languages(汇编语言) 汇编语言是最接近于硬件的语言,不过用的很少。 程序语言学习顺序建议 如果完全没有程序经验,可照这个顺序:javascript——解释型语言——混合型语言——编译型语言——汇编(如果需要的话)。 用业界流行一句话做程序语言分类的结尾“真正的程序员用c++,聪明的程序员用delphi”,那么,什么样的程序员用java呢? 以下是Tiobe公布的最新的2011年9月编程语言排行榜TOP20: 现在来按顺序大致看一下各种语言的用武之地(我也好多不懂,有些是自己网上找的,大家将就看一下): 1、Java: Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java最初是由James Gosling在Sun Microsystems(现在是Oracle旗下的子公司)开发的一种编程语言,并作为Sun Microsystems的Java平台的核心组件于1995年发布。 这种语言的大部分语法源自于C和C++,但是它具有简单的对象模型和更少的底层服务。Java源代码经过编译之后生成类文件,这样可以使它运行在任何一个Java虚拟机上,而无需考虑计算机的架构。Java 平台有三个版本,这使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发: Java SE(Java Platform,Standard Edition)。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。 Java EE(Java Platform,Enterprise Edition)。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。 一些电子商务网站就是基于此平台。 Java ME(Java Platform,Micro Edition)。这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。现在很火的Android开发,你懂的。 一入豪门深似海,偶现在就走上了Java EE这条不归路。2、C: C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。 C语言是由UNIX的研制者丹尼斯·里奇(Dennis Ritchie)和肯·汤普逊(Ken Thompson)于1970年研制出的B语言的基础上发展和完善起来的。目前,C语言编译器普遍存在于各种不同的操作系统中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C语言的设计影响了许多后来的编程语言,例如C++、Objective-C、Java、C#等。 前段时间在老板公司实习,一个项目经理就是用C语言的高手,他以前在UT斯达康开发GSM核心网的。 3、C++ C++最初发布于1980年代中期,当时面向对象语言被认为是解决软件复杂性问题的银弹。C++的面向对象特性看相去使其全面超越了C,支持者认为C++将迅速把上一代语言挤到陈列馆里去。 但是历史并非如此。究其原因,至少有一部分归咎于C++本身。为了与C兼容,C++被迫作出了很多重大的设计妥协,结果导致语言过分华丽,过分复杂。为了与C兼容,C++并没有采用自动内存管理的策略,从而丧失了修正C最严重问题的机会。 另外一部分原因,恐怕要算到面向对象身上。看起来OO并没有很好的达成人们当年的预期。我就这个问题调研过,我发现使用OO方法导致组件之间出现很 厚的粘合层,并且带来了严重的可维护性问题。今天让我们来看看开放源码社区,你会发现C++的应用还是集中在GUI,游戏和多媒体工具包这些方面,在其他 地方很少用到。要知道,面向对象也只是在这些领域被证明非常成功,而开放源码社区的选择,很大程度上体现了程序员的自由意志,而不是公司管理层的胡乱指挥。 也许C++实现OO的方法有问题。有证据表明C++程序在整个生命周期的开销高于相应的C, Fortran和Ada程序。不过,究竟这是否应该归咎与C++的OO实现上,还不清楚。 最近几年,C++加入了很多非OO的思想,其异常思想类似Lisp,STL的出现是非常了不起的。 其实C++最根本的问题在于,它基本上只不过是另一种传统的语言。STL中的内存管理比先前的new/delete和C的方案要好的多,但是还是没有解决问题。对于很多应用程序而言,其OO特性并不明显,相比与C,除了增加复杂度之外没有获得很多好处。 总结:C++优点在于作为编译型语言,把效率与泛型和面向对象特性结合起来,其缺点在于过于华丽复杂,倾向于鼓励程过分复杂的设计。 C++是最流行的编程语言之一,它的应用领域涵盖了系统软件、应用软件、驱动程序、嵌入式软件、高性能的服务器与客户端应用程序和诸如电视游戏等娱乐软件。 C++常用于操作系统和驱动级别软件开发,图像处理,3D游戏开发等;C++主要应用于开发性能要求较高的系统级软件,如操作系统、编译器以及游戏软件,如暗黑系列等等。 前段时间研究的NS,无线网络仿真,里面一些链路层、路由层协议的实现也大都用的是C++,看来还是躲不过啊。 4、C# C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#由C语言和C++派生而来,继承了其强大的性能,同时又以.NET 框架类库作为基础,拥有类似Visual Basic的快速开发能力。 C#可以大范围的适用于高层商业应用和底层系统的开发,即使是通过简单的C#构造也可以各种组件方便的转变为基于WEB的应用,并且能够通过Internet被各种系统或是其他开发语言所开发的应用调用。 C#也可以为C/C++开发人员提供快速的开发手段而不需要牺牲任何C/C++语言的特点/优点。从继承角度来看,C#在更高层次上重新实现了C/C++,熟悉C/C++开发的人员可以很快的转变为C#开发人员。 5、 PHP PHP是基于预处理 HTML 页面模型的一种脚本语言。它大量地借用C和Perl语言的语法, 并结合PHP自己的特性,使Web开发者能够快速地写出动态产生页面。可以用于管理动态内容、支持数据库、处理会话跟踪,甚至构建整个电子商务站点。它支持许多流行的数据库,包括 MySQL、PostgreSQL、Oracle、Sybase、Informix 和 Microsoft SQL Server。PHP本身就是为处理超文件html设计的,正是由于它是专为基于 Web 的问题而设计的,而且它是开源的导致可扩展性大大增强 ,所以运用非常广泛。 相信大家很多人都听说过LAMP。Linux+Apache+Mysql+Perl/PHP/Python,一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。 6、 Objective-C Objective-C是苹果Mac OS X 上开发的首选语言,主要是因为Mac OS X 技术源自NextStep OpenStep操作系统, 因为OPENSTEP的软件架构(framework) 都是用Objetive-C 写成,所以Mac OS X上的开发最佳语言自然也就是Objective-C 了。 Objective-C是ANSI C的超集,扩展了C语言使它具备面向对象设计的能力,如类,消息和继承。Objective-C 程序中可以利用现有的C语言代码,使其利用现有的软件架构。这也是为甚莫Objective-C 过去多年间能够成为一种流行的用户界面开发语言而且至今没有消亡,因为一方面用它可以实现底层系统编程,另一方面可以支持利用动态架构进行开发。 前段时间在公司实习,有一研二的学长就精通此语言,独自一人负责iphone终端上的应用程序开发,颇得老板赏识。 7、VB VB是快速的界面生成语言,是快速的数据库程序开发语言。vba是vb的应用版,嵌入在MS office中。编写MS office上的程序很好用。缺点是只能在Windows平台运作。 8、 Python Python是一种脚本语言,可以与C紧密整合。它可以与动态加载的C库模块交换数据,也可以作为内嵌脚本语言而从C中调用。其语法类似C和模块化语言的杂合,不过有一个独一无二的特征,就是以缩进来确定语句块。 Python语言非常干净,设计优雅,具有出色的模块化特性。它提供了面向对象能力,但不强迫用户进行面向对象设计。其类型系统提供了强大的表达能力,类似Perl,具有匿名lambda表达式,这点又让Lisp黑客们感到亲切。Python依靠Tk提供方便的GUI界面开发能力。 在所有的解释型语言里,Python和Java最适合多名程序员以渐进方式协同开发大型项目。在很多方面,Python比Java要简单,它非常适合与构造快速原型,这一点使得它对于Java有独特优势:对于那些既不很复杂,又不要求高效率的程序,Python十分合适。 Python的速度没法跟C/C++相比,不过在今天的高速CPU上,合理地使用混合语言编程策略使得Python的上述弱点被有效地弥补。事实上,Python几乎被认为是主流脚本语言中最慢的一个,因为它提供了动态多态性。在大量使用正则表达式的小型项目,它逊于Perl。对于微型项目而言, shell和Tcl可能更好,Python显得太过强大了。 总结:Python最出色的地方在于,它鼓励清晰易读的代码,特别适合以渐进开发的方式构造大项目。其缺陷在于效率不高,太慢,不但跟编译语言相比慢,就是跟其他脚本语言相比也显得慢。 9、Perl Perl是原本为文本处理而开发的通用型编程语言,但是自2010年开始,它便广泛的应用于包括系统管理、网站开发、网络编程、游戏、生物信息学和 GUI开发等领域。 10、Javascript Javascript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言,广泛应用于客户端web开发的脚本语言,常用来给HTML网页添加动态功能。 此前我在公司实习就主要弄这。有兴趣的可以百度下Ajax,Javascript,Jquery,Json,node.js 11、Ruby Ruby是一种动态、反射、通用、面向对象的编程语言,结合了来源于Perl的语法。Ruby在90年代中期起源于日本,最初由松本行弘“Matz”设计并开发。 12、 Delphi 此处省略500字。 13、 Lua 百度一下“愤怒的小鸟”用什么语言开发的你就知道了。我的好友刘世洋童鞋研究过,大家可以向他请教。要此人QQ者,可以联系我或直接联系其本人,不过此人已心有所属。
|
|