1972年,C诞生,而Java是1995年诞生的。它贴近硬件,有汇编语言的特性,运行极快,效率极高。早期,用在操作系统、编译器、数据库、网络系统等。但它有两把沉重的枷锁一直在程序员身上,那就是指针和内存管理。虽然指针无比强大,能够直接去操作内存,但C语言却没能给他们一个工具去做一些越界的检查,导致很多新手程序员容易犯错。对于内存管理,C语言更是完全放任态度,你们自己分配的空间,你们自己去释放,更要命的是这些问题有些编译期间是发现不了的。只有在运行的时候,才会突然暴露,常常让很多程序员手忙脚乱。以至于大量的时间话宝贵的经历都被浪费在小心翼翼的去处理指针内存分配上。
刚开始C语言说是跨平台的,可移植的。在这台电脑上写的代码在另外一个机器上只需要编译就好了。可实际上并不是这样,它要求所有人尽可能的去使用它们一个标准的C的函数库。然后针对不同的平台,每个平台都要写一份。有一点点小小的错误,它都会导致编译失败。这样C语言效率固然高,但这种暴症,慢慢有许多人不喜欢了。
1982年,C++ 诞生了。它添加了一些面向对象的功能,兼容C,有了一些静态类型的检查,性能比较好,但这门语言可能更复杂,复杂到很多人实在没办法去掌握这门语言,很多复杂特性令人吃惊。它在图形领域和游戏领域等方面取得了成功。
所以,好多人就想反抗(我们要闹革命,哈哈),就建立了一个新的语言。这门语言的语法有点像C、没有指针、没有内存管理、真正的可移植性(Write Once,Run Anywhere.一次编译,到处运行)、面向对象、类型是安全的、提供一套高质量的类库。
刚开始想命名为C++-- ,在C++的基础上给它优化,去掉一些复杂的东西。后来发现,设计理念偏差太大。所以另起炉灶,定义了一门新语言。刚开始看见门口有一棵橡胶树,就将其名字命名为oka。但最后发布的时候发现已经被别人注册了,所以在讨论了许久之后,最后决定叫新语言为Java。
为了实现真正的跨平台。他们在每个操作系统之上,增加了一个抽象层,叫Java虚拟机,统称JVM(Java Virtual Machine)。所有平台上只要装了Java虚拟机,它们就可以跑Java程序。这样就实现了真正的可移植性。只要装了JVM环境,代码无论在什么电脑上都可以正常跑。用Java写的程序最后都跑在虚拟机上,除非个别情况,都不要看见操作系统。
语言创造出来了,就需要发展。为了吸引更多的人加入。他们决定搞一个演示,向大家展示一下Java的能力。
刚刚出世的Java也没完善,想着搞点什么好呢?于是,1995年,把眼光盯上了刚刚兴起的互联网时代。所有的网页刚出生。网页极其丑陋,缺乏互动性。于是在浏览器上弄了一个小插件。把Java运行环境放了上去,在上面开发了一个图形界面化的程序(Applet早起学),现在慢慢放淘汰了。现在JS比较流行。就在1995年,所有看到他的程序员都发出,咦,这是什么东西,这么厉害,它让之前那些简单粗糙的网页看起来更加美轮美奂,震撼人心。于是乎,Java火了。
通过Applet,无数程序员看到了Java这门语言。了解了这门语言特性后,许多无法忍受C语言帝国暴症的一些程序员很快加入了Java。然后领地也就慢慢扩大。就连C语言帝国那些商业巨头也纷纷来合作。其中包括Oracle、微软这样的大公司。微软的BillGates说:Java是他见过迄今为止设计的最好的语言!但是比尔盖茨这个人不地道,他买了Java许可证之后,他在自家的浏览器上也支持了Applet,但是他却偷偷的想去修改一下Java,想把Java绑死在它们Windows上赚钱。那样子Java就变的不可移植了。这是它们难以忍受的。于是,Java和微软发起了一场战争。逼着微软退出了Java领域。然后微软自己开发了一个.net。
95年—97年Java不断开疆扩土,用Java的程序员达到了几十万之众,这显然已是一股不可小觑的力量了,在世界上。但是,久而久之,大家发现Java那里面除了Applet似乎干不了其他事情。然后C语言有些人就嘲笑,这个东西就像是一个玩具,只能在网页上弄弄东西。
经过98年密谋,Java王国决定派出三支部队向外扩张。由JavaSE占领桌面端,JavaME占领手机端,JavaEE占领服务器端。但其中两支队伍迅速败下阵来。首先JavaSE的首领发现,开发桌面应用的程序员接受不了Java,虽然Java有个Swing可以开发桌面,但开发出来的界面非常难看,和原生桌面差距较大,尤其是一些为了运行程序还得安装一个虚拟机,这个地方大家接受不了。当然ME也一样不受待见。为什么呢?我认为更重要的原因是因为当时移动互联网还未兴起。那失之东偶,收之桑榆。JavaEE到了最好的时候,互联网发展了,大家忽然发现Java简直是为服务器端程序所发明的。它不仅强大,健壮,而且跨平台。
在JavaEE的规范指导下,发现它们特别适合一些团队去开发一些复杂的大型项目。然后他们授权BEA公司,这是个特别早的公司。第一个使用了Java J2EE的许可证。这个公司推出一款产品叫Weblogic,它凭借它的一个集群功能,第一次展示了复杂应用的可扩展性和高可用性。(三高:高可用高性能高并发)。这个后来被称作中间件的东西把程序员从事务管理、安全管理、权限管理等方面解放出来。让他们能够专注于业务开发。这立刻捕获了大量程序员的心。很快,Java程序员达到了数百万之众。
榜样的力量是无穷的,其他商业巨头也纷纷跟上,尤其是IBM,IBM是世界上最古老的一家IT信息管理的一个公司。它在Java上疯狂投入,它不仅开发出了自己的应用服务器叫做Websphere,还有Eclipse这样一款极具魅力的开发平台。Eclipse是早些年最重要的开发平台。现在流行IDEA。当然,IBM利用Java获得了非常可观的收益。不仅是软件,还有硬件,服务器。三个地方齐头并进。把IBM这家公司也推向了新的高峰。
那时候估计所有人都没想到出了商业巨头之外,咱们程序员也对Java这么热爱,他们基于Java开发了非常多的平台和一些工具。比如:
- 构建工具:Ant、Maven、Jekins
- 应用服务器:Tomcat、Jetty、Jboss、Websphere、weblogic、
- Web开发:早些年SSH,后来SSM,通过这些开源框架,开了人员可以
专注于代码的实现,而不需要管理一些复杂的事物相关的
- 还有一些开发工具:(可以简化开发步骤,方便我们快速开发一些我们的项目),比如:Eclipse、NetBeans、Intellij idea、Jbuilder。
这些大部分都是开源的,微软只能眼睁睁的看着服务器端市场被Java王国占据,他们当然不会善罢甘休。他们推出了自己的产品叫做.net来对抗,但Java已经不在乎了。因为微软系统是封闭的,所有软件都是自家的,开发工具visual studio(写C的)、Web服务器: IIS 数据库:SQLServer 只要你用了.net几乎就会自动绑定上微软。而且微软一些系统只能运用在windows服务器上,这服务器在高端市场占有率实在是太低了。
Java发展途中,也遇到了一些新势力的打击。比如2005年底一个新的王国突然崛起,它们号称开发效率比Java快5~10倍,叫Ruby。结合了PHP的一些优点和一些Java的优点,特别适合快速开发一些简单的Web网站。突然发展很快但根据根本没对Java产生什么实质性的威胁。因为使用Ruby这门语言,在大型商业系统的还非常少。除了Ruby之外还有PHP、Python这些都是适合快速开发的不太复杂的web系统的。但是真正的一些大多数web系统都是非常复杂的,都是拿Java做的。所以这些语言并未对Java产生是实质性的攻击。
然后2006年:一直叫Hadoop的军队让Java入侵了大数据领域。由于使用Java语言的程序员在理解了MapReduce分布式文件系统之后,很快就能编写一些处理海量数据的程序。Java就这样占领了大数据领域,通过Hadoop。
2008年,一个Android系统横空出世。随着移动互联网的爆发,迅速普及。Android火了,而运行在Android之上的正是Java。Java王国在谷歌的支持下,以一种意想不到的方式占领了手机端。完成了当年JavaME没有完成的一些壮志未酬的事业。
迄今为止,全世界估计有几千万的程序员都会Java。但真正吧Java精通的人不到1%,剩下99%都只停留在回Java的层面上。所以说,我们要争取做那1%的人。现在,Java的实现强大是其他语言无法比拟的。
从08年开始之后,我觉得Java是一发不可收拾了;Java占据了大部分服务器端开发,尤其是一些关键的复杂的系统。绝大多数手机端,以及大部分大数据领域都是使用Java,于是乎一个伟大的帝国就这样诞生了。
那么,Java为什么能成功的?
一个产品的成功和一个人的成功是同一个道理。除了自身有过硬的一些实力外,他还需要一点点运气,而且有时候不得不承认,运气还是比较关键的。古人有句话说,天时地利人和。Java的成功除了它自己具备的一些强大的特性之外,我觉得它正好跟上了互联网发展的这个节奏。就好比微软的成功,除了windows好用之外,它也是正好踩中了个人电脑发展的节奏,然后就快速发展起来了。所以说,我们除了自身努力之外,也需要一些机遇。
但是,我们需要做一个准备。就是,在这个机遇来临之前,我们得让自己达到足够健壮的地步。如果Java没有这么多优势在互联网来了,它也不会火。我们需要不断学习来提高自己,从而进步。让自己的人生更有价值,而不仅仅是活着,活着太简单了。
有时候看着身边这么多牛人,自己也会恐慌。所以,少刷点抖音,少玩点王者荣耀,吃鸡。一起敲敲代码,没准以后也会创造出一个改变世界的东西来。