技术总结:编程语言了解
由于毕业后要找互联网产品类的工作,想想大学没学好一些编程语言还真是一件很后悔的事情。今天花了一下午的时间总结了世界主流的一些计算机语言的简介和功能以及优劣势的对比和分析。仅仅代表个人的理解,大牛无视。
(一)2016年世界编程语言使用率排行榜
先来看看这份数据,这张图表列举了今年各种编程语言的使用率和热度。
问题(一):C、C++、C#、和java的区别
简单地说,它们不是一种语言,语法有差别,编程时具体用到的类库或者函数库也不一样。
虽然它们不是一种语言,不过它们却也有所联系。广泛地说,C可以看作其他三种语言的源语言,因为其他三种语言几乎都是从C而来的,无论从数据类型还是控制语句看,其他三种语言都有从C得来的迹象。
其中C++则一般看作是对C语言的扩展。因为C语言没有面向对象的语法结构,而当时业界又迫切需要面向对象的编程特性,所以贝尔实验室的开发者就为C添加了面向对象的结构。现在C++已经不只是C的扩展了,它已经完全可以被看作一种新的编程语言。虽然C的特性以及库函数仍然被C++支持,不过C++拥有自己的独立的类库体系,功能相当强大。
Java语言是一种完全的面向对象语言,虽然它的底层(运行时库)是用C语言开发的,可是并不依赖于C。因为Java的运行是在运行时库的支持下进行的,所以运行效率比起可以更接近底层的C/C++来说效率会有所影响,不过Java的类库采用很好的设计理念设计,非常好用,也非常实用,已经成为业界的一种标准开发语言。它的跨平台的特性尤其让很多开发者欢迎,你只需要开发一次就能在所有安装了Java运行时库的系统上运行。Java发展了十几年了,可以应用领域非常之广泛,Web开发有JSP,J2EE,桌面领域现在有JavaFX。
C#是微软开发的一种编程语言,语法类似Java,几乎就是从Java的翻版。运行原理和Java也类似,也是通过运行时库的支持运行。不过支持的平台还很有限。JAVA几乎被所有平台支持,而C#目前只被Windows和Linux支持,Windows下的支持当然是由微软自己开发的,而Linux下的支持则有MONO支持。实际上,MONO也是把C#应用转化为JAVA应用而已,所以本质上,C#仍然只是被微软自己的操作系统支持。应用平台受到限制,是它最大的缺点。
C/C++的优点在于与底层比较接近,可以控制的粒度更加精细,是开发系统级应用的最佳选择。关于缺点,我想正是源于其优点,因为它们能控制的编程元素粒度精细,所以编程比较困难,烦琐,容易出错。
Java和C#都比较高级,可以看作高级语言的高级语言,优点是开发容易,但运行效率不如更为底层的C/C++。
具体选择使用的时候,可以根据实际的项目需要选择。运行效率要求高的,底层控制要求高的用C/C++,否则可以选择Java或C#;跨平台的要求高的可以用Java。
关于跨平台,C/C++也是很好的语言,因为所有平台都支持,不同的是,不同平台支持的实现不同,类库不同,要编写跨平台的程序,需要选择跨平台的类库,如标准类库,如果标准类库的支持不够也只需要附加编写一个跨平台的支持类库。1,java是在C++上的蓝本上实现上,去除了C++的指针都内容,将很多的东西搬到了类库中,首次实现了虚拟机概念——因此跨平台特性十分强。而C#则借鉴了java的优点,也实现了虚拟机与类库。同样没了指针——官方虽然也说在C++基础之上,但借鉴不少java的东西。
2,java实现了开源,有诸多开源项目可以使用,而C#近年来虽有不少优秀的开源项目,但相比java还是差的太多。
3,在api方面,C#对windows有原生的支持,相对来说较为好一些。注释方面也强,同时在IDE的智能感知方面也较java强,也正是这种特点导致C#的元数据非常大,打包后文件过大,性能上也因为元数据大量存在而导致有所下降。同时对于编译器来说,java有林林总总的不同厂家编译器,而,.net却只是windows一家独大。所以从编角度上来看,.net更易于统一,而java则有更多的选择。
4,在组件方面,目前来说.net稍优,它是基于COM+形成,三者之间是相互供鉴,目前来说.net还是稍占优劣。
5,难度方面,.net主要是力求程序员的简单,类库较为完整,主要是程序员对.net类库的熟悉。而java类库并不十分完整,但是开源极多,构件极多,比如ejb,j2ee等等,主要集中在构件的学习与开源项目的寻找上。
几种语言内容都很多,在这里就不详细列举了,要学好每一种都需要花费相当大的精力,祝你能有所成就!
这里补充位置五这种语言:Python、Php、Ruby、JavaScript、Perl.
Python:Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中[2]有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。
优点:简单,易学,速度快,免费、开源,高层语言,可移植性,解释性,面向对象,可扩展性,可嵌入性,丰富的库。
缺点:单行语句和命令行输出问题,独特的语法,运行速度慢。
应用:系统编程,图形处理,数学处理,文本处理,数据库编程,网络编程,多媒体应用……
Perl:Perl借取了C、sed、awk、shell脚本语言以及很多其他程序语言的特性,其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。简而言之,Perl像C一样强大,像awk、sed等脚本描述语言一样方便,被Perl语言爱好者称之为“一种拥有各种语言功能的梦幻脚本语言”、“Unix中的王牌工具”。
Perl的强大之处是CPAN档案库提供的各种模块,你想实现什么功能,原则上你可以在档案库里搜索需要的模块。
缺点
编辑
也正是因为Perl的灵活性和“过度”的冗余语法,也因此获得了write-only的“美誉”,因为许多Perl程序的代码令人难以阅读,实现相同功能的程序代码长度可以相差十倍百倍。但Perl同样可以将代码书写得像Python或Ruby等语言一样优雅。
很多时候,perl.exe进程会占用很多的内存空间,虽然只是一时,但是感觉不好。
王牌语言的局限性:也许你以前并不知道,Perl是另外一种极其流行的开源解释性编程语言。如果你曾经尝试过用Perl语言编写一个大程序,你一定会自己回答这个问题。在规模较小的时候,Perl程序是简单的。它可以胜任于小型的应用程序和脚本,“使工作完成”。然而,当你想开始写一些大一点的程序的时候,Perl程序就变得不实用了。我是通过为Yahoo编写大型Perl程序的经验得出这样的总结的!与Perl相比,Python程序一定会更简单、更清晰、更易于编写,从而也更加易懂、易维护。我确实也很喜欢Perl,用它来做一些日常的各种事情。不过当我要写一个程序的时候,我总是想到使用Python,这对我来说已经成了十分自然的事。Perl已经经历了多次大的修正和改变,遗憾的是,即将发布的Perl 6似乎仍然没有在这个方面做什么改进。我感到Perl唯一也是十分重要的优势是它庞大的CPAN库——综合Perl存档网络。就如同这个名字所指的意思一样,这是一个巨大的Perl模块集,它大得让人难以置信——你几乎用这些模块在计算机上做任何事情。Perl的模块比Python多的原因之一是Perl拥有更加悠久的历史。或许我会在comp.lang.python上建议把Perl模块移植到Python上的计划。另外,新的Parrot虚拟机按设计可以运行完全重新设计的Perl 6也可以运行Python和其他解释性语言如Ruby、PHP和Tcl等等。这意味着你将来或许可以在Python上使用所有Perl的模块。这将成为两全其美的事——强大的CPAN库与强大的Python语言结合在一起。我们将拭目以待。
Php:PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。(PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。这些工具程序用来显示Rasmus Lerdorf的个人履历,以及统计网页流量。后来又用C语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为PHP/FI。PHP/FI可以和数据库连接,产生简单的动态网页程序。)
PHP能做什么:通过PHP,您可以不受限于只输出HTML。您还能够输出图像、PDF文件、甚至Flash影片。您也可以输出任何文本,比如XHTML和XML。
PHP能够生成动态页面内容
PHP能够创建、打开、读取、写入、删除以及关闭服务器上的文件
PHP能够接收表单数据
PHP能够发送并取回cookies
PHP能够添加、删除、修改数据库中的数据
PHP能够限制用户访问网站中的某些页面
PHP能够对数据进行加密
为什么使用PHP:
PHP运行于各种平台(Windows,
Linux, Unix, Mac OS X等等)
PHP兼容几乎所有服务器(Apache,
IIS等等)
PHP支持多种数据库
PHP是免费的。
PHP易于学习,并可高效地运行在服务器端
Ruby:Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于Perl、Smalltalk、Eiffel、Ada以及Lisp语言。由Ruby语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的Ruby语言替代品。Ruby的作者于1993年2月24日开始编写Ruby,直至1995年12月才正式公开发布于fj(新闻组)。因为Perl发音与6月诞生石pearl(珍珠)相同,因此Ruby以7月诞生石ruby(红宝石)命名。
优点:语法简单
普通的面向对象功能(类,方法调用等)
特殊的面向对象功能(Mixin,特殊方法等)
操作符重载
错误处理功能
迭代器和闭包
垃圾回收
动态载入(取决于系统架构)
可移植性高.不仅可以运行在多数UNIX上,还可以运行在DOS,Windows,Mac,BeOS等平台上
适合于快速开发,一般开发效率是JAVA的5倍
语言用途
编辑
·Ruby是开源的,在Web上免费提供,但需要一个许可证。[3]
·Ruby是一种通用的、解释的编程语言。
·Ruby是一种真正的面向对象编程语言。
·Ruby是一种类似于Python和Perl的服务器端脚本语言。
·Ruby可以用来编写通用网关接口(CGI)脚本。
·Ruby可以被嵌入到超文本标记语言(HTML)。
·Ruby语法简单,这使得新的开发人员能够快速轻松地学习Ruby。
·Ruby与C++和Perl等许多编程语言有着类似的语法。
·Ruby可扩展性强,用Ruby编写的大程序易于维护。
·Ruby可用于开发的Internet和Intranet应用程序。
·Ruby可以安装在Windows和POSIX环境中。
·Ruby支持许多GUI工具,比如Tcl/Tk、GTK和OpenGL。
·Ruby可以很容易地连接到DB2、MySQL、Oracle和Sybase。
·Ruby有丰富的内置函数,可以直接在Ruby脚本中使用。[3]
JavaScript:JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
问题(二):算法和数据结构
首先,数据结构是一门计算机语言学的基础学科,它不属于任何一门语言,其体现的是几乎所有标准语言的算法的思想。
上面的概念有一些模糊,我们现在来具体说一说,相信你们的数据结构使用的是一门具体的语言比如C/C++语言来说明,那是为了辅助的学习数据结构,而数据结构本身不属于任何语言(相信你把书上的程序敲到电脑里面是不能通过的吧,其只是描述了过程,要调试程序,还需要修改和增加一些东西)。你们的书上开始应该在讲究数据的物理存储结构/逻辑存储结构等概念,说明数据结构首先就是“数据的结构”,在内存上的存储方式,就是物理的存储结构,在程序使用人员的思想上它是逻辑的,比如:
你们在C/C++中学习到链表,那么链表是什么一个概念,你们使用指针制向下一个结点的首地址,让他们串联起来,形成一个接一个的结点,就像显示生活中的火车一样。而这只是对于程序员的概念,但是在内存中存储的方式是怎样的那?对于你程序员来说这是“透明”的,其内部分配空间在那里,都是随机的,而内存中也没有一个又一根的线将他们串联起来,所以,这是一个物理与逻辑的概念,对于我们程序员只需要知道这些就可以了,而我们主要要研究的是“逻辑结构”。
我可以给你一个我自己总结的一个概念:所有的算法必须基于数据结构生存。也就是说,我们对于任何算法的编写,必须依赖一个已经存在的数据结构来对它进行操作,数据结构成为算法的操作对象,这也是为什么算法和数据结构两门分类不分家的概念,算法在没有数据结构的情况下,没有任何存在的意义;而数据结构没有算法就等于是一个尸体而没有灵魂。估计这个对于算法的初学者可能有点晕,我们在具体的说一些东西吧:
我们在数据结构中最简单的是什么:我个人把书籍中线性表更加细化一层(这里是为了便于理解在这样说的):单个元素,比如:int i;这个i就是一个数据结构,它是一个什么样的数据结构,就是一个类型为int的变量,我们可以对它进行加法/减法/乘法/除法/自加等等一系列操作,当然对于单个元素我们对它的数据结构和算法的研究没有什么意义,因为它本来就是原子的,某些具体运算上可能算法存在比较小的差异;而提升一个层次:就是我们的线性表(一般包含有:顺序表/链表)那么我们研究这样两种数据结构主要就是要研究它的什么东西那?一般我们主要研究他们以结构为单位(就是结点)的增加/删除/修改/检索(查询)四个操作(为什么有这样的操作,我在下面说到),我们一般把“增加/删除/修改”都把它称为更新,对于一个结点,若要进行更新一类的操作比如:删除,对于顺序表来说是使用下标访问方式,那么我们在删除了一个元素后需要将这个元素后的所有元素后的所有元素全部向前移动,这个时间是对于越长的顺序表,时间越长的,而对于链表,没有顺序的概念,其删除元素只需要将前一个结点的指针指向被删除点的下一个结点,将空间使用free()函数进行释放,还原给操作系统。当执行检索操作的时候,由于顺序表直接使用下标进行随机访问,而链表需要从头开始访问一一匹配才可以得到使用的元素,这个时间也是和链表的结点个数成正比的。所以我们每一种数据结构对于不同的算法会产生不同的效果,各自没有绝对的好,也没有绝对的不好,他们都有自己的应用价值和方式;这样我们就可以在实际的项目开发中,对于内部的算法时间和空间以及项目所能提供的硬件能力进行综合评估,以让自己的算法能够更加好。
(在这里只提到了基于数据结构的一个方面就是:速度,其实算法的要素还应该包括:稳定性、健壮性、正确性、有穷性、可理解性、有输入和输出等等)
为什么要以结点方式进行这些乱七八糟的操作那?首先明确一个概念就是:对于过程化程序设计语言所提供的都是一些基础第一信息,比如一些关键字/保留字/运算符/分界符。而我们需要用程序解决现实生活中的问题,比如我们要程序记录某公司人员的情况变化,那么人员这个数据类型,在程序设计语言中是没有的,那么我们需要对人员的内部信息定义(不可能完全,只是我们需要那些就定义那些),比如:年龄/性别/姓名/出生日期/民族/工作单位/职称/职务/工资状态等,那么就可以用一些C/C++语言描述了,如年龄我们就可以进行如下定义:
int age;/*age变量,表示人员公司人员的年龄*/
同理进行其他的定义,我们用结构体或类把他们封装成自定义数据类型或类的形式,这样用他们定义的就是一个人的对象的了,它内部包含了很多的模板数据了。
我就我个人的经历估计的代码量应该10000以内的(我个人的经理:只是建议,从你的第一行代码开始算,不论程序正确与否,不论那一门语言,作为一个标准程序员需要十万行的代码的功底(这个是我在大学二年级感觉有一定时候的大致数据,不一定适合其他人),而十万行代码功底一般需要四门基础远支撑,若老师没有教,可以自学一些语言)。
最后两个跟苹果有关的语言:objective-c 和swift
objective-c :Objective-C是非常实用的语言。它是一个用C写成很小的运行库,令应用程序的尺寸增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。Objective-C写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。因此,Objective-C它完全兼容标准C语言(C++对C语言的兼容仅在于大部分语法上,而在ABI(Application Binary Interface)上,还需要使用extern "C"这种显式声明来与C函数进行兼容),而在此基础上增加了面向对象编程语言的特性以及Smalltalk消息机制。
评价:很强大的编程语言有点类似于C++ ,但是也有java 的影子,。它的热度完全是由基于Objective-C编写的热门iOS应用带起来。当初也是乔老爷子一眼相中了OC,才有了OC的今天。
swift:C 语言是一款经典的高级程序语言。它的升级版,Objective-C,是苹果多年来的选择。人们用Objective-C 开发应用已经30 多年,而C 语言的寿命更久,已经差不多40 岁了,也是该是更新的时候了。
在这些程序语言之中,有一类叫做“脚本语言”,例如 Python,编写和测试的过程相对容易,但功能并不是特别强大,实际作用并不理想。假如你要编写一个游戏,需要完全利用设备的性能,那么它就不是最佳选择。使用传统的程序语言,例如 Objective-C,可以更好利用设备的性能,并且开发出更加复杂的应用。但传统语言比较难掌握,编译和测试过程也更麻烦。
Swift 借鉴了各种语言的长处,并改进了它们的缺点。Swift 使用现有的Cocoa 和Cocoa Touch 框架,可与Objective-C 兼容,开发过程中可以随时切换。Swift 具有更快、更安全、交互性更强等特点,将为开发者带来全新体验。
苹果表示,至少从几个关键指标来看,Swift程序的执行速度比Python和Objective-C程序更快。并且,Swift 支持Xcode 开发环境,可以像脚本语言一样,具有实时预览功能。开发者在输入代码后,右边屏幕会实时显示代码效果。此外,开发者还可以看到应用程序运行过程中的代码效果,从而使测试过程更加方便。
问题(三):一些大型网络游戏和网页游戏,一个PC软件和Android 和 ios 上的应用都是用什么语言开发的。
先说PC端的软件一般所用的语言:PC端:Windows一般用c/c++/c#/java……
mac用oc/c/c++,swift,;linux用c/c++/java……
手机:Android用Java,iOS用oc/c++,swift,WP用c#/c++/c。
问题(四):大型的网络游戏和网页游戏一般用什么编程语言
斑点狗个人觉得,还是自己去百度问吧,知识很重要,但是获取知识的动力能力才是最重要的,这个世界是平的,信息壁垒已经很少,………………。
问题(三):很多计算机语言都是图灵完备语言,为什么市场上还有这么多变成语言的?
回答:图灵完备只保证计算的可行性,不保证计算的效率,也不保证代码的可理解性和可维护性。各个领域有不同的需求,如科学计算中需要有浮点数计算、并行计算的能力;商业应用中需要有可持续化、数据分析的能力;系统编程中需要对底层的资源进行控制、甚至有实时的要求。这些需求之间是存在冲突的,需要语言的设计者来进行取舍。虽然有的语言在设计之初就注重了通用性,但也有的语言在设计和实现的时候会针对某一领域进行优化的设计,如Matlab, R, SQL等等。而有针对性的优化就能有效的降低解决问题的复杂度(编程复杂度、计算复杂度,等等)。新生领域的不断涌现导致的新的需求,也诱导了新语言的诞生。
即使是通用语言,也存在性能和开发成本的取舍,如C/C++这样的编译型保证了性能,但需要更高的开发成本;Python一类的脚本语言虽然降低了开发成本,但需要在性能上作出牺牲。具体的选择需要看实际的需求。
还有的就是历史原因了,像在前端里面能用的基本上也只有Javascript了。
总结:2016-4-11 22:59:37,又坐在电脑前忘记了跑步,不能这样,要运动。做一个会写代码的文艺青年!!!!
最后讲一个笑话:你们知道祈求代码不出bug该拜哪个神仙?我:有人说拜雍正:因为雍正专治“八阿哥(bug)” 哈哈
���Z�V
原文链接:http://www.jianshu.com/p/8e88f6d62109
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
- 本文固定链接: https://zxbcw.cn/post/5008/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)