The well documented history of programming languages contains some that never existed which were then invented and aptly named as a result. Ada is one of those languages; although Ada Lovelace never saw a machine that Charles Babbage never built; she did write software for it that would in theory calculate Bernouli numbers, and has since been proven to work.(Baum)i Although Ada is a retronym (a term applied after the invention’s creation); there were many languages available and used before ADA, these include ALGOL, APT, FORTRAN and many others. (Piggot)ii
The logical history of software is available from the HOPL, a site devoted to the archival of all programming languages (Piggot)iii; although we could argue that the Jaquard Loom in the late eighteenth century (1890) was the first use of punch cards, and the first programming language to make use of recursion to produce fine rugs; the cards were actually pre-dated by switches when it comes to computers and programming.(Penn)iv
The reasons for abstracting programming language are very simple; machine language is impossible to think in; Humans usually think in the terms of the language they have been taught (New Scientist, 2004)v, not 1’s and 0’s. The amount of errors experienced by early computers during their first runs was incredible (cnet, 2008)vi; however a good portion of these errors were the result of a human whom does not understand how to program the machines memory, or mechanical issues; this paradigm has not changed much since the first days of computing, as we humans have not evolved much in the last 50 years; the languages used to program the raw data and computer hardware have.
Mechanical gears and vacuum tubes have given way to semiconductors; transistors, capacitors and resistors that are billionths of a human hair in size and consume a modicum of electricity whilst functioning. This almost three orders of magnitude increase in compute power has brought about its own issues; since there are no moving parts in a modern computer the potential for mechanical failure has been replaced by the potential for the failure in software: where the complexity arising from moving parts may be equated to lines of code.(Lew et al.)vii
The term debugging was invented at the U.S. Naval research centre at Harvard university when Rear Admiral Grace Murray Hooper noted issues with a program running on a Mark II computer; and then removed a moth from one of the relay’s coining the term debugging in the process.(Time, 1984)viii
The modern computer has a gargantuan amount of storage for both core memory and non-volatile memory when compared with the computers Grace Hooper used. To imagine how to program in machine language we would first have to consider our underlying systems architecture; this is as defined by the vendor of the system in question and is referred to as the Machine Language. (IBM, 1998)ix The most commonly sold personal computer today uses a machine language or instruction set architecture; referred to as x86 and x86-64; x86 has been around a long time; however as a language the 32 bit version has over 300 separate instructions for integer, floating point and other operations, combined with 32-bit width and register addresses and the terabytes for storage that 32-bits can address; the task quickly becomes impossible to program the system manually( Intel)x; although some circles still do (Wikipedia)xi; So programming languages arose as the result of machine language complexity.
Enter the “compiler”; software program to take and abstracted human readable programming language and turn it into machine useable code. The first compiler ever used was the NELIAC (HOPL)xii and it compiled ALGOL. It is assumed that the early compilers for Fortran, PASCAL and other languages were hand made that is designed to transform instructions by the hands of some very talented programmers; modern compilers are compiled by other compilers; That is a newer version of a compiler will utilize an older version of the same compiler to compile itself and once compiled may compile other software as needed; Examples include the GNU’s GCC compiler (GNU)xiii, or any commercially available compiler.
Programming paradigms have evolved in conjunction with the underlying technology accordingly; the current “Object-Oriented” paradigm evolved because we had developed computers that had enough resources to devote to a compiler to reduce the amount of time required to create software to run programs with our computers but sacrificing program effiencey. The previous common paradigm was a functional one for high level languages; such as ALGOL, FORTRAN or PL/1; the move to imperative programming languages was a logical transition from the functional paradigm since thinking in mathematical abstraction is more difficult than natural language; imperative languages like BASIC or SmallTalk were the result. The development of the Obejct-oriented paradigm is a result of using imperative object based programming languages, such as C and then once discovering their limitations in large programming environments developing C++ and the Object oriented standard to reduce programming time.
The measure of a computers overall efficiency is the time it takes the computer to do a given task; this is at the heart of benchmarking computer systems (University of Tennessee)xiv; however the time required to produce code is measured in man hours; (Anselmo et al.)xv, since the primary cost of developing software is the human developing it; the reduction of time spent by the programmer to create a program is money saved by the company making said software; and thus forms the basis of the Programming Language market, which is a large business.
Rapid Application Development and Extreme programming are methodologies that allow the development of application features and the reliability of said application to be of paramount importance in both its development and support; the current paradigm is shifting in favour of a methodology driven environments where project management methods determine controls for programming projects, and the underlying languages become less important. Current trends in programming include the move to interpretive, object-oriented, interactive & distributed programming languages such as Python, PHP, C# and .NET, although C/C++ and JAVA will be around for decades to come more a result of software market pressure than evolution: Where existing requirements stipulate that development time is minimal and the programs created serve a modular function such as Content Management Systems with native database functionality; we are also seeing trends in object oriented database access in addition to traditional variable storage methods; were applications are created with a database attached to them to improve performance and functionality. There is also the move online to standards such as AJAX(Opendirectory)xvi/SOAP (w3c)xvii where formal data interchange is supported by ubiquitous standards between unrelated third party organizations; the best example of this is Facebook, it’s programmed in PHP and uses AJAX and SOAP to allow third party companies to access people’s vital data. The social ramifications of this endeavor are still being rectified.
We have yet to produce a computer that can code it’s own programs; although LISP has many applications that can re-code their own functions and variables according goals and neural models(Luger)xviii we have yet to see an application that may produce programs itself as needed by objective alone; although many experiments have been completed, automating programming is one of the greatest challenges to the world of artificial intelligence, we can even purchase software that will aid in the modeling and selection & classification of unknowns but we cannot find applications that code themselves. (Ward Systems)xix
---------------------------------------------------------------------------------------------------------------
i Baum, Joan (Archon Books, December 1986). The Calculating Passion of Ada Byron.
ii Pigot, Diramud (Murdoch University, 2006) HOPL: an interactive Roster of Programming Languages, [Online] World Wide Web, Available From:
http://hopl.murdoch.edu.au/
(Accessed on October 20th 2008)
iii Pigot, Diramud (Murdoch University, 2006) HOPL: an interactive Roster of Programming Languages, [Online] World Wide Web, Available From:
http://hopl.murdoch.edu.au/
(Accessed on October 20th 2008)
iv Penn University (n.d.) Online Eniac Museam [Online] World Wide Web, Available From:
http://www.seas.upenn.edu/~museum/3tech.html
(Accessed on October 20th 2008)
v Biever, Celeste (August 19th 2004) Language May Shape Human Thought [Online] World Wide Web, Available From:
http://www.newscientist.com/article.ns?id=dn6303
(Accessed on October 20th 2008)
vi Kanellos, Michael (Cnet, February 13th 2006) Eniac a computer is Born [Online] World Wide Web,
Available From:
http://news.cnet.com/ENIAC-A-computer-is-born/2009-1006_3-6037980.html
(Accessed on October 20th 2008)
vii Lew, K.S. ; Dillon, T.S.; Foreward, K.E.(IEEE Transactions on Software Engineering, November 1988 Vol 14, no. 11 P1645 – 1655) Software Complexity and it’s Impact on Software Reliability, [Online] World Wide Web, Available From:
http://www2.computer.org/portal/web/csdl/doi/10.1109/32.9052
(Accessed on October 20th 2008)
viii Taylor, Alexander (Time April 16th 1984) The wizard inside the machine [Online] World Wide Web,
Available From:
http://www.time.com/time/printout/0,8816,954266,00.html
(Accessed on October 20th 2008)
ix Super Computer Education & Resarch Centre Indian Institute of Science (IBM, n.d.) Online Glossary of Terms [Online] World Wide Web,
Available From:
http://www.serc.iisc.ernet.in/ComputingFacilities/systems/cluster/vac-7.0/html/glossary/czgm.htm
(Accessed on October 20th 2008)
xSmith, Zack (Smith, 2005) The Intel 8086/8088/80186/80286/80386/80486 Instruction Set. [Online] World Wide Web, Available from:
http://home.comcast.net/~fbui/intel.html
(Accessed on October 20th 2008)
xi Wikipedia (n.d) Demo (Computer Programming), [Online] World Wide Web, Available From:
http://en.wikipedia.org/wiki/Intros#Intros
(Accessed on October 20th 2008)
xii Pigot, Diramud (Murdoch University, 2006) Navy Electronics Laboratory International ALGOL Complier [Online] World Wide Web Available From:
http://hopl.murdoch.edu.au/showlanguage2.prx?exp=32
(Accessed on October 20th 2008)
xiii Free Software Foundation (July 31st 2008) The GNU Compiler Collection (GCC) [Online] World Wide Web, Available From:
http://gcc.gnu.org/
(Accessed On October 20th 2008)
xiv Petitet, A; Whaley, R. C.; Dongarra, J. ; Cleary, A. (University of Tennesee, September 10 2008) HPL - A Portable Implementation of the High-Performance Linpack Benchmark for Distributed-Memory Computers, [Online] World Wide Web, Available From:
http://www.netlib.org/benchmark/hpl/
(Accessed On October 20th 2008)
xv Anselmo, Donald; Ledgard, Henry (ACM Proceedings, November 2003) Measuring Productivity in the Software Industry, [Online] PDF Document, Available From:
http://portal.acm.org/citation.cfm?doid=948383.948391
(Accessed on October 20th 2008)
xvi OpenDirectory (Netscape, 2007) Programming Lanaguages – AJAX ,[Online] World Wide Web
Available From:
http://www.dmoz.org/Computers/Programming/Languages/JavaScript/AJAX/
(Accessed on October 20th 2008)
xvii Box, Don; Ehenbuske, David; Kakivaya, Gopal; Layman, Andrew; Mendelshon, Noah; Nielson, Frystyk, Henrik; Thatte, Satish; Winer, Dave (W3C Note, May 2000) Simple Object Access Protocol (SOAP) 1.1, [Online] World Wide Web, Available From:
http://www.w3.org/TR/2000/NOTE-SOAP-20000508/
(Accessed on October 20th 2008)
xviii Phd. Luger, George (Pearson, 2009) Artificial Intelligence: Structures and Strategies for Complex Problem Solving, 6th Edition, [Online] PDF Document, Available From:
http://www.cs.unm.edu/~luger/ai-final/supplement-book-preface.pdf
(Accessed On October 20th 2008)
xix Ward Systems (Wardsystemsgroup, 2007) Advanced Neural Network and Genetic Algorithm Software Information Page [Online] World Wide Web Available From:
http://www.wardsystems.com/
(Accessed on October 20th 2008)
No comments:
Post a Comment