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. Python并发编程——threading、开启线程 、线程进程对比、线程方法、守护线程、GIL、同步锁、死锁和递归锁、信号量、Event、condition、定时器、queue、concurrent

    文章目录 内容回顾 一 threading模块介绍 二 开启线程的两种方式 三 在一个进程下开启多个线程与在一个进程下开启多个子进程的区别 四 练习 五 线程相关的其他方法 六 守护线程 七 Pyth ...

  2. 形象描绘TCP三次握手和四次挥手

    一.TCP三次握手TCP 三次握手就好比两个人在街上隔着50米看见了对方,但是因为雾霾等原因不能100%确认,所以要通过招手的方式相互确定对方是否认识自己.形象描绘TCP三次握手和四次挥手 张三首先向 ...

  3. Arduino 麦克风声音传感器指南

    麦克风声音传感器 麦克风声音传感器,顾名思义,检测声音.它可以测量声音的响度. 这些传感器的种类繁多.  在下图中,您可以看到 Arduino 最常用的. 最左边是KY-038,右边是LM393麦克风 ...

  4. Travelling Salesman and Special Numbers

    prologue 模拟赛的一道题,结果没做出来,丢大人,败大兴.所以过来糊一篇题解. analysis 我们看到数据范围这么大,那么肯定不可以一个一个遍历(废话),所以就要考虑这个题目的性质. 我们先 ...

  5. VTable——不只是高性能的多维数据分析表格

    导读 VTable: 不只是高性能的多维数据分析表格,更是行列间创作的方格艺术家! VTable是字节跳动开源可视化解决方案 VisActor 的组件之一. 在现代应用程序中,表格组件是不可或缺的一部 ...

  6. Centos7下创建centos-home逻辑分区

    1备份要挂载的文件夹 查看home文件夹有无文件,如有文件一定要记得备份 2创建逻辑分区 2.1查看已有逻辑分区 2.2查看磁盘分区情况 2.3查看磁盘PV 2.4创建逻辑分区 lvcreate -n ...

  7. [ABC218F] Blocked Roads 题解

    Blocked Roads 题目大意 给定一张 \(n\) 个点,\(m\) 条边的无向图,每条边的边权均为 \(1\).对于每一个 \(i\in [1,m]\) 求出从点 \(1\) 到 \(n\) ...

  8. 在路上---学习篇(一)Python 数据结构和算法 (2) -- 冒泡排序、选择排序、插入排序

    独白: 第一次接触算法排序, 充满了好奇并且渴望了解其中原理,今天先学习了三种排序的方法,分别是 冒泡排序.选择排序.插入排序.学完以后发现数学知识真的很重要,越牛逼的算法要求知识越多,越精.虽说刚接 ...

  9. Kafka 如何保证消息消费的全局顺序性

    哈喽大家好,我是咸鱼 今天我们继续来讲一讲 Kafka 当有消息被生产出来的时候,如果没有指定分区或者指定 key ,那么消费会按照[轮询]的方式均匀地分配到所有可用分区中,但不一定按照分区顺序来分配 ...

  10. UData+StarRocks在京东物流的实践

    1 背景 数据服务与数据分析场景是数据团队在数据应用上两个大的方向,行业内大家有可能会遇到下面的问题: 1.1 数据服务 烟囱式开发模式:每来一个需求开发一个数据服务,数据服务无法复用,难以平台化,技 ...