Java positions itself as the antithesis of C++.  Oddly it seems, because it uses the same syntax in the hopes of attracting all its programmers.  Released in 1995 to more fanfare than it could reasonably deserve, Java became popular very quickly.  So quickly in fact, people seemed blind to the lack of performance and features it displayed at that time.  They were more interested in one particular aspect of it…

Write Once Run Anywhere was the promise, the idea that you could write a java program on any computer or operating system you chose, compile it, and the resulting program would then run on any other computer or operating system without need for modification.  For the most part it worked too: you could run the same slow featureless program on any computer.

The lack of speed was inherent in the design of the Java Virtual Machine – the software you had to first install on a machine you wanted to run Java programs on.  Because Java programs had to run on any platform, they were compiled down to a series of ‘byte codes’, a halfway house between source code and compiled code that could then be further translated by the JVM to match the idiosyncrasies of the target machine.

Early JVM’s were seemingly just a proof of concept, and they certainly became better over time such that today, to gloss over the swings and roundabouts of speed tests, they are much the same speed as traditional compiled code.  The arguments still continue regardless however.

Because of Java’s keep it in the family approach to program design, the features a Java program can have are limited to/bolstered by what Java’s designers already give you, in the form of a large library of code you can pick and choose from to import into your projects.  There is code to deal with graphics, sound, 3D, user interfaces, pretty much everything you would want to do with a computer.  Over time this library has grown to an almost intimidating size, and new users can find themselves lost in an ocean of terminology, framework, and architecture.

Thankfully there is plenty of material available to help you.  The fairly complete Java documentation is often re-written in the form of tutorials, and progress with Java based projects both feels rapid, and generally is.  The language itself acts like C++ with the complicated parts removed, and what the syntax lacks in power it makes up for in clarity (but certainly not brevity).  It is a safe, secure, modern approach to software design. 

Software:

Eclipse is a popular multi-platform tool for Java

 

Books:

 

Summary:

Pros Lots of pre-written code to speed up the development process.  Secure.  Cross platform
Cons Wordy.  Sometimes inflexible, (mostly undeserved) reputation for bad performance.
Lends itself to Network programming, rapid development
Has trouble with Operating with the unique features of the machine you're working on, e.g. some elements of interface design, or the latest and greatest technology