平时经常能听到一些同学困惑,“面试造火箭,天天拧螺丝”,每天进行重复的业务开发,似乎自己的能力被日常工作限制,无法突破提高自己的能力水平。我想说,难道懂得如何造火箭,还能没有实际价值吗?它的价值在于,当真的出现不可预测的、具有挑战性的任务时,你能不能
Hold 住。那么关于Java工程师的成长路线是什么呢?又给如何找到自己所处的能力水平,通过学习和实践实现进阶呢?
一、新手
如果你是新手阶段,全面、扎实地掌握语言的基本要素是当务之急。在这个阶段我认为是有无限可能的,因此我并不建议完全用《Java 核心技术面试精讲》专栏作为
Java 语言入门的课程,而是更应该找到更基础的、系统的 Java 书籍或者课程。
你可以在正规的指导(比如进行培训)飞速进步,并培养出良好的编码习惯。然后可以再结合专栏,看看 Java
技术领域典型的、长期的热点话题,了解业界通常从哪些角度判断你的能力和水平。你还可以从专栏的基础模块,看到 Java 领域长期的热点话题,增长自我见识。
二、高级新手
工作了几年,整天忙于业务代码,很容易困惑下一步的方向在哪里,相当多的程序员长期停留在高级新手的阶段。一个常见的表现就是发展成为了“面向搜索引擎”编程工程师,擅长快速利用开源项目或者以往成果,完成一些“OK”的工程任务。这本无可厚非,职业路线很多,未必每个人都想成为底层专家。
但是,如果想在技术领域更进一步,一定要避免下面两个问题。面对没见过的、一定规模的或者较高标准的问题时无所适从,具体表现为“领导,你看这样行吗?”。没做过互联网高并发应用,难道就不能对并发编程有相对深入的思考吗?比如,习惯了使用
Executors,你有没有思考过不同的线程池到底适合什么场景?当前的实现在未来业务量增长下可能出现什么问题?
无法独立提供有说服力的、有深度的分析、设计和实现,比如业务系统运行一段时间就变慢,调整 Heap 大小,似乎仍然
OOM。目前团队处理的方式就是重启服务器,有没有想过去发掘真正的原因,真正去解决它?
三、胜任者
那如何才能算是摆脱了高级新手的阶段呢?或者换句话说,如何成长为团队的核心成员?这取决于你能背多大的锅、填多大的坑,比如你已经可以:
独立负责做 GC 调优,即使没有历史经验,也能给出有说服力的方案。在 JVM
领域有充足的技术经验和知识储备,全面评估评估后台变慢等问题的复杂度、风险点、解决的可能性。对于所谓本质的思考和理解,能听懂深入的抽象观点。并且,除了
Java/JVM,还要掌握更完整的技能树,例如分布式系统设计、数据库隔离级别选型等。
掌握将“OK”的事情做到“excellent”程度的能力,不断地进行高效实践、领域的扩展和精深,我们就可以达到并超过胜任者,逐步成为精通者和专家。