计算机语言之战

时间:2022-07-21 01:33:36

| 来源:码农翻身 微信公众号(id:coderising)。 作者:刘欣


1桌面时代


古老的C 王国从1972诞生以后, 一直都非常强大, 这里的臣民对它又爱又恨, 因为它的法律允许它的臣民直接操作内存,执行效率极高, 但是又对内存分配回收不管不顾,全部扔给子民们去处理。


其实纯粹的C语言还是比较简单的, 只要你能真正的搞懂指针是怎么回事 ,   C++诞生以后,在C的基础上又加入了面向对象, 泛型编程等“时髦”概念, 让帝国的法律制度变的复杂无比, 外边的人都戏称”只有成为律师才能在C++ 王国生存”。


但是这个世界所有人都离不开它, C/C++ 王国所生产的操作系统(Windows,Linux,Unix ),网络协议栈(TCP/IP), 编译器, 数据库(Oracle, MySQL, SQL Server , Db2),构建了计算机世界赖以生存的最底层基础。


由于贴近机器运行, C/C++在嵌入式开发以及驱动开发领域根本就没有对手。 


由于运行效率高, 它很适合去生产那些要求高性能的, 最好是没有图形界面的, 在服务器端运行的系统级软件, 比如说Web服务器(apache, nginx, IIS ),  缓存(redis, memcached) , 版本控制(git,svn),    邮件服务器 等等。


当然C/C++在图形界面方面也非常强悍,  推出了像QT这样的GUI框架, OpenGL, DirectX 这样的图形API,    以及Windows上的GUI,   Linux上的KDE, Gnome等。

  

在这些图形框架和类库的推动下, C/C++王国几乎霸占了关键的桌面应用, 例如办公(Office), 上网(IE,Firefox,Chrome...) , 图像处理(Photoshop),  聊天(QQ),   视频(暴风影音,迅雷)......    还有哪些数不清的游戏以及       背后的游戏引擎。 


C王国的疆域之广阔, 可以说是前无古人, 如果计算机世界一直停留在桌面应用时代, 估计就没有别人什么事了, 除非出现一个新的语言, 具备C/C++的性能, 又简单易学。 


2互联网时代


互联网时代给后来者带来了机会,整个世界开始往互联网上转移,  刚开始的时候是静态网页,没有什么交互, C/C++王国生产的Web服务器像Apache 还能够轻松应对,可随后就进入了动态页面时代, C/C++尴尬的发现, 自己并不适合“快速的”去生产这些需要和浏览器打交道的, 后端有复杂多变业务的系统, 例如电子商务网站,社交网站 , 他们发现自己在处理Web请求和响应的时候显得异常笨拙。 


Java 


这个巨大的市场空白被Java 率先抓住, 成功建立了Java 帝国。 (参见Java : 一个帝国的崛起)


Java 用jsp, servlet, EJB, Spring, Hibernate,  Struts,  myBatis , Ant, Maven,Velocity , Freemaker, Ehcache 等数不清的工具和框架成功的占据了Web编程领域, 不仅如此, 他还成功的侵蚀了C/C++帝国的地盘。 


原来那些高性能的服务器端软件都是由C/C++ 帝国生产的, 随着Java 虚拟机不断的优化提升, 特别是网络应用是很多处理时间花在IO上, 对速度和性能要求不是非常高, Java也适合来做服务器端软件了, 例如应用服务器(Tomcat, JBoss, Websphere, Weblogic) , 网络应用框架Netty,  服务框架Dubbo,   搜索Elastic Search,  消息队列ActiveMQ等等。


机器性能的提高, 甚至让Java涉足桌面领域, 虽然没有C++那么成功, 至少捕获了码农的心, 很多开发工具都是Java 写的:  IntelliJ IDEA, Eclipse  , HBuilder 等等。 

微软帝国的.NET和C#也不得不提,虽然不如Java生态圈这么成熟和强大, 但是在Windows领域绝对是站主导地位, C#可以开发Web系统和桌面系统,  Visual Studio 是个非常强大的开发工具,很多开发靠拖拖拉拉就能搞定。 只是这个圈子有些封闭,无法吸引更多的人尤其是大牛的加入, 比较可惜。 


但是我们得知道, Java和.Net 他们的底层Java 虚拟机和.NET虚拟机, 也是由C/C++帝国生产的, 虽然老帝国的疆域大大缩小, 但在系统级软件的地位依然无可撼动!


JavaScript


互联网时代的应用基本是B/S结构,  即浏览器/服务器,  服务器端Java当仁不让, 但是在浏览器端, Java虚拟机就没有任何优势了, 这里是Javascript的天下, 从前的VBScript, JScript早就被码农抛弃。 


Javascript 一家独大,  这里充斥着令人眼花缭乱的框架和库 Dojo, JQuery, Prototype, ExtJS,  AngularJS ,  React ,  Backbone ......  ,  码农们在这里能深深的体会到选择太多的幸福烦恼。

  

单单是Javascript还不够, 还需要HTML 和 CSS才能构建起完整得浏览器端页面,于是Javascript+HTML +CSS , 这三兄弟联手把浏览器端给统治了, 现在的统治异常稳固, 短期内还看不到可以任何被推翻的迹象。 


在原来Javascript/HTML/CSS 还得寄人篱下, 主要是通过JSP, Veclocity ,Freemaker等视图技术生成Web界面, 现在前后端分离, javascript 通过AJAX的方式只调用服务器端的接口,界面的生成完全放在浏览器端, 他们彻底独立了。 


Javascript 不仅仅贪恋浏览器这一亩三分地, 它的攻势咄咄逼人, 还在不断的攻城掠地, 在Chrome的javascript 引擎V8的协助下, Javascript 用Node.js 成功进驻了服务器端编程, 在React Native 的支持下, 竟然杀入了在手机端开发领域 ! 


这个最初看起来不怎么样的语言风头一时无两, 一个帝国开始隐隐成型。 


 脚本语言


Web编程领域实在是太大, 强如Java, .NET  也无法通吃,特别有很多码农批评Java 笨拙,臃肿,发展慢, 不灵活, 这就导致了很多小王国的蓬勃发展, 最具代表性的是PHP, Python和Ruby。 


这三位都是脚本语言,由解释器解释执行(解释器自然也是C/C++帝国生产) , 他们对Java Web编程领域的进攻极为猛烈。 


PHP专门做Web编程, 它快速灵活,和Linux,Mysql 堪称绝配,  很多论坛(Discuz), 内容管理系统(WordPress), 网店(Magento),还有很多大型网站(例如Facekbook, Yahoo,Wikipedia,新浪微博等) 都是用PHP搞定, PHP是很多码农的最爱。


Ruby 漂亮的语法和强大的元编程能力对码农们有着巨大的吸引力, Ruby on rails 这个Web编程框架是很多人的挚爱, 像Twitter(现已转向Scala),  Hulu (在线视频租赁), AirBnb(房屋分享租赁), GitHub等都是构建于Ruby on rails之上。  


Python 做Web编程也是一大利器, 但绝不仅仅是Web编程, 它简直就是个万能工具,啥都能做,爬虫,桌面程序,科学计算,数据挖掘 样样都行。 


Python 和Ruby 都简单易学, 并且表达能力强, 随手写几行代码就能完成很多功能,所以非常适合做运维, 有很多自动化运维工具, 像Ruby 的Chef , Puppet ,  Python 的Saltstack。 


3移动互联网/大数据/云计算时代


Java帝国在Web编程领域受到了PHP, Python, Ruby 持续攻击,   被搞的灰头土脸, 但是帝国的基因和运气实在是好, 竟然又搭上了手机开发和大数据快班车, 成功开辟了新战场。 


在手机领域, Android 选择了Java 作为开发语言, 用来对抗苹果iOS的Objective-C和Swift  , 占据了手机开发的大部分*。 


大数据领域, Java和Java 虚拟机更是笑傲群雄, Hadoop 是Java 开发的, Spark 是Scala开发的, Storm则由Java和Clojure共同组成。Scala和Clojure都运行在JVM之上, 可是说是函数式编程的语言在JVM上的新生, 估计渐渐老去的LISP会很欣慰的。

 

在云计算领域,Ruby 和Python 令人吃惊的渗透了进来, 成功的扩大了自己的领地,   IAAS 平台 Openstack是 Python写的,   PAAS平台Cloudfoundry 是Ruby写的, 这再次证明了Python/Ruby 适合对性能要求不高的管理,监控等领域。 


Google推出的Go语言也要进来分一杯羹, 它号称是云计算时代的C语言, 能达到C的运行效率和Python 的开发效率。 只是还很年轻,用Go语言开发的系统知名的有Docker, 七牛云存储, 容器集群管理系统Kubernetes等等, 至于能不能建立一个像C,Java 那样的帝国, 就看它的造化了。 


(完)



原文地址