Once you have enough grasp of Core Java, it is important to go beyond the basics and learn how to solve real problems.
Let's look at the tools which you are likely to use 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
Saved the best for the last.
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
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.
You can find more about me at bio.link/abh1navv
Did you find this article valuable?
Support Abhinav Pandey by becoming a sponsor. Any amount is appreciated!