2024年,在风云际会的编程世界里,窥探Java的前世今生,都说它穷途末路,我认为是柳暗花明!

文编|JavaBuild

哈喽,大家好呀!我是JavaBuild,以后可以喊我鸟哥,嘿嘿!俺滴座右铭是不在沉默中爆发,就在沉默中灭亡,一起加油学习,珍惜现在来之不易的学习时光,等工作之后,你就会发现,想学习真的需要挤时间,厚积薄发啦!

截止2024年1月,全球程序员人数预计达到2800万,其中热门的程序语言高达几十种,在此之中包含着太多太多的传奇故事,作为程序员,鸟哥想说:工欲善其事必先利其器!想要真正掌握一门语言,必须要先了解它的历史,今天!作为Java语言的追随者,想和大家聊一聊Java的前世今生!

“Java”名字的由来

Java是一个简单、健壮、可移植、安全、高性能、面向对象的编程语言,于1995年由Sun公司牵头开发。

Java期初并非叫Java,甚至于这个名字都没有进入备选前三行列,最初架构搭建的时候这套语言被命名为“Greentalk”,因为,当时这个项目组的名字叫Green很随意的起名。

后来改名为Oak,翻译成中文为橡树,在欧美很多国家,橡树因其高大、强壮、枝繁叶茂被视为国树,而恰巧的是,詹姆斯.高林斯( James Gosling) 的窗外就有一颗,什么?詹姆斯.高林斯是谁?



不会吧不会吧,准备学Java了还不认识他?那就附个图出来吧,就是下图这位红光满面,大脑袋锃亮的大叔,Java的主要开发者,被誉为“Java之父”



因此,Java的第二个名字就应运而生了,天公不作美,Oak已经被其他公司捷足先登了,无奈之下高林斯团队只能重新起名,新名字需要具备dynamic(动态的)、revolutionary(革命性的)、Silk(像丝绸一样柔软的)、Cool(炫酷的)等特点,有人说用“Silk”,也有人说用“Lyric”,但最终都没有被律师团队认可。

有一天,团队中的一个工程师Mark Opperman去咖啡店喝咖啡,得到启发想将他们的语言命名为“Java”,这个单词在英文中的意思是印度尼西亚爪哇岛,而比较巧的是,这个地方盛产咖啡。

马克回去将自己想到的名字与团队成员分享之后,大家一拍即合,Java之名从此诞生,并寓意:希望后世之人可以通过Java过上舒适,惬意的生活。

Java的版本变更史

上个世纪90年代,单片计算机诞生,推动了电子产品的智能化,为抢占市场,Sun公司高层紧急会议,推出“Green”计划(绿色计划),由詹姆斯·高斯林(James Gosling)牵头,开发出一种可以在多种电子产品上运行的程序架构。

由此Green项目组正式成立,决定采用C++进行程序开发,但随着项目深度的进行,大家逐渐发现了C++的弊端, 庞大且复杂的C++无法满足他们丰富的跨平台需求,高林斯项目组经过深度讨论,最终咬牙跺脚,决定以C++为底层开发出一套简单,高效,跨平台的程序语言。

1992年Oak雏形诞生(此时的Java还要这个名儿),东西搞出来了,Sun公司经过多方洽谈,联系了不少的硬件公司进行商业展示,悲伤的是这一次Oak没有让金主爸爸们满意。

时间很快来到了1994年(这一年,鸟哥出生啦),Green项目用Oak开发出了可以在网页上嵌入小程序的Applet技术,此举让很多公司看到了Oak的价值,Oak活了下来。

1995年,Sun公司将Oak正式更名为Java,同年发布了Java1.0版本,提出了那句“Write Once, Run anywhere”,一次编译,随处运行,这句口号注定会写入世界编程史。而这一年也成为了Java的元年,此后Java正式进入了版本迭代时代。下图为鸟哥整理的Java版本发展的时间轴。



现在Java基本稳定在了每半年一个版本,每三年一个LTS(长期维护版本),如今仅Java8,Java11,Java17,和去年9月发布的Java21为LTS版,其他版本皆属于过渡版,使用者不多。

Java的特点

那么作为编程语言界的常青树,Java究竟有哪些魅力呢?

  1. 简单易学(哈哈,这个俺不好评价,反正Java之父的发量在众多语言创始人中数得着的稀疏)
  2. 面向对象(封装,继承,多态)
  3. 平台无关性( JVM实现平台无关性),一次编译,随处运行
  4. 支持多线程
  5. 可靠性,安全性,高效性
  6. 支持网络编程
  7. 编译与解释并存
  8. 以上种种,在下看来都不足以让它经久不衰,强大的生态才是它的立身之本!

Java的应用

那么学了Java之后可以从事哪些工作呢?也是大家最关心,也是最重要的问题。鸟哥大致将Java的应用分为如下几点:

  • 桌面应用程序
  • Web应用
  • 企业级应用
  • 移动端,主要为安卓开发
  • 嵌入式系统
  • 游戏开发
  • 金融数据服务
  • 物联网
  • 大数据
  • 机器人

    如上行业均可,但不止于此哈

Java的钱途

除了学了能干啥之外,还有个更重要的问题是,干了能赚到米吗?答案是肯定的!如下2023年Java秋招的薪资待遇水平,可以作为参考。

但最近也在很多平台看到大量唱衰Java的文章,确实随着其他语言的强势崛起,以及很多应用场景的逐渐升级,Java的热度确实在降。

这份统计图统计的是近三年受欢迎编程语言排行,由此可看出,Java的排名逐年下降,但!目前在国内,Java仍然是使用人数最多的语言,仍旧拥有着庞大的市场。对于每年都要凉一次的Java,我们应给予足够的信心(当然,这里也想吐槽Oracle公司,商业化没问题,想赚钱也理所当然,但请你吃相好点!)

最后,用标题的一句话总结此篇:2024年,在风云际会的编程世界里,窥探Java的前世今生,都说它穷途末路,我认为是柳暗花明!

