大家好,我是极客时间 《Java 核心技术 36 讲》 作者、前 Oracle 首席工程师杨晓峰,今天,我想借自己的经历,跟大家分享 Java 工程师从新手进阶到专家的路线图是什么?有哪些阶段?每一阶段又该掌握哪些技能?
我经常能听到一些同学困惑,“面试造火箭,天天拧螺丝”,每天进行重复的业务开发,似乎自己的能力被日常工作限制,无法突破提高自己的能力水平。
我想说, 难道懂得如何造火箭,还能没有实际价值吗? 它的价值在于,当真的出现不可预测的、具有挑战性的任务时,你能不能 Hold 住。
举个真实的例子,前段时间周末,我被着急拉去优化一个 Go 语言开发的系统,马上要上线了但实际吞吐量与需求有数量级差距。对,你没看错,不是 Java 应用,而且我对 Go 的了解基本就是 HelloWorld 水平。下面我简单介绍一下,如何利用基础知识,快速定位问题,并通过两个代码量有限地修改,实现吞吐量的数量级提高。
这个问题本身难度并不是很高,使用的也是基础知识和技能,但也能说明掌握扎实的“基本功”,可以让你剥开问题的表象,感受到技术本质的价值所在。
但是,我发现很多技术人不具备这种“解决问题”的能力,我觉得主要是以下 2 个原因:
我去年在极客时间推出的 《Java 核心技术 36 讲》 专栏,就是希望可以让你可以透过问题看到本质,提高“解决问题”能力。在专栏里,我从 Java 核心知识点和能力 出发,精选出 36 道 Java 面试题。每期针对 1 道题目,不仅会给出 典型回答和考点分析,还会剖析 Java 核心知识点,将其讲清讲透,让你彻底领悟题目背后所考察的能力,帮你梳理复习 Java 知识体系。 不管你是在准备面试、还是想进阶 Java,你都可以通过这个专栏,提升 Java 技能。
“德雷福斯模型”是一个常见的能力、水平划分方法,我们可以试着把 Java 工程师划分为新手、高级新手、胜任者、精通者和专家。
那如何找到自己所处的能力水平,通过学习和实践实现进阶呢?
如果你是新手阶段,全面、扎实地掌握语言的基本要素是当务之急。在这个阶段我认为是有无限可能的,因此我并不建议完全用《Java 核心技术 36 讲》专栏作为 Java 语言入门的课程,而是更应该找到更基础的、系统的 Java 书籍或者课程。
你可以在正规的指导下飞速进步,并培养出良好的编码习惯。然后可以再结合专栏,看看 Java 技术领域典型的、长期的热点话题,了解业界通常从哪些角度判断你的能力和水平。
你可以从专栏的基础模块,看到 Java 领域长期的热点话题(十年前面试就会问,一直问到今天),比如:
工作了几年,整天忙于业务代码,很容易困惑下一步的方向在哪里,相当多的程序员长期停留在 高级新手 的阶段。一个常见的表现就是发展成为了“面向搜索引擎”编程工程师,擅长快速利用开源项目或者以往成果,完成一些“OK”的工程任务。这本无可厚非,职业路线很多,未必每个人都想成为底层专家。
但是,如果想在技术领域更进一步,一定要避免下面两个问题。
我建议不要满足于这些表面的特征,要学会 用白盒的视角看待技术内部,系统性的思路掌握普遍规律。 即使未来你不在一线编码,或者未来不再使用 Java,同样的思维习惯和积累也是很有帮助的。
那如何才能算是摆脱了高级新手的阶段呢?或者换句话说, 如何成长为团队的核心成员? 这取决于你能背多大的锅、填多大的坑,比如你已经可以:
并且,除了 Java/JVM,还要掌握更完整的技能树,例如分布式系统设计、数据库隔离级别选型等。
其实, 《Java 核心技术 36 讲》 专栏的内容也是为了提醒胜任者,在实际工作中往往不会界限分明,团队核心往往要能够 Hold 住不同技术领域、切换不同角色,比如架构设计、核心代码开发、紧急线上问题攻关等。
掌握将“OK”的事情做到“excellent”程度的能力,不断地进行高效实践、领域的扩展和精深,我们就可以达到并超过胜任者,逐步成为精通者和专家。
如果你已经精通 Java 语言或者是特定领域的专家了,那这个专栏对你的帮助可能体现在不同角度,可以当作特定领域的、不同视角吧。例如,在这个阶段,精通者或专家能够:
专栏订阅量稳居极客时间 Top 3,好评多多,部分如下: