"Where has FLiP been all my life? When I was listening to you, I thought, 'This seems absolutely right, but it's a message I don't much hear from anyone.' Anyway, I can't wait to FLiP out at my work." - Sue M
"Amazing. It completely changed the way I think about coding." - Cesar F
"As a trainer myself, I thought you did a fantastic job making sure that the advanced students got what they needed without leaving the more junior ones adrift. Well done!" - Martin B
Sure, *you* want to learn Java: it makes your code faster, more robust, and more flexible. But what about your company? As a friend of mine says, "we're all listening to WII-FM". As in "What's In It For Me?" If you're asking your manager to approve training, s/he needs to know that there's a better reason than what's in it for you. Here are ten reasons I think Java expertise is important for companies.
First, Java is simply the unchallenged language of choice for building robust applications. As pressures increase for software to perform -- and to scale and evolve over time -- the move to Java becomes more and more compelling. Java's excellent error handling, automatic garbage collection and code reuse can offer companies very significant savings. But Java by itself is not a magic bullet. Developers without proper training often see no benefit from Java.
Second, Java was built to be a secure language. The last thing that anyone wants to see is a mention of their company in an article detailing how a security lapse exposed key data meant to be private. Java helps ensure that data meant to be private stays private -- and that when companies appear in the press, it's for a good reason.
Third, Java provides support for the latest technologies including web services, XML, messaging, wireless, etc. In fact, one of the great things about Java is that it is so vast in its scope. If it can be done in software, it can be done in Java. And once you understand object orientation and know the Java syntax, learning how to use new features in Java only involves adding to your existing Java knowledge -- a far easier task than learning a new language and syntax.
Fourth is performance. Java is a high-performance language. Java with JSP (similar to ColdFusion for presentation) is over 10 times faster than using ColdFusion. A single JSP server can handle 10 times the number of simultaneous requests that ColdFusion can.. Can you scale CF by adding hardware? Sure, but each server costs both hardware and software licensing money and all these must be administered.
Fifth, Java encourages documentation. The Javadoc utility is an absolute inspiration, allowing programmer-written comments to create high-quality documentation automatically. In fact, all of the official Java API documentation is generated from such comments. To a corporation, documentation represents a stable body of knowledge that new developers can read and come up to speed on quickly. But experience shows that if documentation is hard to produce, it won't be produced. Javadoc makes documentation remarkably easy.
Sixth, Java has an enormous number of supporting characters -- many of them free. This includes a very powerful framework called Struts, ColdFusion-like tags in JSPs, etc. One of the best editors for Java, Eclipse, is both extremely powerful and free. In proprietary languages, every addition costs. Additionally, there is a wealth of free information available to help beginning Java programmers.
Seventh, Java can communicate with an enormous number of products-from databases to highly specialized equipment. It's safe to say that anyone who produces an API to their product produces a Java version. This is true both currently and for the long term. Contrast this with proprietary languages.
Eight, Java can be deployed on virtually any platform without recompilation. The reason is that Java compiles to "byte code" and this byte code is then interpreted by Java virtual machines (JVMs). JVMs exist for virtually every platform. The benefit is that separate code bases do not have to be maintained -- an enormous savings to companies and a great relief for programmers charged with this thankless task.
Ninth, Java can be used for both web-based applications and console applications. As great as the web is, there are times where it's just not appropriate for certain applications. If you know only a web language, you're stuck. Java has excellent support for building console-based applications.
Tenth, Java provides insurance against application obsolesence. Markets tend to cohere around a few, key technologies. Java is one of those. Over time, applications written using other technologies become harder and more expensive to maintain. With the universal acceptance of Java as the new King of the Hill, companies that adopt Java are assured of a large pool of skilled programmers. In other words, niche = expensive.
A lagniappe: Our friends in Louisiana have a word called "lagniappe" that means "a little something extra". An extra reason why Java makes sense for companies is that it prevents vendor lock-in. When you have a single source for a language, you are joined at the hip with the vendor making the language. Any financial problems of that vendor become your problem. If the vendor decides to raise rates to make up for lack of demand, you have no say in the matter. Java, besides being free, has a community process that involves every major vendor and a very large number of users of the language. In other words, mainstream = safe.
But can't developers pick up Java on their own? Yes -- and no. The syntax of Java isn't particularly difficult. In fact, we spend only 20% of the class going over syntax. The rest of the class deals with the hard part of Java -- learning to "think in objects" as programming guru, Bruce Eckel, puts it. The shift from procedural thinking to object thinking is not particularly natural or easy for most of us. Having an experienced guide and mentor to help you with that is enormously valuable.
For example, pick up a Java book and read about a feature of Java called "interfaces" and you're likely to get the impression that interfaces are used to provide the benefits of multiple inheritance. While that is not untrue, it misses showing students how interfaces are absolutely fundamental to creating OO designs and are key to one of OO's most powerful features, polymorphism. And without understanding this, developers are too apt to write old-style, procedural code and stuff this code into Java classes. This represents the worst of all worlds: a new technology stripped of its chief benefits.
Finally, some may ask about Microsoft's .NET initiative. Doesn't that compete with Java? Should developers learn Java or concentrate on .NET? It usually surprises people when I tell them that I like .NET very much. It provides great tools for developers and is a very good implementation of object orientation. Microsoft has recast even venerable Visual Basic so that now it is fully object oriented. Microsoft's chosen language, though, is C#, a language very similar to Java.
I encourage people who think they may be working in .NET to learn Java first. Why? Because while .NET offers some great shortcuts that work just by pushing a button, you really need to understand what "pushing the button" does. There's just no substitute for learning object orientation and Java is non vendor-specific. In other words, moving from Java to C# is usually much easier than moving from C# to Java. The reason is that C# training focuses on the Microsoft way of doing things. As I said, I'm a big fan of .NET and C#, but first, let's get a solid foundation in OO.