1. OOPs concepts – Java is a object oriented language so without learning about OOPs you are not a java developer.
- So a java software engineer should be very very clear about class, Object, Encapsulation and Abstraction, Inheritance and Polymorphism.
- At any given point of time you should be able to explain these concepts and also reiterate how they are ingrained in java.
2. Core Java – This goes without saying, a java engineer should be an expert in core java language and should constantly be aware of new concepts and changes that take place in Java. So keep learning core java folks, you can only know so much.
3. JVM – As you grow as a senior developer, knowledge about JVM becomes a must.
- It helps you in writing better and more efficient code.
- Makes you programs faster through JVM tuning.
- Adds awesome tools for debugging problems like memory leak.
4. Servlet and JSP – Servlets and JSPs form building blocks of all the modern java web framework. So even if you don’t use these directly, learning them is a must for sake of understanding, better programming and debugging.
5. Database – You are writing a web application 99% of time you will be persisting data and getting it back for processing and displaying. So you should have knowledge about at-least one database. You should also know how to write database queries and tuning them in case need arise.
6. JDBC – Now most of the development house uses an ORM tools for their database connectivity needs but still as a java developer you should learn JDBC here is why
- Many legacy application still uses JDBC.
- Using JDBC is simpler for more complicated problem. So you can you use a mixture of solution, jdbc for complicated queries and ORM for simpler CRUD processes.
- Last but not the least JDBC is the standard java api for connecting and working with database. It is easy to learn and provides us with basic understanding as to how java interacts with database. Even ORMs use JDBC internally to connect to database. So it is imperative that we learn JDBC.
7. ORM – Even though we should learn JDBC, most of the development houses use ORM tools now a days.
Examples of ORM – Hibernate, iBatis/MyBatis, JDO, JPA, Cayenne etc
- They are a wrapper over JDBC and hence they reduces amount of code to be written for connecting and working with database.
- ORM stands for Object Relational Mapping. It helps us working directly with objects ie, database results are directly stored in object and object is directly persisted in database. So our code becomes more object oriented we are saved the effort of mapping an object with database columns.
- Makes repetitive CRUD operations a breeze.
- Most ORMs supports transactions, caching and concurrency hence we don’t have to write extra code to support these as is required in JDBC.
- Easily unit tested.
8. Spring Framework – Learn Spring period. Foundation of Spring is based on decoupling and dependency injection. Two of the most basic OOPs design princeples. So learning and applying Spring in your project makes your code decoupled and more reusable. These two reasons are enough to use Spring in your project. Apart from this Spring Framework comes with plethora of libraries and projects which can easily be plugged with your project and make your development breeze. No wonder spring has emerged as one of the most important technologies in java world and almost all software team uses it. So all the java developers should learn spring.
9. Web Framework – We have wide varieties of Web Framework available.
Examples are struts, Spring MVC, struts 2, Tapestry etc.
It is necessary that we learn at-least one of these frameworks.
- Framework streamlines our development efforts and makes development easy and cost effective
- They help us in following best practices.
- Enables code reuse.
- Help entire team in writing code in similar style.
10. Unit Testing – Unit testing code is a must in current agile world. The development, testing and deployment happens at a very fast rate. Unit testing makes our code less prone to bugs. It gives us confidence that our code is bug free and we can freely commit our code. Examples are Junit, Junit Perf, HttpUnit, MockObject, Cactus.
11. Mimalistic UML – This is completely my view and I know it will draw lots of criticism. In agile methods we follow a minimalist design approach. This means that we design to an extent which allows us to capture the essence of our product architecture. In this scenario, shall we learn UML which is a complex framework and can be used to capture the design exhaustively? I have often found that I can get away by knowing Class Diagram and to some extent sequence diagram. So as a developer we should learn some part of UML which can help us to convey our ideas in bare but efficient ways. Knowing Class Diagram is a must and it can topped by knowing the sequence diagram.
Note : Use Cases etc are handled using story boards now a days.
Learn about minimalistic design here
12. Design Pattern – Without Design patterns knowledge we are only half the developer we can be or even less. Learning design patterns can be a daunting task, and applying them can be even more difficult. But this should not deter us from acquiring the knowledge. Learn a couple of patterns and think where you can apply them while coding. Once you find a place to apply, create a write up and a class diagram for the same. You can start with one or two pattern per month. It is no use to mug up patterns as you will be lost if you don’t understand the intent and application of the pattern. I have often found myself using these patterns
- Factory Pattern.
- Abstract Factory.
These can be a good starting point for any young developers.
13. SOLID Design Principles – What kind of programmers would be if you don’t understand SOLID design principles. So go ahead read about them and understand them and use them like a checklist while designing and writing your code.
Learn more here.
14. Object Caching Frameworks– If you are writing a highly scalable web application then at some point you will require a Object Caching Framework. There are many caching framework available in market. Lots of them are open source and very mature. Examples are memcache, ehcache, OSCache, JCS, and tons more. Choose one of them learn what are they and how to use them. My Favorite is Memcache.
15. Cloud Computing – Age of Cloud Computing is upon us. So any aspiring developers should have their basics right. Learn what is cloud computing, its layers, cloud players. If possible get a hands on work shop on any of cloud platform like AWS or Azure.
16. BigData, NoSQL, Hadoop – I have clubbed these together as all are linked and many times talked about in same frame. The systems today generate more and more data and they need to be persisted, processed, accessed and made sense of. These are some of the concepts and tools you will have to acquire as you grow.
18. Agile methods – Most of the development house of today are increasingly turning agile. The most popular processes they follow are
- Pair programming
- Continuous Integration.
As a developer you should study about these concept and try to understand the processes set up by the team management. They are awesome and definitely helps in creation of a better product.
This is a handful list. It takes a while before you will start to get a hang of things in Java. So now we see that journey to becoming an awesome java developer is not an easy task, you need to keep on learning new and new things. Only after hard work and perseverance can you reach a point when you can say that I am a awesome Java Engineer. Even then you will see new tools coming into light and becoming relevant. The process of learning is everlasting and you should aim of learning one tool/technology per month.
This is by no means an exhaustive list and hence I apologize in advance if I miss have somethings. Please drop me a line or two to make this article better.