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没有这么多优势在互联网来了,它也不会火。我们需要不断学习来提高自己,从而进步。让自己的人生更有价值,而不仅仅是活着,活着太简单了。
  有时候看着身边这么多牛人,自己也会恐慌。所以,少刷点抖音,少玩点王者荣耀,吃鸡。一起敲敲代码,没准以后也会创造出一个改变世界的东西来。

7.Java帝国的诞生的更多相关文章

  1. java帝国的诞生

    Java : 一个帝国的诞生 C语言帝国的统治 现在是公元1995年, C语言帝国已经统治了我们20多年, 实在是太久了. 1972年, 随着C语言的诞生和Unix的问世, 帝国迅速建立统治, 从北美 ...

  2. 【ZZ】Java : 一个帝国的诞生 & 假如时光能够倒流, 我会这么学习Java

    Java : 一个帝国的诞生 http://dy.qq.com/article.htm?id=20160523A06XFS00 写的很有意思,一下子了解了JAVA的历史. 假如时光能够倒流, 我会这么 ...

  3. Java帝国的成立

    java帝国的成立 一场旷日持久的战争 1972年C语言诞生 贴近硬件 ,运行极快 , 效率极低 操作系统, 编译器 ,数据库, 网络系统 指针和内存 (容易犯错 , 暴力) 1982 年C++诞生 ...

  4. Java开发笔记(三)Java帝国的特种官吏

    上一篇文章介绍了Java工程的帝国区划,末尾给出了一段Java代码例子,这个代码虽然勉强能看懂,但是有些细节令人不甚了了.比如说“// 参观朱雀台”为何能够直接跟在当前行后面?“System.out. ...

  5. Java开发笔记(四)Java帝国的度量衡

    秦始皇统一中国之后,实行“书同文,车同轨”,把货币和各种度量衡都统一起来,从而缔造了一个秩序井然的帝国.既然统一度量衡是每个帝国都要做的事情,Java帝国也不例外,对于人生地不熟的初学者来说,只有认识 ...

  6. Java 帝国之建造者模式

    Java 帝国之建造者模式 原创: 王钦誉 码农翻身 今天 本文来自王钦誉的投稿,老刘做了较大修改. 原文地址: https://xiaoqinyu0000.github.io/2018/06/11/ ...

  7. Java匹马行天下之Java帝国的崛起(大结局)

    Java匹马行天下之Java帝国的崛起大结局 前言: [博客*缘] 网络真情伴, 博客友谊连. 笑中藏泪暖中寒. 回想那些悲喜, 苦涩也缠绵. 往事难回首, 新篇染旧言. 世间多少梦能全. 感谢相牵, ...

  8. java语言评价--java帝国

    “陛下您想想,我们有很多宝贝,” IO大臣根本不理线程大臣, 继续侃侃而谈:“ 比如IoC, AOP,反射.动态代理.泛型.注解.JDBC.JMS...... 还有我们引以为豪的JVM.这些东西,那些 ...

  9. 走进JavaWeb技术世界9:Java日志系统的诞生与发展

    本文转自[码农翻身] ## 一个著名的日志系统是怎么设计出来的? # 1前言 Java帝国在诞生之初就提供了集合.线程.IO.网络等常用功能,从C和C++领地那里吸引了大量程序员过来加盟,但是却有意无 ...

随机推荐

  1. P1042 查找大于等于x的最小元素

    题目描述 现在告诉你一个长度为 \(n\) 的有序数组 \(a_1, a_2, ..., a_n\) ,以及 \(q\) 次询问,每次询问会给你一个数 \(x\) ,对于每次询问,你需要输出数组 \( ...

  2. linux进程简单睡眠

    当一个进程睡眠, 它这样做以期望某些条件在以后会成真. 如我们之前注意到的, 任何睡 眠的进程必须在它再次醒来时检查来确保它在等待的条件真正为真. Linux 内核中睡眠的 最简单方式是一个宏定义, ...

  3. linux 选择 ioctl 命令

    在为 ioctl 编写代码之前, 你需要选择对应命令的数字. 许多程序员的第一个本能的反 应是选择一组小数从0或1 开始, 并且从此开始向上. 但是, 有充分的理由不这样做. ioctl 命令数字应当 ...

  4. vue-cli常用插件集合

    element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组件库 mint-ui - Vue 2的移动UI元素 iview - 基于 Vuejs 的开源 UI ...

  5. rabbitmq template发送的消息中,Date类型字段比当前时间晚了8小时

    前言 前一阵开发过程遇到的问题,用的rabbitmq template发送消息,消息body里的时间是比当前时间少了8小时的,这种一看就是时区问题了. 就说说为什么出现吧. 之前的配置是这样的: @B ...

  6. PostgreSQL 遇到 column "value" does not exist

    初次使用PostgreSQL,在执行插入语句的时候死活插入不进去数据 INSERT INTO pre_trait ( archive_id, apply_from, owner_area_code ) ...

  7. ML基础——搜索引擎与图书管理,百度与李彦宏

    本文始发于个人公众号:TechFlow 谈及机器学习,大家想必会有许多联想,比如最近火热的人工智能,再比如战胜李世石的AlphaGo,甚至还会有人联想起骇客帝国或者是机械公敌等经典机器人电影. 但实际 ...

  8. [工具] Git版本管理(一)(基本操作)

    一.版本控制的发展 1.用文件来做版本控制 我们在写论文.做方案等的时候,一般都会同时在文件夹中存在很多版本的文件. 例如: 这种方式很常用,在很多领域都是用这种方式来进行版本控制的. 2.本地版本控 ...

  9. 【题解】有标号的DAG计数1

    [HZOI 2015] 有标号的DAG计数 I 设\(f_i\)为\(i\)个点时的DAG图,(不必联通) 考虑如何转移,由于一个DAG必然有至少一个出度为\(0\)的点,所以我们钦定多少个出度为\( ...

  10. matplotlib绘制符合论文要求的图片

    最近需要将实验数据画图出来,由于使用python进行实验,自然使用到了matplotlib来作图. 下面的代码可以作为画图的模板代码,代码中有详细注释,可根据需要进行更改. # -*- coding: ...