
The computer, which is capable of performing almost anything within the physical confines of it's design, has a surprisingly limited vocabulary. There are three different types of programming languages: machine language, assembly language and high level languages. At it's most basic level, the internal processor of a computer knows a few hundred combinations of words from which to build commands. The processor recognizes them as sequences of 1s and 0s, which is called machine language. The computer programmer can create at this level, albeit with a great deal of difficulty. Normally, for development at this level, the programmer will use assembly language, which is easier to write but can't be executed by the computer directly. The assembly language program, as well as high-level programs, need to be compiled into machine code by another piece of software called a compiler. As an example, suppose the programmer wants to print the square root of 25 in his program. This task in assembly language would take approximately 25 lines of code. High level programming languages were invented so that programmers could write code that is more readable. An example is the 'C' language. In C, the code to print the square root of 25 would simply be:
printf("%f",sqrt(25));
This is still very cryptic for the untrained reader and, even though more flexible than assembler, it still only provides the programmer with a very limited vocabulary. The programmer has several basic structural elements, internal to the program itself, with which he can build his programs. These vary with each higher level programming language, but almost always include arrays and data structures. Along with these programming languages, the developer can ask the operating system for various services through his program. By combining this restricted set of tools with operating system calls, logical flow and as much creativity as he has, the programmer builds the user's black box from his own imagination. A blank screen represents frustration to the computer user - it represents endless possibilities to the computer programmer.