Presentation on theme: "0 Some History and Perspective. 1 An overview Throughout the semester, we’ve seen several different languages and paradigms. However, it is useful to."— Presentation transcript:
1 An overview Throughout the semester, we’ve seen several different languages and paradigms. However, it is useful to take a step back and look over the history of programming languages, including which features were introduced when (and why). Take away message: a good programmer should be unfaithful.
2 The beginning: before the 1940’s Early example of what we know think of as “programming” include: Jaquard’s loom, which used punch cards to assemble textiles The Analytical Engine, which was designed by Charles Babbage and programmed by Ada Lovelace
3 Early theoretical modeling In addition, mathematicians were designing the theoretical concepts necessary to model a computer. The Turing machine: set the basis for von Neumann architecture, as well as the formal analysis of algorithms Church’s lambda calculus was the precursor of functional programming Church-Turing thesis: "It was stated... that 'a function is effectively calculable if its values can be found by some purely mechanical process.' We may take this literally, understanding that by a purely mechanical process one which could be carried out by a machine. The development... leads to... an identification of computability with effective calculability"
4 The 1940’s zIn the 1940’s, machine and assembly languages were designed for the massive computers like ENIAC. yEach was specific to a single machine. zIt quickly became clear that these were quite error-prone. zAt this point, the focus remained on the problem being solved - the programming languages were not themselves a focus of study at all.
5 The 1950’s zIn the 1950’s, the firsrt programming languages were designed. The major ones: Fortran: FORmula TRANslator, designed by Backus et al in 1955. Introduced variables, loops, procedures, and much more. Also has many awkward features, which unfortunately have stuck around for backward compatibility. Still widely used in engineering applications which do lots of array manipulations.
6 The 1950’s LISP: LISt Processor, designed by McCarthy et all in 1958 yBased on the concept of computing by evaluating functions. Very good for symbolic computing. yFor years, the only language for Artificial Intelligence work. (Prolog is 12 years younger.) Many dialects, two standards (Scheme, Common Lisp). Nice programming environments. Cobol: COmmon Business Oriented Language, by the Short Range Committee (headed by Grace Hopper), in 1958 yOriented towards business applications. yStrict organization with elaborate data structures, and introduced record types for the first time. yVery poor control structures. yMost common in government (for a very long time).
7 1960: Algol zThe ALGOL60 report was developed in the late 50’s and published in 1960. zThis document (and the resulting languages) introduced two innovations: yNested block structure, as well as recursion. yLecical scoping (as opposed to a global scope) zIn addition, BNF was codified as the primary way to parse expressions. zThis report was heavily influential on all later programming languages.
8 The 1960’s zIn 1968, ALGOL 68 was released, which officially implemented the features outlined in the 1960 document. yIn addition, added higher order functions, concurrent and parallel blocks, and automatic type coercion. yArguably the most elegant language design. yExtremely difficult to learn and implement in effectively. yComletely unused today.
9 The 1960’s: others z1964: BASIC y an easy-to-use language, designed to be the first language for a programmer to learn. ySomewhat limited, which has been addressed in later versions (which are now much more difficult to use). z1964: PLI yCombination of Fortran, Algol 60, and Cobol, designed for general purpose use. yIntroduced the concept of event handling. z1967: Simula 67 yAn extension of Algol 60 designed for simulation of concurrent processes. yIntroduced the central concepts of object orientation: classes and encapsulation. yPredecessor of Smalltalk and C++.
10 C zDeveloped by Dennis and Ritchie between 1969 and 1973. zThe implementation language of Unix. zA great tool for systems programming and a software development language on personal computers. zOnce fashionable, still in use, but usually superseded by C++. zDangerous if not used properly: not recommended to novice programmers. zRelatively low-level.
11 Pascal (in 1970) Originated when Wirth actually walked out of the Algol 68 design committee. zA conceptually simplified and cleaned-up successor of Algol 60. zA great language for teaching structured programming. zAn excellent first language to learn: teaches good programming habits. zIts later extensions (for example, Delphi) are full-fledged systems programming packages, as powerful as any Java kit.
12 Smalltalk: 1972 zDesigned in Xerox PARC, inspired (due to a bet) by the idea that message passing introduced in Simula could be implemented in “a page of code”. zThe purest object-oriented language ever designed - arguably cleaner than Java and much cleaner than C++. zComes complete with a graphical interface and an integrated programming environment. zIn skilled hands, a powerful tool.
13 Prolog: 1972 zThe first logical programming language. zInitially aimed at natural language processing, but has grown since then. zVery powerful: yNon-deterministic (built-in backtracking). yElaborate, flexible pattern matching. yAssociative memory. yPattern-directed procedure invocation. zIn skilled hands, a very strong tool.
14 ML: 1973 zStands for Meta-Language zBuilt a polymorphic type system on top of Lisp zThe first statically typed functional programming language (and also uses static scoping). zNot purely function - a greater use of side-effects than Haskell or others. zDoes not use lazy evaluation.
15 C++: 1980 zFirst language to combine object orientation with systems programming. zThis is a hybrid design, with object orientation added to a completely different base language. zComplicated syntax, difficult semantics. zVery fashionable, very much in demand.
16 C++: 1980 zFirst language to combine object orientation with systems programming. zThis is a hybrid design, with object orientation added to a completely different base language. zComplicated syntax, difficult semantics. zVery fashionable, very much in demand.
17 1980’s overall trends zOne notable development (present in modula, Ada, and ML) is the use of modules. zAllowed more focus on large-scale systems. zAlso connected well to general programming constructs.
18 1980’s overall trends zThe concept of RISC architecture also came into being here. yMain idea: hardware should be designed for compilers, and not for human assembly programmers zThis movement brought significant focus on (and funding to) the design of aggressive compilation techniques that utilized better and better processor speeds.
19 1980’s: other languages z1983: Ada z1984: MATLAB z1987: Perl z1988: Mathematica zThis is also when the design for Haskell took place (actually released in 1990).
20 1990’s: overall trends zMost of the design in the 90’s focused on internet development. zRAD (rapid application development) became a catchphrase. yIn general, object-oriented with IDE’s and garbage collection. yAlso the beginning of scripting languages.
22 Java zA neat, cleaned up, sized-down reworking of C++. zFull object orientation (though not as consistent as Smalltalk) zDesigned for Internet programming, but general-purpose. zIt is said (not quite correctly) to be slow. The real reason it took off was its early integration with the Netscape Navigator web browser.
23 Current trends zConcurrent and distributed programming support. zAdding security and reliable verification to older languages. zIntegration with databases, including XML. zOpen source design philosophy. zEducational initiatives: Squeak and Scratch stand out. yThese even tie in with issues of recruitment and retention, since many complain that the “standard” CS curriculum is designed to help students fail.