Today's students of programming sit down and start to write code. They take much of what exists today for granted.

Sometimes it helps to sit down and take a look at what has gone on before in order to have a greater appreciation of what exists and how things got the way they are today. In that spirit let's take a look at the short and spirited history of the act of programming the computer.

One of the earliest (and crudest) attempts at programming the computer came in the form of paper tapes. Paper tapes had holes punched in them much like the holes punched in Hollerith cards. The tape was read by a device that circulated the tape round and round.

To say that a paper tape was an early form of programming is somewhat of a stretch. Only the crudest of functions could be accommodated by instructions punched into a tape, but if the act of programming is considered to be the act of providing guidance for the computer to execute, then the paper tape must be included, however crude it was.

The limitations of the paper tape were legendary. The paper tape could include only very limited amounts of instructions. The paper tape could address only some of the most basic things the computer could do. The paper tape was so fragile and short-lasting that it is not in the same class as today's technology.

A second early technology that could be construed as a precursor the today's programming was the wired board. The board was wired manually and was plugged into the computer. The wired board instructed the computer as to how certain input was to be handled.

Wired boards contained a bunch of holes and the programmer would pug wires into the holes connecting one hole to another. In such a form instructions were transmitted to the computer.

The limitations of wired boards were legendary. There was limited capacity. Everything had to be done by hand (literally). They were difficult to debug because they had to be used against live data in order to test their accuracy.

Indeed, it is somewhat of a stretch to include wired boards and paper tape as early types of a computer program.

The first real programming that I encountered was the IBM 1401. The IBM 1401 had a console and you entered your program – manually and an instruction at a time – through the console. To say that the console approach to programming was error-prone is no exaggeration, and a program of any length took an extraordinarily long time to enter. The drawbacks to entering a program into the system console are obvious.

Next came assembler language, which programmers entered using punched cards (a step up from manual entry into the console). Programming in assembler language was arcane; the language gave you complete control of the system but required you to manage parts of the system that you would rather not know about (such as I/O control). To run programs in assembler, you had to have a knowledge of every part of the computer, and being an expert in every part of the computer -- even the simple computers of the day and age -- was a challenge.

The first real programming language was FORTRAN (FORmula TRANslation), which was designed for the scientist and for algorithmic programming. FORTRAN had such sophisticated elements as arrays, FOR statements, and the like, all of which were advances in language technology.

Soon after came COBOL (Common Oriented Business Language). COBOL employed many language features which are found today. COBOL made extensive use of preprogrammed system modules. The ability to simply call a function and not have to program it yourself was a real advance. COBOL also had the dreaded "redefines" feature, where data could have one specification at one moment and another specification at another moment. The redefines function made debugging a COBOL program a challenge because it was never clear what kind of data you were reading or dealing with at any moment.

The popularity of COBOL is witnessed by the vast number of programs that were written in it. In many ways it was COBOL that paved the way for the widespread usage of the computer in business.

Next came PL-I. PL-I incorporated many of the best features of FORTRAN and COBOL, and introduced some new features as well. In PL-I you could process internally inside the buffer area, which was not something you could do in COBOL or FORTRAN.

In the early days of FORTRAN, COBOL, and PL-I, code was written on punched cards. Punched cords worked well but were not without drawbacks, one of which was the "dropped deck" event. Occasionally a person would drop their deck of cards and it would spill all over the floor. Programmers then faced the prospect of trying to manually resort and reconstruct the deck. Another event was the alteration process. There was once a device where the chads could be replaced back into the card. The chad replacement device never became popular.

Then one day programmers began to write their code online, directly entering their code into a word processor. The direct entry of the code into a word processor was a gigantic leap forward for all programmers.

Today there are sophisticated languages such as C, vb.net, Java, and others. The languages of today offer such features as automated precompilation, where the program precompiles itself to point out detectable errors to the programmer as the code is being written. Language constructs are available today that were unheard of in an earlier day and age. There are debugging features which greatly ease the burden of testing and debugging code, and there are many more sophisticated features available.

It is fair to say that those sophisticated features were created in response to a need for the feature and the pain of a programmer in an earlier day and age. The programmers of today stand on the shoulders of their predecessors.

Although the advances in programming languages by themselves are interesting, one way to look at programming languages is as a series of building blocks. Programming languages are the basic building blocks, but on top of those building blocks a much more elaborate infrastructure has been built. That infrastructure includes data bases, data base management systems, and online transaction processing.

From online transaction processing we now have 4GL technology, ETL, and data warehouses. In turn, there were data marts and business intelligence.

There has been a whole progression that today we take for granted. It is sometimes instructive to stand back and look at the progression that has occurred. The perspective gained by looking at the humble origins of the progression is actually awesome. It is like standing at the top of the Empire State Building and recognizing that a few hundred years earlier there was only a forest there.

About the Author

Bill Inmon has written 54 books published in 9 languages. Bill’s company -- Forest Rim Technology -- reads textual narrative and disambiguates the text and places the output in a standard data base. Once in the standard data base, the text can be analyzed using standard analytical tools such as Tableau, Qlikview, Concurrent Technologies, SAS, and many more analytical technologies. His latest book is Data Lake Architecture.

Featured Resources

Find out what's keeping teams up at night and get great advice on how to face common problems when it comes to analytic and data programs. From head-scratchers about analytics and data management to organizational issues and culture, we are talking about it all with Q&A with Jill Dyche.