Once you have enough grasp of Core Java, it is important to go beyond the basics and learn how to solve real problems.
Here is a list of tools that will help you on your path as a Java developer.
Unit testing is a widely adopted practice and is a must-have skill for Java developers
- Junit -the underlying default framework for unit testing
- Mockito/PowerMock- built on top of JUnit to make things easier and enable testing of complex scenarios
Calling other Web Services
It's highly likely that you will need to call web services (APIs) from the Internet or your own internal services.
- JAX-WS/JAX-RS - for simple requests and for understanding the fundamentals
- Apache HttpClient - for rich features
In actual applications, it is recommended to maintain log files for easy analysis
- SLF4J - abstraction which provides the logging API - what you will use in code
- Log4J - one of the implementations of SLF4J - configurable and takes care of things in the backend
Work with Databases
You need to interact with databases of all kinds.
- JDBC - a driver to connect with DBs and execute queries
- JPA - abstract API to map data between databases and Java Objects
- Hibernate - an implementation of JPA for relational DBs
- Each non-relational DB may provide its own driver and library
- Some non-relational DBs are also supported by implementations of latest versions of JPA. For e.g. MongoDB and Neo4J
Working with JSONs
JSON is the most popular data transfer format across languages and frameworks. Operations with JSON like serialization/deserialization (converting from Java Object to JSON and vice-versa) is a common use case.
- Jackson is the best choice. In fact, it is the most popular Java library.
- Gson is another popular option
Dependency management and build tools
Any Java application will depend on multiple libraries outside the Java standard library.
To manage these dependencies and to package your application into an executable file, build tools
Working with an IDE
It's hard to develop Java applications using a text editor and a terminal (not impossible though)
To increase your productivity and speed and to make common tasks simpler, it is good to be familiar with an IDE of your choice.
Most popular options
Java had very less containerization need to begin with but its Write Once Run Anywhere capability has been enhanced by the latest developments in containerization technologies.
Using Docker with Java applications is easy and a great skill to have.
General Purpose libraries
- There are two widely used general purpose libraries which make all of our Core Java tasks easier and help with some of the activities listed above.
Don't learn these separately. Just use them in your applications.
- Apache Commons
Building websites and APIs with Spring and SpringBoot
Saved the best for the last. Spring is the most popular Java framework.
It helps with almost everything you will need and makes each and every task easier.
Its common use case is for building APIs which makes it the de-facto standard for building microservices
Another use case is building websites.
Spring uses the model-view-controller pattern
- Model - define and work with Data Model
- View - plug-in a frontend framework to create and return web pages
- Controller - entrypoint for page or API requests
Another development around Spring was the introduction of Spring Boot - A framework to bootstrap Spring projects and to provide easier configuration.
With Spring Boot, you can save yourself a lot of boilerplate work and focus on the core of your development.
Other honorable mentions
- Apache Commons Codec - basic crypto operations
- JMS/RabbitMQ/Kafka - messaging between applications
- Move on to Kotlin for Android development
- JAX-B - working with XML
- Internationalization - to create multilingual websites
Most of these tools have a small learning curve. Maven/Gradle, Unit testing and Spring will need some extra effort and you will get better with practice.
If you're new to all of them, I recommend starting with Spring at the center and connecting the dots with others.
Thanks for sticking with me for so long. I hope this gives you a path to follow to become an efficient Java developer.
Find ways to connect with me at http://bio.link/abh1navv
Top comments (2)
Interesting article Abhinav. Thanks for sharing it with the community. Bookmarked!
Glad you liked it Nishchya!