翻译了一篇国外学习建议的文章,希望读者可以受到启发。点击查看原文。文中涉及到的书籍和课程链接是国外购买的网址。此外,欢迎关注本人博客和Github。
前言
想要新年一开始就有个好计划吗?这里有一些建议可以使你成为一个更好的Java开发者,包括Java性能调优、Spring Security 5.0等方面。
首先,祝你们新的一年快乐。每当新的一年开始,我们都会制定计划、建立目标或者思考一些解决方法。
成为一个Java开发者和《Java blog》的作者之后,我经常收到全世界Java开发者的一些咨询:如何可以提升他们的能力。
之前,我分享过我的一篇文章《10 tips to become a better programmer》(《10条关于如何成为更好的开发者的建议》),文章中每条建议现在看来都还未过时,但是既然是新的一年了,我还是觉得写一些建议给那些愿意提高自己的Java开发者,从而帮助他们增加Java编程的知识和职业生涯中的个人价值。
不废话了,让我们看看是哪9条建议吧。你可以参考这些建议,然后确定适合自己的n个小目标。
学习Java性能调优
在过去的几年里,我访谈了50多位高级Java开发人员,通过交谈发现,这些人员最缺少的知识之一就是对于Java虚拟机内部机制、GC原理和Java性能调优的了解。
JVM结构 随着你经验的增长,你将成为一个具有5到6年经验的高级Java开发人员,此时,你应该具备对Java基本原理的宏观理解,并能知晓各个实现的细节。
如果你不能够优化你的应用,具体来说是你无法弄清楚知晓应用为什么跑的那么慢?它的瓶颈在哪里?如何进行优化?那你需要阅读一些关于Java虚拟机原理和新性能调优方面的书籍。例如:Scott Oaks的名著《Java Performance the Definitive Guide》(Java权威性能手册)。
这本书我这几年都在读,只要一有空就会打开来看看,今年还准备再读一次。
如果你比较喜欢在线课程的话,我建议你可以看一下在Pluarlsight网站上的《Understanding the Java Virtual Machine 》课程,这个课程解释了内存管理、类加载、安全机制、反射等内容。
每天编程2小时
去年我注意到的另外一件事是:随着你经验的增加,你会花很多的时间在沟通协调、回复邮件、解决问题纠纷、指导工作上面,通常来说你已经成了一个项目经理。
除了这些事情,你忘记了程序员最重要的一个技能,就是编程。
如果你觉得你写的代码还不够,那你得想个办法每天写点代码。或者至少写点东西,让它成为你项目的一部分,或者是一个开源的框架,或者是一个开发包,或者是一个开发工具,等等。
万事开头难,我建以你克服阻力,开始阅读和重构代码来获得快乐。在过程中,你会得到享受并且也会开始写些代码。
你也可以阅读《Cracking the Coding Interview, 150 Programming Questions》。这不仅可以让你做好面试准备,也可以提高多数据结构、算法和编程逻辑的理解。
每个月都对Java应用做一次优化
这个方法需要和第一个方法(读一些Java虚拟机和性能调优方面好的书籍)相结合。光读书是不够的,你需要将学到的知识应用到你的项目中去。
我建议你至少每个月都对Java应用进行一次优化,并且要花足够的时间去分析和理解优化的结果。
例如,如果你的程序最近奔溃过,你可以将Java堆状况导出,然后分析:哪个对象占用的内存最大?在你的项目中是否存在内存泄露?
现象的原因是啥?当有超过10万个客户端链接你的服务是会发生什么?如果你可以回答这些问题,那么你干的不错。如果你需要一些关于解决内存和CPU问题的指导,那么我建议你可以看一下Richard Warburton写的《Understanding and Solving Java Memory Problems》。
参加编码挑战
这个建议和第二个建议(每天编程2小时)相关。事实上,有时你在当前的工作中无法获得足够的挑战。
如果渴望编程挑战,那么参加相关编程挑战的比赛就再好不过了。
网上有很多编程网站可以给你锻炼和测试的机会,其中比较推荐的是TopCoder。
如果你在寻找一些困难的编程挑战,那么你可以查看我之前写的一个关于在线编程网站的列表。
学习Java网络编程
我交流过程中发现的一点是:Java开发者需要提高他们的socket编程能力和网络基础。
我从网络编程问题列表中挑选了一些问题进行询问,但是很多开发者很多问题都没有回答好。
他们中的一些甚至还需要去了解TCP和UDP的差别。这个问题我认为对于有2到5年的Java开发者来说已经太基础了,甚至没有问的必要。
如果你觉得你没有获得足够的机会去学习网络编程,或者你是一个和JSP、Servlet、JSF打交道的Java Web开发者,那么我建议你至少看一下Java网络、NIO、socket编程方面的一本好书。
一本值得推荐的书是《TCP/IP Sockets in Java, Second Edition, Practical Guide for Programmers》。这本书易读、有趣,是一个学习socket编程基础的好途径。
Java 9
2017年有一些重大的发布,其中之一就是JDK 9。2018年,我第一件事就是准备研究一下JDK 9。如果你想要了解Java 9的一些新特性,包括:Jigsaw、Reactive Streams、API改进等等,那么《Java 9 MasterClass》课程是个不错的开始。
Spring 5.0
Java业界另一个比较大的发布是Spring Framework 5.0。Spring 5.0带来了很多振奋人心的新特性,包括:响应式函数编程模型,采用了Java 8 和 9 的新特性等。
在2018年,Spring 5.0的发展将会提速,这也是值得每个Java开发者需要学习的原因。如果你需要一些指导,那么《Spring 5.0: Beginner to Guru》课程将是不错的选择。
Spring Security 5.0
2017年另一个有趣的发布是Spring Security 5.0,这也是我在2018年将要学习的一个内容。Spring Security 5.0是一个重要的发布版本,开发人员重写了很多模块,并且修复乐上百个bug。其中比较有意思的一个部分是OAuth 2.0模块。遗憾的是,目前没有特别多的资料来学习Spring Security 5.0。值得庆幸的是,Eugen 更新了他的课程《Learn Spring Security》,包含了版本5.0以及OAuth 2.0模块。
单元测试
如果你想在2018年更上一层楼,那么你需要继续提高你的单元测试技巧。这里的测试不仅仅是指单元测试,而且包括通常说的自动化测试,当然也包括集成测试。你可以学习JUnit5以及一些其它比较高级的单元测试库,例如:Mockito、 PowerMock、Cucumber、Robot 等,从而使你的测试能力提高一个等级。Mockito功能非常强大,可以通过模拟依赖帮助你对一个复杂的对象进行测试。如果你刚刚接触单元测试并且希望在2018年进行学习,那么Udemy 的课程《JUnit and Mockito Crash Course》是个不错的选择。
总结
这只是我的一些建议。如果你从事Java开发有些年头了,那么你可以参考这些要点制定自己的目标。比如,你还可以添加Android、Docker、Spark等条目,因为这些对于Java开发者也很重要。
我之所以将这些目标制定的简单并容易实现,是因为我个人认为巨大的进步是有一点一点的小进步堆积而成的。设置小目标表比大目标更容易实现,往往一些大目标在制定的时候就已经注定无法实现。
所以,你还在等什么那?写下你新年的目标并和我们分享。等这一年结束,你可以再过来看看,告诉我们多少目标你已经达成。
网友评论