为什么社会上的Java程序员还没有饱和?
大学在教 Java,培训班也在输出 Java 程序员,但很遗憾,伟大的达尔文同学提出的“物竞天择,适者生存”依然是普世的真理。大学和培训班都看中了 Java 这块蛋糕,只能说明 Java 程序员在市场上的需求量很大,但却不是饱和!
说说我的故事吧。我上大学那会,学校的计算机专业刚成立两年,也就是说,我们是第二批。据说,第一批做小白鼠的学长学姐们,很多在毕业的时候都没从事计算机专业方面的工作。倒不是他们不想找这方面的工作,而是本地的工作机会寥寥无几。
很幸运,我是班里面为数不多坚持下来的。准确来说,这个数不超过 10。剩余的呢?能在大一的时候转专业的都转了,转不了的毕业后都干别的去了。一个班,四十多名学生,只有不到 10 名学生坚持了下来,从事着 Java 编程相关的工作,其中有三四个后来转到了安卓。能感受到吧,虽然学校在教 Java,但老师的水平有限,再加上学生的水平参差不齐,就导致很多人虽然学了 Java,但并没有从事 Java 相关的行业。
现在想起来,不仅为我自己感到遗憾,也为班里面的同学们感到遗憾。我们的专业是学校最不看好的,但却是那个时代最有前景的,十多年的时间也证明了这一点。但大多数人还是因为自身的局限性,以及学校、教师的原因错过了,错过了在 Java 领域叱咤风云的机会。
以前,程序员稀缺,但机会也少;现在,机会多,程序员也多,但真正功底扎实,能解决问题的并不多。每个时代都有每个时代的局限性,那还要学不学 Java 了呢?
当然是要学,并且要学好,做一名真正对社会有贡献的 Java 程序员!
社会上对 Java 的需求量大着呢,远不到饱和的时候。什么时候饱和呢?就是大学不教Java 了,培训班也不输出 Java 程序员了!到这时候,就真的是饱和了!
但有一说一,这是互联网的时代,互联网的时代,就离不开 Java 这门编程语言!我刚去编程语言排行榜(TIOBE,非常权威)截了一张图——关于近 10 年编程语言的变化。
可以看得出,Java 霸占这份榜单很多年,并且还会持续更久。
1)简单易学,老少咸宜。Java 继承了 C++ 语言面向对象的核心技术,舍弃了容易引起错误的指针,移除了运算符重载和多重继承等难以理解的概念,增加了垃圾回收机制,这些大大简化了程序员的开发成本。
2)**跨平台。**任何平台只要安装了 JVM(Java 虚拟机),就能运行 Java 程序。真正实现了“Write once, run anywhere”。
3)丰富的类库。全球约有 900 万名 Java 开发人员,创造了一个充满活力和积极进取的 Java 社区,开源类库非常丰富。借助这些类库可以让开发者避免重复造轮子,不用去关注 Java 底层的开发,只关注业务的实现。
4)广泛使用。据估计,全球范围内有超过 30 亿部设备运行 Java,超过其他任何一种语言。Java 被用于众多全球知名的网站中,包括 http://eBay.com、http://Linkedin.com、http://Amazon.com 和 http://Facebook.com。这一点应该是 Java 屹立不倒的深层次原因吧,大家都在用,才是真的强啊。
5)薪资可观。以北京 Java 程序员工资情况为例,在职友集上得到的结果如下图所示:
可以看出,北京 Java 程序员的平均工资是 ¥21380/月,数据取自 74283 份样本,可信度还是很高的。
所以说,不要犹豫了,Java 程序员这么多了,我是不是应该学别的!有这种想法就很离谱,真正有眼光的人,就是迅速切入战场,让自己成为一名优秀的 Java 工程师,做到不可或缺,既有钱赚,又有前景,它不香吗!
况且,即便是 Java 这门编程语言被淘汰了,又如何!对于我们程序员来说,学的是计算机科学,而不是编程语言,语言只是工具。有了 Java 的编程基础后,再去学任何一门编程语言都能够得心应手。就拿近些年很火的 Go 语言来说吧,有亲爹谷歌的扶持,社区和生态持续良好发展,Go 语言的前途一片光明。 有 Java 基础的程序员去学 Go 的话,真的是很快!
贴一张劝退型的思维导图吧,罗列一下 Java 所涉及的知识点。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j3OPcot0-1655117291503)(https://upload-images.jianshu.io/upload_images/19999858-b2925cc9a825f51d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
参考自 Hollis 的成神之路
这还只是个大纲,随便挑一条支线展开下,你就知道 Java 涉及到的知识点有多少,学校和培训班根本不可能把这些知识全部教给你,它们可能只会教一教 Java 基础方面的知识。
图片内容参考自 Hollis 的成神之路
这下,你再也不会感觉 Java 程序员饱和了吧?不要只顾低头走路,还是要偶尔抬头仰望一下星空,你就知道这个世界有多么的辽阔!
我列一下 Java 基础部分要掌握的知识点吧,可以评估下自己掌握了多少。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
一、Java 简介
Java hello world
Java JVM JRE JDK
Java 变量和字面值
Java 数据类型
Java 操作符
Java 输入输出
Java 表达式 & 语句 & 代码块
Java 注释
二、Java 流程控制
Java if else
Java switch 语句
Java for 循环
Java while 循环
Java break 语句
Java continue 语句
三、Java 数组
Java 数组
多维数组
Java 数组复制
四、Java 面向对象(1)
Java 类和对象
Java 方法
Java 方法重载
Java 构造方法
Java 字符串
Java 访问权限
Java this 关键字
Java final 关键字
Java 递归
Java instanceof 操作符
五、Java 面向对象(2)
Java 继承
Java 方法重写
Java super 关键字
抽象类 & 抽象方法
Java 接口
Java 多态
Java 封装
六、Java 面向对象(3)
嵌套&内部类
Java static 关键字
Java 匿名内部类
Java 单例
Java 枚举类
Java 枚举构造方法
Java 枚举字符串
Java 反射
七、Java 异常处理
Java 异常简介
Java 异常处理
Java try catch
Java throw 和 throws
Java 捕获多个异常
Java try-with-resources
Java 注解
Java 注解类型
Java 日志
Java 断言
八、Java 集合
Java 集合框架
Java 集合接口
Java List 接口
Java ArrayList
Java Vector
Java Stack
九、Java 队列
Java 队列接口
Java 优先级队列
Java 双端队列接口
Java LinkedList
Java 数组队列
Java 阻塞队列接口
Java ArrayBlockingQueue
Java LinkedBlockingQueue
十、Java Map
Java Map 接口
Java HashMap
Java LinkedHashMap
Java WeakHashMap
Java EnumMap
Java SortedMap 接口
Java NavigableMap 接口
Java TreeMap
Java ConcurrentMap 接口
Java ConcurrentHashMap
十一、Java Set
Java Set 接口
Java HashSet
Java EnumSet
Java LinkedHashSet
Java SortedSet 接口
Java NavigableSet 接口
Java TreeSet
Java 集合算法
Java 迭代器接口
Java ListIterator 接口
十二、Java 字节流
Java IO 流简介
Java InputStream
Java OutputStream
Java FileInputStream
Java FileOutputStream
Java ByteArrayInputStream
Java ByteArrayOutputStream
Java ObjectInputStream
Java ObjectOutputStream
Java BufferedInputStream
Java BufferedOutputStream
Java PrintStream
十三、Java 字符流
Java Reader
Java Writer
Java InputStreamReader
Java OutputStreamWriter
Java FileReader
Java FileWriter
Java BufferedReader
Java BufferedWriter
Java StringWriter
Java PrintWriter
十三、Java 并发编程
进程与线
多线程的入门类和接口
线程组和线程优先级
线程的状态及主要转化方法
线程间的通信
重排序和 happens-before
volatile
synchronized 与锁
CAS 与原子操作
AQS
计划任务
Stream 并行计算原理
Frok/Join
通信工具类
CopyOnWrite
并发集合容器
锁接口和类
阻塞队列
线程池原理
这还只是 Java 基础的部分,怎么学呢?推荐《Java 核心技术卷》和《重学 Java 多线程》。当然了,作为一名 Java 后端工程师,要学的内容不只是 Java 这么编程语言本身,还会涉及到其他的知识点,比如说 Spring 的系列框架。甚至可以这么说,没有 Spring 的 Java 项目是不存在的。首先是 SSM(Spring+SpringMVC+MyBatis,企业级应用的必须品)的整合教程,哪怕是已经有了 Spring Boot,SSM 仍然是必学的,能打下更坚实的基础。怎么学呢?我给大家推荐几个 B 站上的优质视频!
SSM框架实战,ssm整合教程
Spring5框架最新版教程(idea版)
2022 最新版 SpringMVC 视频教程
2022 最新版 MyBatis 视频教程
然后是 Spring Boot,我推荐看纯洁的微笑的博客,访问量在千万级别以上,影响了无数的初学者,我个人强烈推荐。
spring-boot - 纯洁的微笑博客
spring-cloud - 纯洁的微笑博客
如果说已经掌握了 Spring、SpringMVC、MyBatis、Spring Boot 等内容,就有能力进行一些真正有用的应用项目开发了。当然了,这还不够,要想不可或缺,还得继续往深处学!
为什么要学习操作系统呢?
第一,面试要考;
第二,无论学习哪门子编程语言,比如说 Java、C/C++,都需要和操作系统打交道,像 Java 中的多线程技术,其实是由操作系统来负责进程和线程管理的;
第三,学习操作系统,还能学到内存分配方面的知识。
我推荐清华大学的《操作系统》课。
操作系统_清华大学(向勇、陈渝)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
计算机是由 CPU、内存、显示器这些设备组成的硬件,但我们大学毕业后,往往从事的是软件方面的开发工作。那怎样才能在硬件和软件之间自由穿梭呢?答案就是学好计算机组成原理。弄明白了计算机的组成原理,也就对整个软件开发有了一个系统的认知,不论是计算机的硬件原理,还是软件架构,都能很好的驾驭,随之而来的,我们的职业发展机会也就更多了。
当今这个时代,没有网络简直无法生存,哪怕是在电梯里的一分钟,我都受不了那种手机没有网络的状态。我们所学的编程知识,如果脱离了网络,将变得毫无意义,因为没有哪个编程语言是要在单机环境下运行的。
无论什么时候,程序=数据结构+算法这种说法都是成立的。数据结构方面的知识,对扎实 Java 的基本功非常有用,学会了就会有一种自带大佬的感觉。
常见的排序算法有:选择排序、冒泡排序、插入排序、快速排序、归并排序、希尔排序、基数排序、计数排序、桶排序、堆排序等等。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
常见的查找算法有:顺序查找、二分查找、插值查找、斐波那契查找、树表查找等等。
常见的算法有:KMP算法、贪心算法、回溯算法、动态规划、递归算法等等。
各大公司的笔试基本都考这个,《剑指 Offer》上的所有题目如果能背下来,LeetCode 刷个一百到三百道题,参加过 ACM 竞赛的也可以。
《剑指 Offer》,指的是《剑指 Offer:名企面试官精讲典型编程题》这本书,里面剖析了 50 个典型的程序员面试题,包括基础知识、代码质量、解题思路、优化效率和综合能力等 5 个方面。
LeetCode,一个在线刷题网站,包含了海量技术面试题,包括算法、数据结构 和 系统设计等 1000+ 题目,能帮助大家快速地提高编程技能,轻松拿下世界知名 IT 企业的梦幻 Offer。LeetCode 上收录了 75 道《剑指 Offer》上的技术面试考题,有位运算、哈希表、堆、字符串、数组、查找、栈和队列、树、递归与循环、链表等多类题目。
ACM 竞赛,由 ACM(
AssociationforComputingMachinery,美国计算机协会)组织,是世界各地计算机程序设计者大显身手的舞台,也是世界一流大学展现教育成果的最佳窗口。
算法题虽然被很多人不屑,就像古代的八股文一样,但企业都这么考,不准备的话,很难不挂!
操作系统、计算机组成原理、计算机网络、数据结构与算法这四方面的基础打牢了,基本上可以说再学习任何一门编程语言都非难事!后面即使 Java 真的饱和了,你再去学一门新的编程语言,也不是什么难事!
对于还在校的学习编程的学弟学妹们,不要担心了,好好学 Java 准没错。另外,我还几句掏心掏肺的话想要 BB。
无论什么时候,找到学习的目标,以及学习的套路都非常的重要。找不到的话,就只能事倍功半,付出了很多努力,却迟迟得不到最好的回报。有句话说得好,学习的时候一定要把自己当成一台计算机,既有输入,也要有输出。只输入不输出会堵塞,只输入不输出会枯竭。
1)要有危机意识
计算机这个行业已经很卷了,对吧?但每年依然有大量的新人涌入,你不刷题,你不下劲,自然就会有人把你甩在身后。想要拿到满意的 offer,最好按照我说的来!该打基础的使劲打!饱和和咱没关系,卷和咱没关系!
2)伟大的牛逼之前总是式的坚持*
你可能会在很多地方看到一些大牛侃侃而谈,似乎他们在吹逼。但要看到他们背后的辛苦,他们背后付出的努力。敲代码是门手艺活,不信看看你键盘上的 ctrl+c 和 ctrl + v,哈哈哈,调皮下~~~~该敲的代码一定要敲,就像卖油翁的故事,唯手熟尔!
3)多看信息密度大、质量高的资料
我之前提到的那些书籍和学习,真正是经过了时间的检验,是一些特别棒的学习资料,学完后真的会很有帮助,如果你手头上还有什么《21 天学会 XXX》,不好意思,扔掉吧!
小伙伴们有兴趣想了解内容和更多相关学习资料后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!回复【000】即可免费获取