Computers in 2006 have an integral role in our daily lives. Without them, our modern society would crumble. It is fascinating to think that despite their necessity to most of us, computers have only been in existence for approximately 50 years. The tasks performed by computers everyday are not only vital, but useful as well.
As programming languages evolve, the ease in which practical, useful, and elegant programs are written becomes greater and greater. This is partly due to the exponential increase in computer memory and processing speeds over the past 50 years. Without our history however, we are lost. So what follows is a brief history of significant programming languages and how they have evolved.
The primary language used to dictate what a computer should do was Assembly. Assembly involved (and still does today) using processor-specific instructions. Essentially, names were assigned to binary (the language of computers) instructions. Assembly was extremely unfriendly. The majority of operations consisted of managing the computer's memory. One mistake, and the computer was often in trouble.
The need for a more human-friendly language with which to interact with a computer was realized in the early 1950's with FORTRAN. FORTRAN was the first structured computer language and introduced for the first time conditional statements that could further dictate the actions that a computer program could take.
Unlike today, FORTRAN programs were written on structured punch-cards, and then fed to the computer. Writing programs in FORTRAN was far easier then in Assembly language, but programming computers was still no easy task.
In 1958, programming languages took a step in a different direction. John McCarthy of MIT created the List Processing (LISP) language. It was designed (and amazingly, is still used today) for AI research.
LISP syntax was (and still is) highly irregular. The most visible of these irregularities is the use of pre-fix notation. Instead of writing 1 + 1, the programmer would write (+ 1 1). The method or operator on the left is applied to all the arguments in the parenthesis. The LISP dialects (including the very popular Scheme) all take heavy advantage of recursion, the act of a function calling itself.
While languages today usually use looping constructs to perform repetitive tasks, the recursion used in LISP dialects is incredibly elegant and useful in its own right.
In a time when most programs were only runnable on their host computer, C sparked portability. This was because rather then being written with processor-specific instructions, C code was abstract, and compiled into assembly. Therefore, a C source file could be distributed and re-compiled for any system. This was revolutionary.
Java code is compiled into byte-code (a more abstract Assembly). This byte-code is run by a virtual machine (like a virtual computer). As long as the computer has the virtual machine installed, any Java program can be run without being re-compiled. Java emphasizes Object-Oriented Programming, the only paradigm supported by the language. Today, Java has a strong foothold in the corporate world.