You don’t want to build your programming career on dynamic languages alone, but you find C++ too messy, C# too proprietary, Delphi too underpowered, and D too esoteric? Java is your friend. Not only does Java top the TCPI list of most popular programming languages, it also offers an established framework for everything from mobile application programming to enterprise development. Moreover, it is designed as a cross-platform language from the outset. The “write once, run everywhere” philosophy isn’t a mere vision, or an overly optimistic design goal. With Java it is a reality. The greatest appeal of Java, however, may be its extremely solid software engineering foundation.
Everything in the Java world, from programming paradigms, code conventions, documentation to unit tests and build systems is standardised. These standards are applied industry-wide; they come as part of the package, and they are supported worldwide by the Java community. Programmers are almost forced to write maintainable, extensible, reusable, and well-documented code with Java. This is something that many other development platforms claim to achieve, but often fail to deliver. Naturally, the solid software engineering foundation that Java offers comes at a cost. The cost is complexity.
If you are new to Java and eager to learn the language, you are well advised to allocate ample time to the learning process. Despite what some book titles claim, and what might be your experience with scripting languages, Java cannot be learnt in 24 hours. Other book titles suggest “Java in 21 days”, which is somewhat more realistic. Since Java has acquired important new features in version 5.0, e.g. enums, annotations, generics, a month is probably needed to become familiar with the basics, more if you are also new to the object-oriented programming paradigm.
“Okay, yet this would be the same for C++ or any other statically typed OOP language,” you say. Yes, but Java is more than a language. It is a platform. It consists of dozens of development tools, hundreds of APIs, and thousands of classes that do everything from database access to 2D rendering. Sun has illustrated this neatly in its SDK documentation, where the Java SE platform is depicted as a brick wall, every brick representing a major API or technology. The Java language itself composes only the uppermost layer of the wall. Extrapolating the time it requires to learn Java, a year seems reasonable to become familiar with each and every of the pictured Java SE components.
And this is merely the beginning. We haven’t yet touched upon enterprise development with Java EE, e.g. Enterprise Java Beans, web development with JSP/Servlets, XML, web services, and so on. We also did not mention third party tools and systems, such as Java IDEs, Ant, JUnit, Tomcat, Jboss, Hibernate, Struts, and what else belongs to the advanced Java programmer’s toolkit. From this it becomes clear that climbing mount Java is an extensive journey that requires significant efforts. Mastering the platform is something that probably takes several years of continued education and practice. Hopefully, this does not discourage newcomers. The rewards, I believe, are substantial.
So what’s a good starting point? Close to the source, namely on Sun’s own homepage, there is the indispensable JDK/Java SE documentation, which was already mentioned. Sun also offers a highly usable tutorial, which features general as well as specialised trails and topics. For those interested in Java training and certification, there are two excellent web sites, www.javaranch.com and www.javablackbelt.com. These sites offer copious training material; they are a beacon for newcomers. Finally, there is a plethora of Java books on the market. For a beginner, a combination of a reference (“Java in a Nutshell”, David Flanagan), introductory text (“Head First Java”, Sierra and Bates) and a cook book (“Effective Java Programming Language Guide”, Joshua Bloch) probably makes sense.