从编程语言角度来看,首先你需要掌握 Java,但是想要成为一个好的工程师,应该要学会的不仅仅的是这一门语言,应该掌握多种语言解决问题。例如 C 语言,如今这个世界上,几乎所有的软件都直接或者间接与 C 语言存在联系,例如,操作系统、网络、驱动等。还有 C++,现在主流的浏览器、数据库以及游戏引擎等都是用 C++ 搞的。当然了,还有现在比较火热的 Go 语言。Go 语言基本已经成为云计算领域事实上的标准语言,例如 Docker 、k8s 这些项目中有非常多的应用。

当然了既然谈到了 Java,那么对于 Java 虚拟机的掌握也是必不可少的,因为是否熟悉 JVM 决定了你是否能够真正的理解 Java。

如果说编程语言是招式,那数据结构与算法就是内功心法。数据结构与算法解决的是如何对这个世界进行建模,如何对问题进行抽象,如何将问题的复杂度进行控制。无论是做业务还是做底层系统,经常需要使用算法处理各种各样的问题,例如数据库的索引, Linux 系统的 epoll 的红黑树,Java 的各种集合框架的选择等等,这些都需要用算法来解决。

计算机基础架构主要分为三大块,操作系统代表计算,数据库系统代表存储,计算机网络代表网络。一个好的程序员或者说工程师,必须对计算机有深入了解。想要了解计算机是如何计算的,则需要理解操作系统的基本原理,包括进程、线程、存储管理、文件系统等等;想要了解数据是如何存储的,则需要了解数据库的基本原理,例如数据库索引、数据库存储引擎、数据库编解码以及数据库事务等;想要了解计算机网络是如何工作的,则需要了解计算机协议,例如 TCP、IP以及HTTP 等协议。

既然选择了 Java 技术栈,那以 Spring 为核心的各种框架就必不可少了,例如 Spring、Spring Boot、Spring Cloud、MyBatis 等等,这些都是快速构建 Web 应用的大杀器。

如果你想成为一个优秀的程序员,那么软件设计是你的必修课。学习软件设计的解百纳方法、理念和模式,是你从一个程序员通向工程师的必备技能。如果你不懂这些设计方法,那么你将无法做出有些的软件,你就无法成为一个有“品味”的工程师。

综上所述,如果你想在 Java 这条路上走远,那么你不仅得学会 Java 这个招式,而且你得掌握算法这个内功,只有内外结合,你才能真正走远。