A lot of people (including both programmers and non-programmers) think that programming is the same as writing code. Not true. Programming is simply telling a computer what to do. Typed code stored in text files is just the way we go about it today. It wasn’t always the case, and may not be the case in the future.
The first computers were huge dinosaurs taking up entire hallways. It is debatable whether the first computers (such as the ENIAC) can be called programmable, because reprogramming them involved rewiring them and moving about hardware components. Software as we know it today didn’t really exist back then. But soon afterwards John von Neumann came up with a computer architecture where the computer’s operations weren’t an intrinsic property of it’s hardware configuration, but rather, you could store programs in the memory and changed without fiddling with the hardware. The invention of this stored program architecture can be taken to be the start of modern programming.
Of course, even though you could now store computer instructions in the memory, you needed a way to get those instructions into the memory in the first place. For quite some time the preferred way to do this was to put your program into bunches of punch cards which the computer could then read into memory. By the late 60s however, as computers became more powerful, the first computer terminals became available. In the beginning, these were teletypes wired up to computers. Teletypes were electro-mechanical typewriters which allowed you to send a message from one point to another (generally by a set of wires) and would print the reply onto paper like a typewriter. It was in the 1970s that visual electronic terminals first became widely available. By this time programming was very much similar to what we are familiar with today, except for a few superficial differences: terminals on their own had very little memory and were mostly used to connect to large mainframes. They couldn’t handle whole pages of text at a time, so for quite some time you had to edit your files one line at a time. But what if you didn’t have access to latest terminals and a mainframe to connect to?
At this the early Altair personal computers deserve a mention. While many computer manufacturers tried to give customers personal computers which were essentially terminals with processors incorporated, Altair was different. The Altair 8800 and later the IMSAI 8800 could be programmed by flipping switches up or down to represent binary numbers. These switches connected directly to the processor. But once you had loaded a bootstrap program by flipping switches you could use a punched tape reader to load other programs into memory. (One of these programs was a BASIC interpreter where you could type in programs the normal way.)
Even in the modern era of text programs, you can still program directly into hardware. Field Programmable Gate Arrays are semiconductor devices which contain a large number of logic components as well as programmable interconnections between them. A buyer can take a basic FPGA and using some specialized equipment, select which logic components are required and how they should be connected. Thus an FPGA can effectively be “programmed” into different hardware combinations which perform different operations.
The next step in computer programming is the elimination of the need to know a programming language, or enough to write any text. Graphical programming, in which a user can simply drag together various components and link them graphically to create a working program. A very good example is Yahoo! Pipes which makes creating feed filter systems almost as easy as playing with Lego. Applications like Zoho Creator are also going in the same general direction, although you still have to dabble with some code if you want a production standard application. MIT’s Scratch project is also extremely exciting and it will be interesting if it can be made into more than a learner’s tool. For the time being, the best example of the potential of graphical programming is probably the programming environment that is part of Lego Mindstorms, where you can actually program real-life robots by linking together programs blocks. But no matter how flashy programming gets in the future, it’s probably a good idea to keep in mind that it’s still just a question of getting data into the memory.