In any technology say Java or some other language, it is more important and valuable to know the language fundamentals thoroughly (OOP concepts, interfaces, class, objects, threading etc.) rather than specific frameworks or syntax. It's always easy to quickly learn new technologies when you master the fundamentals.
Java developers knowledge expectation changes based on the profile. In this post I have divided it into 3 profiles:
- College Graduate,
- Experienced Java Developer,
- Experienced Java Web Developer.
If you are a college graduate with no job experience then as a Java developer you need to understand the following basic things.
- How Java Virtual Machine works? e.g. (Platform Independence, Garbage Collection, class files etc)
- What are the Object Oriented Programming Concepts Implemented in Java?
- Java Collection framework
- Good understanding of data types and few java.lang classes like String, Math, System etc. java.io stream concepts.
- Understand concept of Swing/AWT event based programming.
- Servlets & JSP concepts.
If you are a experienced professional then as a Java developer you may also need to understand the following basic things in addition to the ones listed above.
- Understand design patterns and its usage in Java
- Improvements on language from major version changes (Generics, Annotations, Enums, ...).
- Coding Conventions.
- Build tool (Ant) or Project Management Tool (Maven).
- Version control System like CVS/SVN/Perforce/Clearcase.
- Apache Commons Libraries & few other common open source libraries.
- Continuous Integration Tools and Unit testing.
- Fundamental understanding of XML
- Understand Business layer frameworks - like Spring
If you are a experienced professional working on Web based development then as a JEE developer you also need to understand the following basic things in addition to the ones (7+9) listed above.
- Understanding of MVC Frameworks - Open source J2EE frameworks like - Struts, Webwork, Spring MVC, Tapestry.
- Fundamental understanding of Web Services.
- Good understanding of Web/Application server like Tomcat, Glassfish, WebLogic, WebSphere, Jetty etc.
- Unix environment - A working knowledge of Unix environment can be beneficial as most of the Java servers are hosted on Unix based environment in production.
Looking at the list of things it really feels difficult for a person to know each and everything in depth. As I already said it is more important and valuable to know the language fundamentals thoroughly and rest can be learned quickly when required.
Can you think of something which is not part of this post? Please don't forget to share it with me in comments section & I will try to include it in the list.