PROGRAMMING languages are necessary to Computer Science. They reflect many aspects of Computer Science: syntax, semantics, theorem proving (for type inference), abstract and virtual machines, data structures, software engineering, computer architecture and so many hardware issues. Languages help in understanding the evolution of computer and enhance human communications with machines.
The very first programming language was written, sometime in 1940s, in binary notation when data and instructions used to be encoded in long, featureless strings of 1s and 0s. The programmers had to keep the track of where everything was stored. There were too many bugs in programs written in long hand. One earlier programmer Maurice V. Wilkes after creating a program in 1949 wrote this: “the realization came over me with full force that a good part of the remainder of my life was going to be spent in finding errors in my own programs.” Over half a century later, programmers are still debugging. The term ‘bug’ originated from bugs that roamed around in machines causing short circuits.
The technology that gave some breakthrough to earlier programmers were assembly languages, which allowed macro expansion into multiple machine instructions to achieve a form of higher-level programming, also, machine operations to be expressed in abbreviations. Raw binary codes were replaced by symbols such as load, store, add, and sub. This was the time when programmers started using computers to help with programming. Early assemblers had a one-to-one correspondence between assembly and machine instructions. Assembly languages were a leap forward in the field of programming but still the programmer had to keep in mind all the minor details in the instruction set of a specific computer.
Development of machine independent Fortran was a benchmark in mid 1950s. It was a first high-level programming language. It had a dramatic impact on computing in early days when most of the programming took place in machine code or assembly code for an assembler. Main computing activity during that time was solution of numerical problems in science and engineering hence Fortran was originally designed to express mathematical formulas. Till that time, the costs of software were overtaking that of hardware and the projects were still buggy. One response to this situation was structured programming; a reform movement initiated by Edsger W. Dijkstra’s. Structured programs were to be built out of subunits that had a single entrance point and a single exit. Three such constructs were recommended: sequencing (do A, then B, then C), alternation (either do A or do B) and iteration (repeat A until some condition is satisfied). Corrado Böhm and Giuseppe Jacopini proved that these three idioms are sufficient to express essentially all programs.
Other high-level languages - large and relatively complex Algol, Cobol for business computing (originally developed by Defense Department, Lisp for symbolic and artificial intelligence, basic for the bingers, and C for system programming - followed soon. Since the 1980s software development has been dominated by a methodology known as object-oriented programming (OOP).
OOP programming traces its roots back to Simula, a programming language devised in the 1960s. Within a decade several more object-oriented languages were in use, most notably Bjarne Stroustrup’s C++, and later Java. Object-oriented features have also been retrofitted onto older languages, such as Lisp. OOP is a revolutionary concept that has changed the rules in computer programming. “OOP is organized around objects rather than actions, data rather than logic,” reads Whatis.com, “Each object has an internal state and executable functions to manage that state. This programming style is naturally adopted in object-oriented programming languages but can also be adopted in procedural or functional languages.” In fact, most object oriented languages were designed as an extension of a procedural language and the concept of a class is largely based on the concept of an abstract data type.
As OOP has changed the way programs are written, there has also been a major shift in the nature of the programs themselves. In the software-engineering literature of the 1960s and ‘70s, example programs tend to have a simple structure: Inputs enter at one end, and outputs emerge at the other. An example is a compiler, which transforms source code into machine code. Programs written in this style have not disappeared, but they are no longer the center of attention. The emphasis now is on interactive software with a graphical user interface. Programming manuals for object-oriented languages are all about windows and menus and mouse clicks. In other words, OOP is not just a different solution; it also solves a different problem. The content analysts have started looking at what might await us after OOP.
Analysts attempting to makes guesses about the future of programming can only base their thoughts on the present and past. Given the short history of programming and what we know about its fundamental nature, what can be seen is that software languages will remain essentially unchanged for quite some time to come? Certainly there will be new languages and improvements in technologies, but these improvements at best may be evolutionary, not revolutionary. One question that is asked repeatedly is if a single standard language can be developed? Answer at the moment seems no. All languages in use are equally powerful in technical sense. But the different features and variety of personal preference makes it unlikely that anyone will ever develop a universally acceptable programming language. What is more, nothing on the software horizon even hints at the kind of advancement potential comparable to emerging hardware technologies like, say, organic circuitry.
The writer contributes regularly to Dawn Sciencedotcom on diversified science and IT subjects