History of Programming Languages
History of Programming Languages
History of Programming Languages
com
The 1940s
In the 1940s the first recognizably modern, electrically powered computers were created. The limited speed and memory capacity forced programmers to write hand tuned assembly language programs. It was soon discovered that programming in assembly language required a great deal of intellectual effort and was error-prone. In 1948, Konrad Zuse [1] published a paper about his programming language Plankalkl. However, it was not implemented in his time and his original contributions were isolated from other developments. Some important languages that were developed in this time period include: 1943 - Plankalkl (Konrad Zuse) 1943 - ENIAC coding system 1949 - C-10
Another milestone in the late 1950s was the publication, by a committee of American and European computer scientists, of "a new language for algorithms"; the Algol 60 Report (the "ALGOrithmic Language"). This report consolidated many ideas circulating at the time and featured two key innovations: The use of Backus-Naur Form (BNF) for describing the language's syntax. Nearly all subsequent programming languages have used a variant of BNF to describe the contextfree portion of their syntax. The introduction of lexical scoping for names in arbitrarily nested scopes.
Algol 60 was particularly influential in the design of later languages, some of which soon became more popular. The Burroughs large systems were designed to be programmed in an extended subset of Algol. Some important languages that were developed in this time period include: 1951 - Regional Assembly Language 1952 - Autocode 1954 - FORTRAN 1958 - LISP 1958 - ALGOL 1959 - COBOL 1962 - APL 1962 - Simula 1964 - BASIC 1964 - PL/I
Each of these languages spawned an entire family of descendants, and most modern languages count at least one of them in their ancestry. The 1960s and 1970s also saw considerable debate over the merits of "structured programming", which essentially meant programming without the use of GOTO. This debate was closely related to language design: some languages did not include GOTO, which forced structured programming on the programmer. Although the debate raged hotly at the time, nearly all programmers now agree that, even in languages that provide GOTO, it is bad style to use it except in rare circumstances. As a result, later generations of language designers have found the structured programming debate tedious and even bewildering. Some important languages that were developed in this time period include: 1970 - Pascal 1972 - C 1972 - Smallalk 1972 - Prolog 1973 - ML 1978 - SQL
Current trends
Programming language evolution continues, in both industry and research. Some current directions: Mechanisms for adding security and reliability verification to the language: extended static checking, information flow control, static thread safety Alternative mechanisms for modularity: mixins, delegates, aspects. Component-oriented software development. Increased emphasis on distribution and mobility. Integration with databases, including XML and relational databases. Open Source as a developmental philosophy for languages, including recent languages such as Python, Ruby, and Squeak. Support for Unicode so that source code (program text) is not restricted to those characters contained in the ASCII character set; allowing, for example, use of non-Latin-based scripts or extended punctuation.
0-9
2.PAK 20-GATE 473L Query 51forth
A
A+ A++ A# .NET A# (Axiom) A-0 ABAP ABC ABC ALGOL ABLE ABSET ABSYS ACC Accent ACT-III Action! ACS ActionScript Actor Ada ADMINS - Automated Data Methods for Information Naming Systems [1] ADS/Online AdvPL Aleph AIMMS Alan Aldor Alef - concurrent language used in early versions of Plan 9 Algae ALGO ALGOL Alice Alphard
B
B BACI BASIC bc BCPL BeanShell BETA Bigwig Bistro BLISS Blitz Basic Block And List Manipulation (BALM) Blue - Rejected prototype for Ada Blue Boo Bourne shell (sh) Bourne-Again shell (bash) Boxx BPEL - Business Process Execution Language Brainfuck BUGSYS
C
C C-C-script C++ C# C shell (csh) Cach ObjectScript Caml Cascading Style Sheets - CSS Cayenne CeeBot Cecil Cesil Cg CHAIN Charity Chey CHILL ChucK Cilk Clarion Clipper CLIPS CLIST - Programming language for online applications in the MVS TSO environment CLOS CLU CMS-2 COBOL o CobolScript CODE CodeSimian ColdFusion COMAL Common Intermediate Language(CIL) Common Lisp Component Pascal COMIT - List or string processing language Concurrent Clean Constraint Handling Rules CORAL66 Corn CorVision COWSEL CPL CSP Chrome programming language
D
D DASL (historical) DASL (modern) Databus Dark Basic Dataflex Datalog dBASE dc Deesel (formerly G) DCL Delphi Dialog Manager DIBOL Dream Maker Dylan
E
E Ease Easy PL/I eDeveloper Edinburgh IMP Eiffel Elan elastiC Elf Emacs Lisp Enterprise Generation Language (EGL) Epigram Erlang Escapade - server-side programming Esterel Euclid Euphoria Euler EXEC EXEC2
F
F F# Factor Felix Ferite FL Flex FLOW-MATIC FOCAL FOCUS FOIL programming language FORMAC Formula language Forth Fortran Fortress FoxPro FP Franz Lisp Frink Frontier
G
G (now known as Deesel) G (LabVIEW) GAMS GML Gclisp G-code Gema GEMBASE GENIE Gibiane GJ Godiva Gdel GOTRAN see IBM 1620 GPSS Green - Prototype for Ada Groovy Gypsy Emma P
H
www.1000projects.com www.fullinterview.com www.chetanasprojects.com
I
ICI programming language Icon IDL programming language IMP Inform Information Processing Language (IPL) Informix-4GL Io IPTSCRAE
J
J J# J++ JADE Jal Janus Java JavaScript JCL Join Java JOSS Joule JOVIAL Joy JSP JScript Jython J2EE
K
K Kid's Programming Language (KPL) Kiev Kite
L
L LabVIEW Lagoona LANSA Lasso Lava Leda Lead Leopard Lexico Lfyre Limbo Limnor LINC Lingo Lisaac Lisp Logo LPC LSE Lua Lucid Lush Lustre LYaPAS
M
M4 MAD MADCAP MAGIC Magma MapBasic Maple MAPPER(Unisys/Sperry) now part of BIS MARK-IV (Sterling/Informatics) now VISION:BUILDER of CA Mary Mathematica MATLAB Maya Mercury Mesa
N
Napier88 Natural Nemerle NESL NGL Nial Nice Nickle Nosica
O
o:XML Oberon Objective Modula-2 Object Pascal Objective-C Objective Caml Obliq occam occam- Opal Open programming language OPS5 Organiser Programming Language (OPL) - cf. Psion Organiser Oz
P
Parser Pascal o Free Pascal o IP Pascal o Object Pascal o Turbo Pascal o Virtual Pascal Pawn PBASIC Perl o Perl Data Language PHP Pico Piet Pike PILOT Pizza PL 11 PL/0 PL/8 PL/B PL/C PL/I PL/M PLD PL/SQL Plankalkl Pliant PPL POP-11 Poplog PORTRAN PostScript POV-Ray Ppc++ Processing Prograph Progress 4GL Prolog o Turbo Prolog Promela Proteus Python
Q
Q
R
R R++- Based on C++ and added semanteme description Rascal Ratfiv Ratfor RBScript rc REALbasic REPL - Really Easy Programming Language REBOL Red - Rejected prototype for Ada Redcode REDO REFAL Report Program Generator (RPG) Revolution REXX Rigal Rlab Robot Scripting Language (RSL) Ruby RuneScript
S
S S2 S-Lang SAIL SAKO SAM76 SAS Sather Scala SCAR Scheme Sed Seed7 Self- Also written "SELF" SETL SIGNAL SiMPLE
T
T TACL TACPOL TADS Transaction Application Language Tcl teco TELCOMP Telon Tempo Titanium TI-Basic Today Tom Topspeed see Clarion TorqueScript tpu Trac TTCN Turing TUTOR Tutorial D TXL
U
Ubercode Ultra 32 Unicon UnrealScript
V
Visual DataFlex Visual DialogScript Visual FoxPro Visual Objects Visual Basic VBScript Visual Basic .NET
W
Water WATFOR WATFIV Whitespace Winbatch WinDev Windows PowerShell WML
X
X10 XBL xbScript - Also xBaseScript xHarbour XL XOTcl XPL XPL0 XQuery XSLT
Y
YAFL Yellow - Rejected prototype for Ada Yorick
Z
Z notation - A program specification language, like UML ZPL ZZT-oop ZOPL ZUG
ALGOL o o o o o
Atlas Autocode ALGOL 60 ALGOL 68 Burrogh's Extended ALGOL ALGOL W Pascal Ada Turbo Pascal Delphi Free Pascal (FPC) Kylix (same as Delphi, but for Linux) Euclid Concurrent Euclid Turing Turing Plus Object Oriented Turing Modula-2 Modula-3 Oberon (Oberon-1) Oberon-2 Component Pascal Objective Modula-2 (also under Objective-C and Smalltalk) SPARK CPL BCPL
MCPL
APL o J (also under FL) o K (also under LISP) o NESL o PDL(also under Perl) o Glee Assembly BASIC o Cache BASIC o BASIC09 o COMAL o Quickbasic QBasic Liberty BASIC Just BASIC o TrueBASIC o Visual Basic VBScript Visual Basic for Applications (VBA) Visual Basic .NET o RealBasic o Euphoria COBOL
o o Occam PL/1 o PL/M PL/M-86 o PL/C o REXX o SP/k Progress Prolog o PROLOG II, III, IV o CLP(R), CLP(FD) o Mercury REFAL Tcl Today o BuildProfessional Sh o bash o ksh Windows PowerShell (also under C# and Ruby) Miranda o Haskell ed o sed o awk perl (also under C) Seed7 SETL o ABC Python TECO Eiffel o Sather o Ubercode Simula o C++(also under C) o Smalltalk Objective-C (hybrid of C and Smalltalk) Objective Modula-2 (hybrid of Modula-2 and Smalltalk, following Objective-C blueprint) Ruby Windows PowerShell (also under bash, ksh and C#) Self JavaScript (originally LiveScript)
Array languages
Array programming (also known as vector or multidimensional languages) generalize operations on scalars to apply transparently to vectors, matrices, and higher dimensional arrays. A+ Analytica APL F FISh Fortran 90 and later versions IDL J K MATLAB NESL Nial PDL ZPL SAC
Aspect-oriented languages
AspectC++ AspectJ CaesarJ CLOS Compose* JAsCo ObjectTeams
Assembly languages
www.1000projects.com www.fullinterview.com www.chetanasprojects.com
Authoring languages
Bigwig (web design language) Coursewriter PILOT TUTOR
Compiled languages
These are languages typically processed by compilers, though theoretically any language can be compiled or interpreted. Ada (multi-purpose language) ALGOL (extremely influential language design. The second high level language compiler.) o SMALL Machine Algol Like Language BASIC (some dialects, including the first version of Dartmouth BASIC) C (one of the most widely-used procedural programming languages) C++ C# (compiled into Intermediate Language bytecode) CLEO (Clear Language for Expressing Orders) used the compiler for the British Leo computers CLush (Lush) COBOL Common Lisp Corn D Delphi (Borland's Object Pascal development system) Eiffel (object-oriented language developed by Bertrand Meyer) o Sather o Ubercode Forth (professional systems, like VFX and SwiftForth) Fortran (the first high level, compiled, language, from IBM, John Backus, et al) Java (originally from Sun Microsystems; usually compiled into JVM bytecode although true native-code compiled versions exist) JOVIAL Nemerle (compiled into Intermediate Language bytecode) Objective-C Pascal (most implementations)
Concurrent languages
Message passing languages provide language constructs for concurrency. The predominant paradigm for concurrency in mainstream languages such as Java is shared memory concurrency based on monitors. Concurrent languages that make use of message passing have generally been inspired by CSP or the -calculus, but have had little commercial success, except for Ada and Erlang. Ada is a multipurpose language and concurrent programming is only one option available. Ada (multi-purpose language) Afnix concurrent access to data is protected automatically (previously called Aleph, but unrelated to Alef) Alef concurrent language with threads and message passing, used for systems programming in early versions of Plan 9 from Bell Labs ChucK domain specific programming language for audio, precise control over concurrency and timing Cilk a concurrent C C C Omega, a research language extending C#, uses asynchronous communication Concurrent Pascal (by Brinch-Hansen) Corn Curry E uses promises, ensures deadlocks cannot occur Eiffel (through the SCOOP mechanism, Simple Concurrent Object-Oriented Computation) Erlang uses asynchronous message passing with nothing shared Java o Join Java concurrent language based on Java o X10 Join-calculus Joule dataflow language, communicates by message passing Limbo relative of Alef, used for systems programming in Inferno (operating system) MultiLisp Scheme variant extended to support parallelism occam influenced heavily by Communicating Sequential Processes (CSP). o occam- a modern variant of occam, which incorporates ideas from Milner's calculus Oz multiparadigm language, supports shared-state and message-passing concurrency, and futures o Mozart Programming System multiplatform Oz Pict essentially an executable implementation of Milner's -calculus SALSA actor language with token-passing, join, and first-class continuations for distributed computing over the Internet
Curly-bracket languages
The curly bracket programming languages have a syntax that defines statement blocks using the "curly bracket" or "brace" characters { and }. All these languages descend from or are strongly influenced by C. Examples of curly-bracket languages include: ABCL/c+ Alef o Limbo AutoHotkey AWK C- developed circa 1970 at Bell Labs C shell (csh) C++ C# Ch - embeddable C/C++ interpreter ChucK - audio programming language Cilk - concurrent C for multithreaded parallel programming Coyote - safer C variant to lower the likelihood of some common errors, e.g., buffer overflows Cyclone - safer C variant D - safer faster C/C++ variant DINO E ECMAScript o ActionScript o DMDScript o E4X o JavaScript o JScript o MDMscript Frink ICI Java o Groovy o Join Java o X10 LPC Nemerle - combines C# and ML features, provides syntax extension capabilities Perl PHP Pico Pike ppC++ SuperCollider TorqueScript UnrealScript Windows PowerShell (Microsoft .NET-based CLI)
Dataflow languages
Dataflow languages rely on a (usually visual) representation of the flow of data to specify the program. Frequently used for reacting to discrete events or for processing streams of data. Examples of dataflow languages include: Hartmann pipelines LabVIEW Max Prograph Pure data VEE VisSim
Data-oriented languages
Data-oriented languages provide powerful ways of searching and manipulating the relations that have been described as entity relationship tables which map one set of things into other sets. Examples of data-oriented languages include: Clipper dBase a relational database access language M (an ANSI standard general purpose language with specializations for database work.) SQL Tutorial D, see also The Third Manifesto Visual Foxpro native rdbms engine, object oriented, functional, RAD Clarion
Data-structured languages
Data-structured languages are those where logic is structured in ways similar to their data. Such languages are generally well suited to reflection and introspection. There are three main types: Array-based List-based Stack-based
Assembly languages which statically link data inline with instructions can also be considered datastructured, in the most primitive way.
Declarative languages
Declarative languages describe a problem rather than defining a solution. Declarative programming stands in contrast to imperative programming via imperative programming languages, where serial orders (imperatives) are given to a computer. In addition to the examples given just below, all
Esoteric languages
An esoteric programming language is a programming language designed as a test of the boundaries of computer programming language design, as a proof of concept, or as a joke. Befunge Brainfuck FALSE INTERCAL Shakespeare Whitespace
Extension languages
Extension programming languages are languages intended to be embedded into another program and used to harness its features in extension scripts. AutoLISP (specific to AutoCAD) CAL Guile Visual Basic for Applications Lua REXX
Fourth-generation languages
Fourth-generation programming languages are high-level languages built around database systems. They are generally used in commercial environments. ABAP ADMINS BuildProfessional CorVision CSC's GraphTalk Focus GEMBASE Informix-4GL / Aubit-4GL
Functional languages
Functional programming languages define programs and subroutines as mathematical functions. Many so-called functional languages are "impure", containing imperative features. Not surprisingly, many of these languages are tied to mathematical calculation tools. Functional languages include: APL Charity Clean(purely functional) CodeSimian Curry Erlang F# Haskell (purely functional) J Joy Kite Lisp o Dylan o Logo o Scheme Lush Maple Mathematica ML o Standard ML Alice o Ocaml Nemerle Opal OPS5 Poplog Q REFAL Spreadsheets
Interpreted languages
Interpreted languages are programming languages which programs may be executed from source code form, by an interpreter. APL AutoIt scripting language BASIC (some dialects) CodeSimian Databus (later versions added optional compiling) Eiffel (via "Melting Ice Technology" in EiffelStudio) Forth (interactive shell only; otherwise compiled to native or threaded code) Frink J Lisp (early versions, pre-1962, and some experimental ones; production Lisp systems are compilers) Lua (programming language) Lush M (an ANSI standard general purpose language) Maple Pascal (early implementations) PostScript REXX The SDYPAIKSSVDAYSF Programming Language TorqueScript VBScript Windows PowerShell (Microsoft .NET-based CLI) Some scripting languages (below)
Iterative languages
Languages built around or offering generators Aldor Alphard CLU Eiffel, through "agents" Icon
List-based languages
List-based languages are a type of data-structured language that are based upon the list data structure. Joy Lisp o o o o o Lush Tcl TRAC
Arc CodeSimian (like Lisp, but made with Java) Dylan Scheme Logo
Little languages
Little languages serve a specialized problem domain. apply is a domain-specific language for image processing on parallel and conventional architectures awk can serve as a prototyping language for C, because the syntax is similar SQL has only a few keywords, and not all the constructs needed for a full programming language
Logic-based languages
Logic-based languages specify a set of attributes that a solution must have, rather than a set of steps to obtain a solution. Examples: ALF Curry Janus Leda Oz o Mozart Programming System a multiplatform Oz Poplog Prolog (formulates data and the program evaluation mechanism as a special form of mathematical logic called Horn logic and a general proving mechanism called logical resolution) o Visual Prolog (object-oriented Prolog extension)
Machine languages
Machine languages are directly executable by a computer's CPU. They are typically formulated as bit patterns, usually represented in octal or hexadecimal. Each group of npatterns (often 1 or more bytes) causes the circuits in the CPU to execute one of the fundamental operations of the hardware. The activation of specific electrical inputs (eg, CPU package pins for microprocessors), and logical settings for CPU state values, control the processor's computation. Individual machine languages are processor specific and are not portable. They are (essentially) always defined by the CPU developer, not by 3rd parties. The symbolic version, the processor's assembly language, is also defined by the developer, in most cases. Since processors come in families which are based on a shared architecture, the same basic assembly language style can often be used for more than one CPU. Each of the following CPUs served as the basis for a family of processors: ARM Intel 80x86 IBM 360 Intel 8008/8080/8085 MIPS R2000|R3000 MOS Tech 6502 Motorola 680x Motorola 680x0 National 32032 Power Architecture- (POWER and PowerPC) StrongARM Sun SPARC, UltraSPARC
Macro languages
Macro languages embed small pieces of executable code inside a piece of free-form text. C preprocessor m4 (originally from AT&T, bundled with Unix) PHP SMX Stage 2
Scripting languages such as Tcl and ECMAScript (ActionScript, DMDScript, E4X, JavaScript, JScript) have been embedded into applications so that they behave like macro languages.
Metaprogramming languages
Metaprogramming is writing of programs that write or manipulate other programs (or themselves) as their data or that do part of the work that is otherwise done at run time during compile time. In many cases, this allows programmers to get more done in the same amount of time as they would take to write all the code manually.
Multiparadigm languages
Multiparadigm languages support more than one programming paradigm. They allow a program to use more than one programming style. The goal is to allow programmers to use the best tool for a job, admitting that no one paradigm solves all problems in the easiest or most efficient way. Ada (concurrent, distributed, generic (template metaprogramming), imperative, objectoriented (class-based)) ALF (functional, logic) APL (functional, imperative) BETA (functional, imperative, object-oriented (class-based)) C++ (generic, imperative, object-oriented (class-based)) ChucK (imperative, object-oriented, time-based, concurrent, on-the-fly) Common Lisp (functional, imperative, object-oriented (class-based), aspect-oriented (user may add further paradigms, e.g., logic)) Corn (concurrent, generic, imperative, object-oriented (class-based)) Curry (concurrent, functional, logic) D (generic, imperative, object-oriented (class-based)) Dylan (functional, object-oriented (class-based)) ECMAScript (functional, imperative, object-oriented (prototype-based)) o ActionScript o DMDScript o E4X o JavaScript o JScript Eiffel (imperative, object-oriented (class-based), generic) J (functional, imperative, object-oriented (class-based)) LabVIEW (dataflow, visual) Lasso (macro, object-oriented (prototype-based), procedural, scripting) Lava (object-oriented (class-based), visual) Leda (functional, imperative, logic, object-oriented (class-based)) Lua (functional, imperative, object-oriented (prototype-based)) Maple Nemerle (functional, object-oriented (class-based), imperative, metaprogramming) Objective Caml (functional, imperative, object-oriented (class-based)) Oz (functional (evaluation: eager, lazy), logic, constraint, imperative, object-oriented (classbased), concurrent, distributed) o Mozart Programming System (multiplatform Oz) Object Pascal (imperative, object-oriented (class-based)) Perl (imperative, functional (can't be purely functional), object-oriented, class-oriented, aspect-oriented (through modules)) PHP (imperative, object-oriented) Pliant (functional, imperative, object-oriented (class-based)) Poplog (functional, imperative, logic) ppC++ (imperative, object-oriented (class-based))
Numerical analysis
Algae Seneca an Oberon variant
Non-English-based languages
Non-English-based programming languages do not use English keywords. ARLOGO - Arabic Chinese BASIC - Chinese Fjlnir - Icelandic HPL - Hebrew Lexico - Spanish Rapira - Russian Glagol - Russian var'aq - Klingon
o o o
Kite Lava Lua Modula-2 (data abstraction, information hiding, strong typing, full modularity -- from N Wirth) o Modula-3 (added more object oriented features to Modula-2) o Objective Modula-2 (Modula-2 with Smalltalk message passing, following the Objective-C object model) Moto Nemerle NetRexx Oberon-2 (full object orientation equivalence in an original, strongly typed, Wirthian manner) Object Pascal Object REXX Objective-C(a superset of C adding a Smalltalk derived object model and message passing syntax) Objective Caml Oz o Mozart Programming System Perl 5 PHP Pliant PowerBuilder ppC++ Prograph Python (object oriented interpretive language) Revolution (programmer does not get to pick the objects) Ruby Simula (the first object oriented language, from Norway) Smalltalk (pure object-orientation, originally from Xerox PARC) o Bistro o F-Script o Little Smalltalk o Squeak o VisualAge o VisualWorks SuperCollider VBScript (Microsoft Office 'macro scripting' language) Visual Basic Visual DataFlex Visual Foxpro Visual Prolog
Procedural languages
www.1000projects.com www.fullinterview.com www.chetanasprojects.com
Nemerle Occam Pascal (successor to Algol60 and predecessor of Modula-2) o Object Pascal Perl PL/C PL/I (large general purpose language, originally for IBM mainframes)
Reflective languages
Reflective languages let programs examine and possibly modify their high level structure at runtime. This is most common in high-level virtual machine programming languages like Smalltalk, and less common in lower-level programming languages like C. Languages and platforms supporting reflection: Aspect-oriented Befunge ChucK CodeSimian Curl ECMAScript o ActionScript o DMDScript o E4X o JavaScript o JScript Eiffel Forth Java o Java Virtual Machine o Groovy o Join Java o X10 Maple Lisp o Dylan o Logo o Scheme Lua Maude system .NET Common Language Runtime Objective-C Objective Modula-2 Perl PHP Pico Pliant Poplog o POP-11 Prolog Python REBOL
Rule-based languages
Rule-based languages instantiate rules when activated by conditions in a set of data. Of all possible activations, some set will be selected and the statements belonging to those rules will be executed. Examples of rule-based languages include: Clips Constraint Handling Rules Jess OPS5 Prolog
Scripting languages
"Scripting language" has two apparently different, but in fact similar meanings. In a traditional sense, scripting languages are designed to automate frequently used tasks that usually involve calling or passing commands to external programs. Many complex application programs allow users to implement custom functions by providing them with built-in languages. Those which are of interpretive type, are often called scripting languages. More recently many of these applications have chosen to "build in" traditional scripting languages, such as Perl or Visual Basic, but there are quite a few "native" scripting languages still in use. Many scripting languages are compiled to bytecode and then this (usually) platform independent bytecode is run through a virtual machine (compare to Java). AWK AppleScript BeanShell Ch (Embeddable C/C++ interpreter) CLIST ColdFusion ECMAScript o ActionScript o DMDScript o E4X
Stack-based languages
Stack-based languages are a type of data-structured language that are based upon the stack data structure. colorForth Forth Factor Poplog via its implementation language POP-11 PostScript Urq
Synchronous languages
Synchronous programming languages are optimized for programming reactive systems, systems that are often interrupted and must respond quickly. Many such systems are also called realtime systems, and are found often in embedded uses. Examples:
Visual languages
Visual programming languages let users specify programs in a two-(or more)-dimensional way, instead of as one-dimensional text strings, via graphic layouts of various types. CODE Eiffel (program design from BON or UML diagrams, with back-and-forth facilities (round-trip engineering) through EiffelStudio) Fabrik Hyperpascal LabVIEW Lava Limnor Mindscript software visualization and development environment, open source Max Pict Prograph Pure Data Quartz Composer Simulink Spreadsheets Subtext Tinkertoy VEE VisSim VVVV
Wirth languages
www.1000projects.com www.fullinterview.com www.chetanasprojects.com
XML-based languages
These are languages based on or that operate on XML. Although the big-boy equivalents of Oracle/PostgreSQL/MSSQL don't yet exist for XML, there are languages to navigate through it and its more tree-oriented structure. ECMAScript E4X Jelly XPath XQuery XSLT C
Computer science
Computer science, or computing science, is the study of the theoretical foundations of information and computation and their implementation and application in computer systems. Computer science has many sub-fields; some emphasize the computation of specific results (such as computer graphics), while others (such as computational complexity theory) relate to properties of computational problems. Still others focus on the challenges in implementing computations. For example, programming language theory studies approaches to describing computations, while computer programming applies specific programming languages to solve specific computational problems with solutions. A further subfield, human-computer interaction, focuses on the challenges in making computers and computations useful, usable and universally accessible to people.
History
The history of computer science predates the invention of the modern digital computer by many years. Machines for calculating fixed numerical tasks, such as the abacus, have existed since antiquity. Wilhelm Schickard built the first mechanical calculator in 1623. Charles Babbage designed a difference engine in Victorian times, and around 1900 the IBM corporation sold punchcard machines However all of these machines were constrained to perform a single task, or at best, some subset of all possible tasks.
Major achievements
German military used the Enigma machine during World War II for communication they thought to be secret. The large-scale decryption of Enigma traffic at Bletchley Park was an important factor that contributed to Allied victory in WWII. Despite its relatively short history as a formal academic discipline, computer science has made a number of fundamental contributions to science and society. These include: Applications within computer science A formal definition of computation and computability, and proof that there are computationally unsolvable and intractable problems. The concept of a programming language, a tool for the precise expression of methodological information at various levels of abstraction The theory and practice of compilers for translating between programming languages
Mathematical foundations
Mathematical logic
Theory of computation
Automata theory Different logical structures for solving problems. Computability theory What is calculable with the current models of computers. Proofs developed by Alan Turing and others provide insight into the possibilities of what may be computed and what may not. Computational complexity theory Fundamental bounds (especially time and storage space) on classes of computations. Quantum computing theory
Software engineering
Formal methods Mathematical approaches for describing and reasoning about software designs. Software engineering The principles and practice of designing, developing, and testing programs, as well as proper engineering practices. Reverse engineering The application of the scientific method to the understanding of arbitrary existing software Algorithm design Using ideas from algorithm theory to creatively design solutions to real tasks Computer programming The practice of using a programming language to implement algorithms
Computer architecture
Computer architecture The design, organization, optimization and verification of a computer system, mostly about CPUs and Memory subsystem (and the bus connecting them). Computer organization The implementation of computer architectures, in terms of descriptions of their specific electrical circuitry Operating systems Systems for managing computer programs and providing the basis of a useable system.
Communications
Game theory Recently game theory has drawn attention from computer scientists because of its use in artificial intelligence and cybernetics. Networking Algorithms and protocols for reliably communicating data across different shared or dedicated media, often including error correction. Cryptography Applies results from complexity, probability and number theory to invent and break codes. Computer Audio Algorithms and data structures for the creation, manipulation, storage, and transmission of digital audio recordings. Also important in voice recognition applications.
Databases
Relational databases Data mining Study of algorithms for searching and processing information in documents and databases; closely related to information retrieval.
Artificial intelligence
Artificial intelligence The implementation and study of systems that exhibit an autonomous intelligence or behaviour of their own.
Soft computing
A collective term for techniques used in solving specific problems. See the main article.
Computer graphics
Computer graphics Algorithms both for generating visual images synthetically, and for integrating or altering visual and spatial information sampled from the real world. Image processing Determining information from an image through computation.
Human-Computer Interaction
Human computer interaction The study of making computers and computations useful, usable and universally accessible to people, including the study and design of computer interfaces through which people use computers.
Scientific computing
Numerical algorithms Numerical solution of mathematical problems such as root-finding, integration, the solution of ordinary differential equations and the approximation of special functions. Symbolic mathematics Manipulation and solution of expressions in symbolic form, also known as Computer algebra. Computational physics Numerical simulations of large non-analytic systems Computational chemistry Computational modelling of theoretical chemistry in order to determine chemical structures and properties Bioinformatics The use of computer science to maintain, analyse, store biological data and to assist in solving biological problems such as Protein folding, function prediction and Phylogeny. Computational neuroscience Computational modelling of real brains Cognitive Science Computational modelling of real minds
Design of computers
In recognition of the high error rate in the calculation of mathematical tables, Babbage wanted to find a method by which they could be calculated mechanically, removing human sources of error. Three different factors seem to have influenced him: a dislike of untidiness; his experience working on logarithmic tables; and existing work on calculating machines carried out by Wilhelm Schickard, Blaise Pascal, and Gottfried Leibniz. He first discussed the principles of a calculating engine in a letter to Sir Humphry Davy in 1822.
Part of Babbage's difference engine, assembled after his death by Babbage's son, using parts found in his laboratory. Babbage's engines were among the first mechanical computers. His engines were not actually completed, largely because of funding problems and personality issues. Babbage realized that a machine could do the work better and more reliably than a human being. Babbage controlled building of some steam-powered machines that more or less did their job; calculations could be mechanized to an extent. Although Babbage's machines were mechanical monsters their basic architecture was astonishingly similar to a modern computer. The data and program memory were separated, operation was instruction based, control unit could make conditional jumps and the machine had a separate I/O unit.
Difference engine
In Babbages time numerical tables were calculated by humans called computers. At Cambridge he saw the high error rate of the people computing the tables and thus started his lifes work in trying to calculate the tables mechanically, removing all human error. He began in 1822 with what he called the difference engine, made to compute values of polynomial functions.
The London Science Museum's replica Difference Engine, built from Babbage's design. The first difference engine needed around 25,000 parts of a combined weight of fifteen tons standing eight feet high. Although he received much funding for the project, he did not complete it. He later designed an improved version, "Difference Engine No. 2". This was not constructed at the time, but was built using his plans in 1989-1991, to 19th century tolerances, and performed its first calculation at the London Science Museum bringing back results to 31 digits, far more than the average modern pocket calculator.
Printer
Babbage designed a printer for the second difference engine which had some remarkable features; it supported line-wrapping, variable column and row width, and programmable output formatting.
Analytical engine
Soon after the attempt at making the difference engine crumbled, Babbage started designing a different, more complex machine called the Analytical Engine. The engine is not a single physical machine but a succession of designs that he tinkered with until his death in 1871. The main difference between the two engines is that the Analytical Engine could be programmed using punch cards, an idea unheard of in his time. He realized that programs could be put on similar cards so the person had to only create the program initially, and then put the cards in the machine and let it run. The analytical engine was also proposed to use loops of Jacquard's punched cards to control a mechanical calculator, which could formulate results based on the results of preceding computations. This machine was also intended to employ several features subsequently used in modern computers, including sequential control, branching, and looping, and would have been the first mechanical device to be Turing-complete. Ada Lovelace, an impressive mathematician and one of the few people who fully understood Babbage's vision, created a program for the Analytical Engine. Had the Analytical Engine ever actually been built, her program would have been able to calculate a numerical sequence known as the Bernoulli numbers. Based on this work, Ada is now credited as being the first computer programmer and, in 1979, a contemporary programming language was named Ada in her honour. Shortly afterward, in 1981, a satirical article by Tony Karp in Datamation magazine described the Babbage programming language, the "language of the future".
Youth
Richard Feynmann pointed out that computer science is young, and therefore more volatile than other sciences: Computer science is not as old as physics; it lags by a couple of hundred years. However, this does not mean that there is significantly less on the computer scientist's plate than on the physicist's: younger it may be, but it has had a far more intense upbringing!
Alternative definitions
ACM definition
According to the Association for Computing Machinery, "The discipline of computing is the systematic study of algorithmic processes that describe and transform information, their theory, analysis, design, efficiency, implementation, and application. The fundamental question underlying all of computing is, 'What can be (efficiently) automated?'" (Computing as a discipline, Communications of the ACM, January 1989). The ACM's term "computing" is defined as "computer science and engineering".
"Computers"
The name computer science immediately gives the impression that the field is the study of computers, the everyday machines that run programs and perform computations. Nonetheless, some have argued that the field is both wider and more abstract than this name would suggest. s A Edsger Dijkstra mentions: Computer Science is no more about computers than astronomy is about telescopes. Arguably, the comment of Dijkstra refers to a narrow definition of computer (e.g. a digital computer). However, if a computer is defined as the any physical system or mathematical model in which a computation occures, then the definition of CS as the science that studies computers is not as narrow as the science that studies digital computers.