2024年,在风云际会的编程世界里,窥探Java的前世今生,都说它穷途末路,我认为是柳暗花明!的更多相关文章

  1. 【scratch3.0教程】1.1 走进编程世界

    第一章 认识Scratch 第1课   走进编程世界 大家认识下图中的人物吗? 史蒂夫·乔布斯             比尔·盖茨 ●Elon Musk,特斯拉.Space X火箭公司创始人,9岁学习 ...

  2. Android NFC开发(二)——Android世界里的NFC所具备的条件以及使用方法

    Android NFC开发(二)--Android世界里的NFC所具备的条件以及使用方法 NFC的应用比较广泛,而且知识面也是比较广的,所以就多啰嗦了几句,我还还是得跟着官方文档:http://dev ...

  3. VRChat简易教程3-往世界里导入模型和VRC接口初探

    一.准备工作 按前面的教程新建一个project,导入sdk并创建地面(Terrain)和VRCWorld. 本教程中我们学习如何导入别人做好的模型并使用VRC提供的接口来实现物品的抓取,模型素材(小 ...

  4. Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里

    添加Chipmunk物理引擎在我们的游戏世界里         一.简介                   cocos2d JS能给我们力量来创造令人印象深刻的游戏世界.但缺乏某种现实.       ...

  5. python世界里的局部变量和全局变量: 潜规则太重要了!!!

    python世界里的局部变量和全局变量: 潜规则太重要了!!! 先上代码: def fun(): def test_global(): ''' 内层和外层都需要声明为global, 才能彻底打通变量名 ...

  6. 编程基础——C/C++,Java,ObjC讨论回调模式

    什么是回调? 因为它是从C开始进入编程世界.术语改只是口.叫习惯了.java里通常叫listener(监听器).C/C++里通常叫callback(回调),ObjC里面叫delegate(托付) 回调 ...

  7. 并发编程(十三)—— Java 线程池 实现原理与源码深度解析 之 Executors(三)

    前两篇文章讲了线程池的源码分析,再来看这篇文章就比较简单了, 本文主要讲解 Executors 这个工具类,看看长江创建线程池的几种方法. newFixedThreadPool 生成一个固定大小的线程 ...

  8. [Java并发编程(五)] Java volatile 的实现原理

    [Java并发编程(五)] Java volatile 的实现原理 简介 在多线程并发编程中 synchronized 和 volatile 都扮演着重要的角色,volatile 是轻量级的 sync ...

  9. [Java并发编程(三)] Java volatile 关键字介绍

    [Java并发编程(三)] Java volatile 关键字介绍 摘要 Java volatile 关键字是用来标记 Java 变量,并表示变量 "存储于主内存中" .更准确的说 ...

  10. 世界时区和Java时区详解

    0.引言 Druid中时区的问题一直困扰着我们,所以我专门去研究了一下世界时区和Java中的时区,对使用Druid很用帮助. 1.UTC时间&GMT时间 UTC时间是时间标准时间(Univer ...

随机推荐

  1. day02 数据类型转换 运算符 方法

    数据类型转换 自动类型转换 强制类型转换 1. 自动类型转换:就是范围小的向范围大的转换  将取值范围小刀的类型自动提升为取值范围大的类型. 转换规则  byte.short.char  int--- ...

  2. 01--OpenStack 手动安装手册(Icehouse)

    #OpenStack 手动安装手册(Icehouse) 声明:本博客欢迎转发,但请保留原作者信息!作者:[罗勇] 云计算工程师.敏捷开发实践者博客:http://yongluo2013.github. ...

  3. .NET6发布项目到腾讯云Windows2012R全网最详细教程

    注意:本次使用腾讯云作为本次的演示 1.创建服务器及连接 1.1 请先在腾讯云.阿里云等创建实例 1.2 打开远程连接工具输入在腾讯云获取的公网iP输入计算机 1.3 根据图片点击连接 1.4 输入服 ...

  4. AirSim 自动驾驶仿真 (6) 设置采集参数和属性

    https://cloud.tencent.com/developer/article/2011384 1.配置文件在哪 默认情况下,文件位于用户目录下的AirSim文件夹,比如在Windows下,文 ...

  5. JAVA类的加载(4) ——类之间能够隔离&类占用的资源能回收

    一.类加载体系

  6. Redis 技术整理

    认识Redis Redis官网:https://redis.io/ Redis诞生于2009年全称是Remote Dictionary Server 远程词典服务器,是一个基于内存的键值型NoSQL数 ...

  7. ASP.NET Core+Vue3 实现SignalR通讯

    从ASP.NET Core 3.0版本开始,SignalR的Hub已经集成到了ASP.NET Core框架中.因此,在更高版本的ASP.NET Core中,不再需要单独引用Microsoft.AspN ...

  8. Linux中修改文件权限方法

    在此记录一下,看到的一篇写的比较好的帮我解决问题的文章 这里也补充一下,如果要修改当前目录下的所有文件时,文件名用 * 代替,如:chmod 755 *(即可修改当前文件下所有文件的权限为:-rwxr ...

  9. 开发一个现代化的.NetCore控制台程序,包含依赖注入/配置/日志等要素

    前言 最近需要开发小工具的场景有点多,上次我用 go 语言开发了一个 hive 导出工具,体验还不错,只是 go 语言的语法实在是喜欢不起来,这次继续试试用 C# 来开发小工具. 这次小工具的功能很简 ...

  10. Net 高级调试之七:线程操作相关命令介绍

    一.简介 今天是<Net 高级调试>的第六篇文章.上一篇文章我们说了值类型,引用类型,数组等的内存表现形式.有了这个基础,我们可以更好的了解我们的程序在运行时的状态,内存里有什么东西,它们 ...