Skill Areas for Becoming an Enterprise Java Developer.

So, what does it take to become an enterprise Java developer?  In my experience, there are a few skill areas that need to come together for a "legacy" developer to migrate to the world of enterprise Java development:
  • Programming the Java2 Standard Edition (J2SE) [32-40 hrs].  This covers the basic constructs of Java. This is typically a 4-5 day course from a training vendor or a 1 semester course at a college.  Some of the basic syntax of Java has a lot in common with C, C++, Visual Basic, etc so many vendors offer a "Java for non-C/C++ Developers" and a "Java for C/C++ Developers" option - the latter going thru this common syntax more quickly.  Developers who have only worked in COBOL, FORTRAN, etc. should take the "non-C/C++" option.  Developers need to have a solid base of skill in J2SE before they attempt J2EE - doing the two back-to-back is, in most cases, a waste of time and even counter-productive. Java is not just a language but a very large set of pre-built software (how to implement a calendar, how to store and sort data, etc.) and it is also important to learn early on how to use these libraries to avoid writing everything "from scratch".
  • Fundamentals of Object-Oriented Analysis and Design (OOAD/UML) [32-40 hrs]. Java is an object-oriented language and you can't get very far without a solid understanding of OO.  For example, the documentation for the J2SE and J2EE class libraries makes frequent use of the vocabulary of OO - private data members, observer patterns, inheritance, etc. Increasingly the dominant enterprise Java IDEs rely upon UML graphical symbols to edit, revise, manage, etc. the code and if you don't know what a filled in diamond means (composition) then it is hard to get very far
  • Programming the Java2 Enterprise Edition (J2EE) [32-40 hrs].  This covers the technologies in the enterprise edition of Java that builds upon the standard edition.  This should give you a good overview to the various J2EE technologies such as servlets, Java Server Pages, Enterprise Java Beans, etc.  J2EE provides by design alternative options for accomplishing the same thing and it is important to develop early on some understanding about those options and their relative trade-offs.  It is important to walk into the J2EE with a solid understanding of the J2SE because the API to the J2EE assumes some skill with the idioms, metaphors, etc. of the J2SE and you can't get much past copying and small-scale adaptation of code examples in a book without understanding those idioms.  
  • Specialty courses in J2EE technologies [8-24 hrs each].  The breadth of the J2EE is too broad, too complex, for a person to become adept in all of them - certainly not quickly (i.e. a 32-40hr introductory J2EE course).  Most developers align their selections here according to their general career goals and interests - an emphasis on web development aligns to servlets and JSPs, an emphasis on enterprise data systems aligns to EJBs and JDBC.  Some of this aligns to the partnerships your company has with the various vendors - you learn WebSphere if you are an IBM shop, learn JDeveloper if an Oracle shop, etc.
  • Tools courses [8-24 hrs each].  Developers often start with the tools - that can work but often that leads to more initial motion than eventual progress in developing enterprise Java skill. For one thing, much of what tools to is provide a mechanism to work with certain features of Java - if you don't know those yet learning about those tool capabilities doesn't do much for you.  The other problem with starting with tools is that each vendor of a tool has a vested interest in getting developers "stuck" on their tool - if you only know how to create an EJB using their "wizard", and not how to code one from hand, then it is easier to force you to stick with their tool.  This skill area should include one of the high-end Java IDEs - Eclipse (or the IBM variants), NetBeans (or the SUN studio variants), etc.   This should also include one of the OOAD/UML modeling tools - IBM/Rational (mostly based on Eclipse), Borland/Together, etc.  Everyone needs to learn how to use Ant (to script setup, testing, compiling, etc.) and  JUnit (for unit testing) - these tools own this space and even the commercial alternatives are almost all re-brands of these open-source tools.
The hours estimates are for commercial courses but about the same if you take courses from a college.  Self-study depends upon a few factors but should be about the same.... or longer since it is harder to focus and saturate on the material doing it on an ad hoc basis.
SUN publishes tutorials for the J2SE and the  J2EE - both are available on-line or in conventional book.  SUN also publishes specialty tutorials in some of the specialty Java technologies (e.g. JDBC) - format availability varies. One can learn UML from the UML User Guide (not the Reference Guide) but for self-study I recommend UML Distilled as more focused.  For the tools, options vary widely - there is a great paperback tutorial for Rose and the help system for Ant is great but for some tools it can be harder (or more expensive) to find good tutorials. 
How long all of this will take you is hard to predict.  The attrition rate is pretty high for people who try to do this all back-to-back in one of the Java developer "boot camps" offered by some vendors - an expensive and not very attractive option.  The record of success is much higher for company-sponsored "immersion" programs or apprenticeships that co-mingle hands-on work experience with instruction - these usually last 4-6 months but you have to be at a company that offers this.   Some people are able to pursue a combination of self-study with on-the-job training.  The realities of demand in many companies, cities, industries, etc. makes this possible - even if it is a little scary to think of someone working on a high-value enterprise system while learning the tools they need at the same time OJT.  With a mix of coursework (commercial training vendor or college) and work opportunities, a person can become pretty good at enterprise Java in 1-2 years.  Finally, some people have only ad hoc opportunities on their own time to try and come "up to speed" on this.  Sadly, the probability of much career impact is very low - with training too spread out and without reinforcement by work experience it just takes too long to learn too little to have much impact.
Visit my list of links at for links to references, tools, etc. - Brian

No comments: