History
of Java
The
java programming language is becoming more and more popular each day. It is the
language without which one cannot even hope to a land a job these days. But has
somebody even wondered how this language came about? There are many stories
about, many books have been written. Here is my version (not approved by Sun
Microsystems).
The
java programming language originated in Indonesia. It was meant to be used by
the tourists that visit that country each year. Why would tourists want to use
computer? Well, these are no ordinary tourists. They are rich tourists. Have
they not been rich, they would not travel half way around the world to visit
this place. Most people would be content to see just what is available near by.
For example, if you are a texan living in Dallas, you will visit the stockyards
or may be the trinity river park. If you live in New Orleans area, you would
see st. mary's bayou. Once in your lifetime, one will probably visit Hawaii or
Niagara. But going to Indonesia and its islands, Bali, Java, etc is not for the
ordinary people. Anyway, coming back to the question why these tourists need to
use computer programs. They go there not just to have fun and also get some
work done in a fun atmosphere as these people are very important people.
From
the very start java was supposed to be computer independent. That means if you
write a program in java in one computer, it should run in all computers. This
was necessary because tourists bring all kinds of computers with them. Some
bring Windows machine, some Apple mackintosh. Some of the affluent ones bring
Sun server workstations or even a super computer.
Before
starting to create java they also sought to see if there have similar stuff
done already. Even though they could find none, they found they can use lots of
feature from some existing laguages. One such language they found was C++. C++
was an advancement over the language called C. In fact, ideas of C++ was
already hidden in C. In that language, one can increment a variable, say i, by
applying the ++ operator e.g. i++. This would increase the value of the
variable i by one. If i had a value of 5, it would make it 6, etc. What a
vision!
Anyway,
coming back to C++, it made an important advancement over C by introducing the
idea of a class. To understand class, one has to undestand structure which was
already used in C. The structure is a group of variables. For example, you have
a name, an address, age etc. for any person. In stead of using them separately,
in C one can group them together and call it a person. The creator of C++ said
there is no need to expose these variables (name, address, etc) to the outside
world. They said these details should be hidden from the outside world. They
called this concept encapsulation.
Another
important contribution of C++ was the concept of inheritence. This concept can
be best explained by example. Let's go back to the example of the person. A
person is very general concept. There can be many different kinds of persons,
e.g doctors, lawyers, teachers, or just a bum! But each of these people have a
name, an address, age etc. Even a bum has all these. The creator of C++ thought
one can define a base class call person and other classes can be derived from
it. In plain english, this would mean, a doctor is special kind of person,
lawyer is another special kind of person. Now the common attributes of all
these kinds of people can be put in the person class and special attributes can
be put in the derived classes, e.g. hospital for the doctor, court for the
lawyer, and nothing for the bum.
But
C++ was still complex with things like pointers, memory leak and multiple
inheritence. The pointer concept was taken from C and it was very messy! The
pointer is special type of variable that points to other variables. Since there
was no guidelines as to how to use these pointers, it was very easy loose track
of them. In a typical two thousand lines program, one would frequently end up
with hundredes of pointers pointing to thousands, some of them are pointers and
some just plain variables. Needless to say this made a large program extremely
difficult to read and when the programmer left for another company, they would
have no other choice than to just throw away his program! It was sometimes
necessary to do this even when the programmer was around and very much alive.
This is because the pointers he created inside his program had taken a life of
their own and defy every attempt to predict how the program should behave.
Memory management was also another weak point of C and C++. The programmer was
responsible for cleaning up the memory their program would allocate and use.
Failure to do so will result in a crash of the whole computer.
Multiple
inheritence, though sparingly used, was another feature of C++ which made a
programmer's life miserable. It, however, had its use, especially in job
interviews. This one question, they thought, helped them separate the wheat
from the chaff.
But
C++ still had some nice and simple features, like inheritence, encapsulation,
etc. They are something one can describe in plain english, something one can
explain to a layman. So the creator of java decided to take the good features
of inherience, encapsulation, and polymorphism from C++, while discarding the
bad features such as multiple inherience, pointers etc. The memory management
was improved in java where the programmer will not be held responsible for
memory management. They can clean up after themselves if they want to get extra
credit, but they do not need to. Needless to say all these was great news to the
tourists in Indonesia!
Java
introduced lot of clarity in notations too. For example, in C++ they would say
class doctor:person to mean doctor is derived from person. It is obviously very
cryptic. The same situation can be expressed in java as class doctor extends
person , which is much easier to understand. But there are few awkward stuff in
java too especially when someone says class bum extends person (my last bum
joke)!
Java
made an important contribution in the graphical user interface (GUI) area. C++
was really lacking in expertise here. They visual C++, but worked only on
windows environment. But it did not work in UNIX systems or mackintoshes. Just
like other features of java, this was also supposed to be platform independent.
This was further necessary because one can put some little GUI on a web page
which can be views over the internet. And one cannot control what kind of
computers other will have.
After
a while, it was necessary to call programs from one computer to another
computer. To do this, they created J2EE. I am not sure how they came up with
the name J2EE. The 'J' of J2EE, of course, means "Java", and I can be
reasonably sure '2' stands for 'To'. But I do not know what the 'EE' part is
all about, probably some kind of extension. Or at this point they ran out of
names to think of. So they decided to have one of those just another vague
acronyms.