Programming: Languages, Timeline, and Guides

programming resources

Computer programs are often described as "sets of instructions",and computer languages are thought of by many as merely the syntax and vocabulary for providing these instructions.

From this point of view, different programming languages may have different grammars, or different vocabularies. Each may treat semi-colons a particular way, or require capitalization -- but they are sort of the same underneath all that.

The reality of programming is much more complicated than that.

Programming Today

It's weird to think of, but most of the really "big" ideas in computer programming were developed in the 1950s and 60s. Many new languages have developed since then, but none of them represent a truly novel approach to logic and computation.

The development of new programming languages in the last few decades has focused a lot on developer experience. This may mean trying to enable code that is easier to write (the driving force behind Ruby) or easier to read (Python), or making certain types of logical structures and modes of problem solving more intuitive.

Some languages have been developed to solve particular problems in programming (PHP and SASS, for example), to manipulate certain types of systems (SQL), or to run in a particular environment or platform (Java and JavaScript). A number of languages have been developed for the purpose of helping newcomers learn programming (BASIC and Scratch are classic examples).

Since theories and practices around language design have (mostly) settled into a widely recognized orthodoxy, much of the new and interesting work in the development of programming practice currently centers around system architecture.

Relatively recent development include concepts like SOA (Service Oriented Architecture) and MVC (Model-View-Controller), and frameworks like Ruby on Rails that enable programmers to easily work within these paradigms.

List of Coding Languages

A growing list of popular programming langauges, markups and protocals. Follow the links for in-depth guides on each.

Advanced Business Application Programming, or ABAP, is one of the two languages that are used to create SAP applications. SAP is one of the biggest enterprise resource planning systems in use today, and so is very important in the business community. Find out more: ABAP Introduction and Resources.
ActionScript is the programming language used to create Adobe Flash applications. Although Flash may be less important than it once was because of HTML5, it is still an exciting development system for creating graphics and games. Learn all about it: ActionScript Guide and Resources. See also: Adobe Flash Introduction and Resources.
Ada is a programming language developed for the US Department of Defense for creating mission-critical applications. Although it isn't widely used, it is the language of choice when safety is critically important like in air traffic control applications. Find out more: Ada Programming Introduction and Resources.
ALGOL was one of the earliest high level languages. But unlike Fortran and COBOL, it isn't much used. Just the same, it has been very important as a model for languages that came later. See: ALGOL Introduction and Resources.
Alice is a visual programming language, used to teach students basic computer science concepts. It uses 3D objects and a point-and-click interface to provide an easy way for students to get started with traditional programming. Learn more: Alice Programming Resources.
APL is short for A Programming Language, and it is indeed that. Although it was created in the early 1960s, it is still in use because of its power. Just the same, it is a very strange language. Find out all about it: APL Introduction and Resources.
ASP is short for Active Server Pages. It was the first server side scripting language for Microsoft's IIS web server. ASP was replaced by ASP.NET, an open-source server side framework. Also see: ASP Primer.
Assembly Language
Assembly language is the most fundamental kind of software development where the coder has complete access to the CPU. Whether used directly or as a way to better understand computers at the hardware level, assembly language programming is a powerful skill to have. Find out more: Assembly Language Introduction.
Awk is an enormously powerful text processing programming language that allows you to extract the data that you need from a file or other source and output it in any format you want. It is an old tool, but still as useful as ever. Find out all about it: Awk Resources.
Bash is the most commonly used command-line interface in the Unix world. It is the default text based interface for both Linux and Mac OS X. See our: Bash Scripting Guide.
BBC Basic
It might seem hard to believe but in the early 1980s, the television broadcaster BBC had a computer and programming language developed simply for the purpose of producing an educational series, The Computer Programme. And it was successful! Now its an amazing bit of computer history, but you can still get and use the language. Find out more about this amazing chapter of computer history: BBC Basic Introduction and Resources.
If you include its two derivatives, no language has had more use and more impact than C. It is especially important for the development of Operating Systems and other foundational software. Many compilers and interpreters for other languages are written in C. See: C Developer Resouces.
Originally "C with Classes," C++ is, in many ways, simply a more advanced successor to C (though the situation is a lot more complicated than that). C++ was developed to add high-level programming paradigms to C, while retaining the low-level hardware-manipulation capabilities. Many of these additions have been added to C over the years, and the languages are more like two dialects a single language. See: C++ Developer Resources.
Used as the primary language for .NET programming, and much like C++, it is an extension of the C programming language with the major addition being object oriented capabilities. See C# Resources.
C Shell
The C shell (csh) is a command-line interface, first developed for Unix machines. It was designed to have a syntax that was more like the C programming language. Although the earlier Bourne shell remained the standard for scripting, the C shell's many great interactive features made it very popular as a command shell. Learn more: C Shell Introduction and Resources.
COBOL is one of the oldest high level programming languages. And many people think it is dead. But it is still in use throughout business and government doing mission critical tasks. And that code still needs to be maintained and expanded. It offers an unusual opportunity to young software developers. Learn more: COBOL Introduction and Resources.
ColdFusion is an Adobe product designed for rapid website development. Like most Adobe products, there is a whole lot to it. This article provides an introduction to it and lots of resources to learn more. Get started now: ColdFusion Introduction and Resources.
CSS, or Cascading Style Sheets, is not a programming language, but a style sheet language — a language for providing style and layout rules to documents and applications. It is the primary style language used on the web. See: CSS Resources.
Just as the C programming language came about because of deficiencies in the B programming language, D was designed to fix C. In particular, D makes C object-oriented. But unlike C++, which did the same thing, D is not backward compatible, and so doesn't contain some of the weaknesses of C++. Learn all about it: D Programming Language Primer.
DHTML isn't actually a language, but a combination things: HTML, CSS, JavaScript, and DOM. Although we don't talk much about it these days, it is still the basis of our modern, dynamic web pages. Find out more: DHTML Introduction and Resources.
Dreamweaver is a powerful website building tool that allows the user to create visually without losing the complete control of hand coding. Find out more: Dreamwaver Introduction and Resources.
ECMAScript for XML (E4X) is not a language all by itself, but an extension of JavaScript to make it as easy to work with XML. Learn more: ECMAScript for XML Guide and Resources.
Elixir is a functional computer language designed for creating large-scale concurrent and distributed applications such as social networks. Want to created the next Facebook? Elixir may be the language to use. Learn all about the language, its basis on Erlang, and functional programming generally: Elixir Primer and Resources.
Erlang is an old programming language, first designed to address telecommunications problems. But its emphasis on concurrent design has made it increasingly popular for the development of distributed applications like games and ecommerce applications. Learn all about it: Erlang Resources.
F# is a general purpose programming language, designed to be extremely efficient. At first only a Microsoft language, it is now open source and used on all platforms. Learn more on our F# Resources page.
Work began on Forth in 1968, and is commonly used on hardware that doesn't have a traditional operating system. It is also widely used to control machinery. See: FORTH Resources.
Fortran first appeared in 1957 and is still used today to solve some of the most complicated problems in modern science and engineering. See: Fortran Resources.
Functional Programming
Functional programming describes both certain kinds of languages and an approach to programming. Get introduced to this system and find out how to learn more. See: Functional Programming Introduction and Resources.
GNU Octave
GNU Octave is an interactive programming environment for numerical computation. It is the most direct free alternative to MATLAB. Learn more: GNU Octave Introduction and Resources.
The Go programming language, or golang, was released by Google in 2007. It was based on C and designed to remove some of the complexities out of C++. Although originally created as a systems programming language, it is now even used to create smartphone apps. Learn all about it: Go Programming Introduction and Resources.
Haskell is one of the most popular functional programming languages, in addition to being the basis for about a dozen others. It is widely used in business and academia and is a great language to get started with function programming. For more, see our Haskell Resources.

HTML is not a programming language, it is a markup language — a language for adding semantic and stylistic annotations to content. It is the primary language for web content, and is a fundamental skill for web designers and web developers, as well as for anyone (writers, editors) who produces content for the web. Learn all about it: Ultimate Guide to HTML.

See also:

We have created a great resource for those who want to move up to HTML5: The Ultimate Guide to HTML5.
IDL, or Interactive Data Language, is a computer programming language used primarily for data analysis and visualization. It is still widely used in aerospace and astronomy. See our IDL Resources.
INTERCAL is a parody computer language designed in the early 1970s. It was meant to make fun of the tendencies for programming languages to be overly technical and difficult to understand. But it's still a real language that you can download and maybe even get to do things for you. This is assuming you are nice enough — but not too nice, because INTERCAL doesn't like that either. Check out our cheeky INTERCAL Introduction and Resources for more information.
Java is a high level language designed to be used by the Java Virtual Machine. It has very few external dependencies, and was intended to be able to run on any physical machine. It is used a lot in network architecture and also in embedded devices, kiosks, and other in situ computing applications. See our detailed guide to Java.
JavaScript (which has no actual relation to Java), is a scripting language developed originally for use in web browsers. Because of that, it has built-in facility for dealing with the Document Object Model, the in-memory representation of the content of a webpage. It is the primary programming language for front-end web development. More on Javascript.
Node.js is a runtime environment that allows JavaScript to be used to create server-side applications. Find out more: Node.js Introduction and Resources.
jQuery is a JavaScript library that makes writing code much easier and faster. Find out more: jQuery.
Bootstrap is a popular front-end development framework that is JavaScript heavy. Learn more: Bootstrap Resources.
JavaScript for Designers
This is a tutorial that shows how to use JavaScript more effectively for front-end development: JavaScript and jQuery for Designers.
CoffeeScript is a language for fast and efficient coding that compiles into JavaScript. Get started with it here: CoffeeScript Introduction and Resources.
Functional JavaScript
JavaScript is not a functional programming language. But it can be used as one, especially if it is used with the right libraries. Learn all about it: Functional JavaScript Introduction and Resources.
JavaScript Style
This primer explains how to write JavaScript in a style that will be easier for you and other programmers to read and maintain. Learn more: JavaScript Style Guide.
The Korn Shell (ksh) is a command-line interface used on Unix machines. It was an early shell that was compatible with the standard Bourne shell, but with all the great interactive features of the C shell. See our Korn Shell Programming Resources for more information.
LabVIEW is a graphical programming language especially designed to help scientists and engineers solve the problems they face. It is particularly focused on creating applications that interface with and control hardware. Learn more about it: LabVIEW Programming Introduction and Resources.
Lisp is one of the earliest high level programming language. It is a general purpose language, but is most associated with work in artificial intelligence. There are a number of popular dialects of it.
AutoLISP is a simple, lightweight, interpreted programming language built specifically to automate computer aided design software. Read all about it: AutoLISP Resources.
Clojure is a Lisp dialect written for the Java Virtual Machine, making it available on almost all computers. Find out more: Clojure Introduction and Resources.
Common Lisp
Common Lisp is is an expanded dialect of Lisp that adds, among other aspects, object-oriented programming. See: Common Lisp resources.
Emacs Lisp
Emacs has long been a popular and powerful text editor. But the inclusion of Emacs Lisp into it turns it into an integrated development environment for almost any programming language you can name. Learn all about it in our Emacs Lisp Resources Page.
Scheme is an old language that is still used today to teach programming and more advanced subjects in computer science. It is based mostly on Lisp, but also parts of ALGOL. Read all about it in our Scheme Resource page.
Logo was one of the earliest teaching programming languages, and still probably the best known. It was famous for its turtle that children would cause to move around with computer commands. It is a fun way for kids to become familiar with programming. Find out all about it: Logo Programming Resources.
MATLAB is both a programming language and an environment. Originally created to do matrix calculations, it has grown into an enormously powerful tool for developers throughout industry, government, and academia. Learn all about it: MATLAB Resources.
MetaQuotes Language
The MetaQuotes language was developed for use with MetaTrader Software. It allows developers to create trading robots. But there are two competing, and rather different versions: MQL4 and MQL5. But if you want to get into financial trading programming, you needn't worry. We have all the resources you need to figure it out. Find out more: MetaQuotes Programming Resources.
ML was originally designed as a meta-programming language: a language to be used to create other languages. But over time, it has come to be a general purpose language, widely used in education as well as math, science, and even finance. Find out all about it and get started working with it using our ML Resource and Introduction.
Although Modula-3 is not used much anymore, it is incredibly important in the development of programming languages. What's more, there's still plenty of Modula-3 code out there needing to maintained. Learn more: Modula-3 Introduction and Resources.
MS Access
MS Access is a database system. Although it isn't use that much anymore, it is still a great tool for small projects. And there is a huge number of legacy systems that depend upon MS Access. It can be critical to know: MS Access Introduction and Resources.
MySQL is one of the most popular database systems in the world. It is especially important as the basis of content management systems like WordPress. Find out about it and get the resources to learn more: MySQL Introduction and Resources.
The NXT-G programming language was designed to create and control robots using the LEGO MINDSTORMS NXT robotics kit. It is intended to introduce children to programming and robotics, but a lot of adults use the system too because it's fun and interesting. Learn more: NXT-G Programming Resources.
Another version of C, created in the 1980s to provide a fully Object-Oriented implementation of C. Its primary use now is on the Mac OSX and iOS operating systems. Until recently, iOS apps had to be written in Objective-C, but now Swift is an option as well. More on Objective-C.
OCaml is an object-oriented functional computer language. In the tradition of ML, it is used a great deal for writing other programming languages and development frameworks. Find out more: OCaml Introduction and Resources.
OO Concepts
This is the sister article of Object-Oriented Programming Languages. It explains the concepts that make languages like C++ object-oriented. Find out more: Object-oriented Programming Concepts.
OO Languages
This is the brother article of Object-Oriented Programming Concepts. It provides a general introduction to object-oriented programming, but is more focused on over a dozen object-oriented and quasi-object-oriented languages, providing resources for learning more about all of them. See: Object-Oriented Programming.
A very useful tool for almost any programmer. As an interpreted language it does not need to compile, and is sometimes refered to as the "swiss army knife" of scripting langauges. Learn more: Perl Resources.
PHP is the most popular server-side language on the internet today. It is incredibly powerful yet easy to learn. Get started today: PHP Introduction and Resources. See also: PHP Security Primer and Cheetsheet.
PL/I — or "Programming Language One" — dates back to the 1960s. Although never as popular as Fortran and COBOL, there is still PL/I code in use that needs maintaining and converting. See: PL/I Developer Resources.
PL/SQL is a procedural language build on top of SQL for programming for Oracle databases. Learn all about it: PL/SQL Introduction and Resources.
PostgreSQL is an advanced relational database system — the biggest open-source competitor to MySQL. Although not as popular as MySQL, PostgreSQL is generally more powerful. Find out more: PostgreSQL Introduction and Resources.
PostScript is a specialized programming language used primarily for describing graphics and page layouts. It is incredibly powerful. Find out about its history and how to learn more: PostScript Introduction and Resources.
Prolog is a logic programming language, designed to do natural language processing. Learn more: Prolog Intro & Resources.
Pure Data
Pure Data is a unique visual programming language. It was created especially to allow users to creating video, audio, and graphic works. Learn about it and where to find out more in our Pure Data Resource Page.
Python is a high-level programming language. It is an interpreted (not compiled) language, also known as a "scripting language." It is mostly used as a tool for performing ad hoc programming tasks such as task automation and data analysis. It has a strong set of tools for mathematical and scientific computing, and is frequently used by researchers. Learn more: Python Resources.
R is a free and open-source programming language for statistical analysis and the creation of great looking data visulalizations. Find out more: R Programming Language Introduction and Resources.
RapidWeaver is a website building tool. Written for the Mac, it has a number of advantages over online website building tools. See: RapidWeaver Primer and Resources.
RavenDB is a NoSQL document-oriented database written especially for the .NET framework. Learn more here: RavenDB Introduction and Resources.
Rexx is a scripting language written by IBM for its mainframe computers. But it became much more widely used. Learn more: Rexx Introduction, Tutorials, and Resources.
Ruby on Rails
Ruby is a popular programming language. It is particular associated with Rails, a web development framework for the Ruby programming language. It provides an MVC (Model View Controller) architecture, a database abstraction layer, and a lot of tools to speed the process of web application programming. Find out more: Ruby on Rails.
S-PLUS is a commercial version of the powerful programming language S, designed for doing statistical analysis. The GNU project has its own version of S called R. We provide all the resources you need learn S with an emphasis on S-PLUS. Find out more in our S-PLUS Programming Resources Page.
SAS is a specialized language designed to analyze statistical data. It is widely used in government, academia, and business. For people who have a lot of data they need to make sense of, SAS is an obvious choice. Learn more: SAS Programming Resources.
Scala is a relatively new language — more or less a new and better Java. It's a great language for Java programmers who want to be more efficient, or people just starting out who want to learn a powerful language that won't limit them in the future. Learn all about it: Scala Resources.
The Scratch programming language was created specifically to teach programming to children ages 8 to 16. Using Scratch is easy, and it introduces the basics of programming logic to children in a fun way. Learn all about it with out Scratch Resources.
Scilab is a free open-source high level computational programming language, similar to MATLAB and GNU Octave. Find out more: Scilab Introduction and Resources.
Sed is a powerful text processing tool and simple programming language that allows you to edit text files (or streams) using regular expressions. Find out all about it: Sed Introduction and Resources.
Standard Generalized Markup Language (SGML) is the granddaddy of markup languages and the basis of HTML. Learn more about it here: Standard Generalized Markup Language Introduction.
Simula is a very important language historically, as it was the first language to introduce the concepts which became the basis for Object Oriented Programming. More on Simula's interesting history.
Smalltalk is a hugely influential object-oriented programming language. Over the years, it has become less widely used. But with the release of the development framework Seaside, Smalltalk has seen a resurgence in use, because it makes just about any Smalltalk implementation easy to use to create web applications. Get started with Smalltalk today: Smalltalk Programming Resources.
GNU Smalltalk
GNU Smalltalk is one of many modern implementations of the Smalltalk programming language. But unlike all the rest, it has no integrated development environment (IDE). For those more comfortable with traditional editors and command-line interfaces, GNU Smalltalk has much to recommend it. Find out more: GNU Smalltalk Resources.
Smalltalk/X is a free, but proprietary, implementation of the Smalltalk programming language. It provides one of the easiest ways for people new to Smalltalk to get started. Learn more: Smalltalk/X Primer.
Squeak is a free and open-source implementation of Smalltalk-80, the early object-oriented programming language. Learn the basics and how to get started with it: Squeak Programming Primer.
SMIL (Synchronized Multimedia Integration Language) is a tool for people who want to create and distribute presentations. It is especially useful if you want to create presentations that need to be updated from time to time. See SMIL Guide.
SNOBOL is a family of programming languages created in the 1960s especially for the purpose of processing text. Since then, more powerful tools have been developed, but it is still quite interesting, especially within the history of natural language processing and chatbots. Find out more: SNOBOL Text Processing and Programming Language.
SQL is the Structured Query Language, a language used to communicate with Relational Database Management Systems (RDBMSes). SQL allows a programmer to create data structures, insert and edit data, and query data. See SQL Guide.
SQLite is the most popular database system in the world because of its widespread use in smartphone apps. Unlike MySQL, it is not a client/server but an embedded system, making it simple and fast for most applications. Learn more: SQLite Introduction and Resources. And learn the tricks to using it the best way possible: Optimizing SQLite.
Server Side Includes (SSI) is a simple language for adding dynamic elements to otherwise static websites. It also allows you to create easy uniformity and maintainability on your site. Learn about it: Server Side Includes Primer.
Stata is a development environment and programming language for solving serious statistical problems. Although it's been around a long time, it is still widely used by a very active community. If you do statistical work, Stata is a great tool to know. Find out more: Stata Programming Resources.
Swift is an programming language developed by Apple for iOS, OS X, watchOS, tvOS and Linux development. It is the language of the future for developers of programs and apps for Apple devices. Find out more at our Swift Resources page.
Tcl is a powerful scripting language and Tk is the toolkit that allows programmers to create graphical user interfaces for their Tcl applications. Learn all about it: Tcl and Tk Introduction and Resources.
TeX and LaTeX
TeX and LaTeX are languages that allow coders to typeset documents. Using them is quite different from using a word processor, but far more powerful and easier for typesetting long documents like books. Learn all about them: TeX and LaTeX Introduction and Resources.
Unified Modeling Language
Unified Modeling Language (UML) is a graphical modeling language used to design and visualize large computer systems. It is generally used before a project is started so that it can be better managed. Find out more: Unified Modeling Language Introduction.
VBScript is kind of like the under-achieving brother of Visual Basic. But it is actually a very useful tool. Traditionally, it has been used by Windows system administrators to automate routine chores. It is also used as the macro language in Microsoft applications like Word and Excel. Learn more: VBScript Introduction.
Verilog is a hardware description language — like a programming language, but for designing (and increasingly building) hardware. If you want to get into the computer chip design business, Verilog is one of the first places to start. Find out more: Verilog Programming Introduction and Resources.
VHDL is the other popular hardware description language. In fact, most professionals who know VHDL also know Verilog. Learn more about it: VHDL Primer and Resources.
Visual Basic
Visual Basic is still one of the most popular languages for use with the Microsoft .NET framework. Get started: Visual Basic and Visual Studio.
Visual FoxPro
Although no longer actively developed by Microsoft, Visual FoxPro is still a very popular database application development environment and programming language. There is a huge installed base of business applications that still need to be maintained, so programming professionals still use it. Find out more about it: Visual FoxPro Primer.
Virtual Reality Markup Language (VRML) was created in the late 1990s as a way of describing virtual worlds. It created a lot of excitement for a time, but never really took off. Learn more: VRML Tutorials, Resources, and Books.
WAP (Wireless Application Protocol) and WML (Wireless Markup Language) were two early technologies used to deliver and render webpages on mobile devices. Technology has made then unnecessary, but they are an important part of the history of today's smartphones. Learn all about it: WAP/WML Introduction and Resources.
XML is the a highly structured markup language that is designed to be both human and machine readable.
Basic Guide
Learn the basics of XML and get access to other tools and resources. See XML Guide and Validators.
Find out how to use document type definitions with XML. See: Document Type Definition Introduction.
DOM Nodes
Learn all about XML and how it interacts with Document Object Model (DOM) nodes. Find out more: XML and the Document Object Model.
Find out how to convert XML files into printed documents. See: XSL-FO Introduction and Resources.
Find out how to transform XML files into other kinds of files. Learn more: XSLT Introduction and Resources.
XUL or XML User Interface Language allows you to create rich GUIs for web or stand-alone applications. Find out more: XUL Introduction, Tutorials, and Resources.
XPath is a query language used to locate and select content in an XML or HTML document. Learn more: XPath Introduction and Resources.

More than advances in technology and manufacturing, the history of computer science is really about the development of programming and programming languages. It is more about advances in math and logic than about processors and megabytes.

List of Programming Tools and Libraries

Here is our growing list of in-depth guides to programming tools and libraries.

If you develop database-driven applications using the .NET framework, then you need ADO.NET. It allows you to access data in a database-independent way. Find out more: Introduction to ADO.NET.
AI Programming
Although not a specific library or tool, artificial intelligence (AI) is a special way of coding computers that is more and more common. Learn all about it: AI Programming Introduction and Resources.
ASCII Encoding
Character encoding is one of the most basic aspects of computers and the internet. ASCII was the first widely used character encoding system. It has been superseded by UTF-8, but ASCII is still the basis for the vast majority of the internet today, and understanding it is critical for programmers. Read all about it: The Ultimate Guide to ASCII Encoding.
Aspect-oriented programming (AOP) is a paradigm that allows you to monitor exactly when different methods in your programs fire. Learn more: Aspect-Oriented Programming Introduction and Resources.
Backbone.js is a flexible JavaScript library for creating single page web applications. Learn more: Backbone.js Introduction and Resources.
CakePHP is a rapid-development framework for PHP. It is easy to use, even for PHP novices. What's more, it uses MVC architecture to make maintaining code easier. Find out more: CakePHP Introduction, Tutorials, and Resources.
The Common Gateway Interface (CGI) is a way to run programs via the web. It isn't a popular coding choice these days with alternatives like PHP. But it still has its uses. Learn more: CGI Tutorials and Resources. See also: CGI Primer.
Cocoa is an API for Mac OS X, and Cocoa Touch is the same thing for Apple iOS. Closely tied to the Objective-C and Swift programming languages, they are important parts of developing applications for Apple products. Find out more: Cocoa and Cocoa Touch Introduction.
CodeIgniter is a lightweight and easy-to-use PHP framework. There is a bit of wrinkle in that version 3 is not compatible with version 2. Get all the details: CodeIgniter Intro, Tutorials, and Resources.
Cookies are a critical part of web programming. Find out what you need to know here: The Ultimate Guide to Cookies.
CORBA is a system for creating distributed application that are language, OS, and hardware independent. Learn all about it: CORBA Introduction and Resources.
CSS Colors
This resources provides a full introduction to using colors in CSS, but mostly it is a list of CSS color names. So instead of "#ff7f50" you can use "coral." Find out more: CSS Colors Reference.
The Concurrent Version System (CVS) is a version control system. Although not as popular as it once was, it is still widely used. Learn more: CVS Introduction and Resources.
The Document Object Model (DOM) is the tree-link structure of web pages. It is critical to understand in creating dynamic web pages. Find out more: DOM Introduction and Resources.
Enterprise JavaBeans (EJB) are a sever-side API for creating enterprise web applications. Get started with them here: Enterprise JavaBeans Introduction and Resources.
FFmpeg is a set of audio and video tools for creating multimedia content. It supports most media formats and codecs. Learn all about it here: FFmpeg Introduction and Resources.
General Architecture for Text Engineering (GATE) is a suite of tools for the Java programming language that can be used for human language processing, analysis, and information extraction. Learn all about it: GATE Introduction and Resources.
Git is a popular distributed version control system. We've put together an introduction for it as well as simple command list. Find out all: Git Primer, Resources, and Cheat Sheet.
GNUstep is a free, open source application platform — very similar to Apple's Cocoa platform. It allows programmers to develop applications for multiple computing platforms without much extra work. Find out all about it: GNUstep Application Development Platform.
Graphics Gems
In the 1990s, a set of 5 classic books came out, Graphics Gems. In the 2000s, a set of 3 classic books followed, GPU Gems. Learn all about them: An Overview of Graphics Gems and GPU Gems.
ImageMagick is a collection of command-line tools for doing graphics manipulation. But more important, it has an API with hooks into various programming languages. This allow languages like C++, Perl, and PHP to use its graphics algorithms in applications written with them. Find out more: ImageMagick Introduction and Resources.
The ISO-8859-1 standard is an extension of the base 7-bit ASCII character set. This article discusses it and provides a complete list of the characters and the codes for use in webpages. See: ISO-8859-1 HTML Reference.
JSON is short for JavaScript Object Notation, but it is used by most languages to transport data between browser and web server. Find out more: JSON Introduction and Resources.
Laravel is one of the most popular PHP frameworks on the internet. It is built with the MVC paradigm, so that not only is application development fast, but maintenance and upgrading are easy. Learn more about it: Laravel Introduction, Tutorials, and Resources.
Mantis Bug Tracker (MantisBT) is a free, open source bug tracking system. Being web-based, it is a particularly compelling choice for a distributed group of developers. Learn more: MantisBT Introduction and Resources.
The Mozilla Developer Network (MDN) is a collection of people, tools, and documents that help to maintain and improve the open internet. Find out more: Mozilla Developer Network Introduction and Resources.
Mercurial is a distributed version control system, similar to Git. Find out all about it: Mercurial Introduction and Resources.
MIME types are critically important so that programs can know what kind of data they are dealing with. Learn more: MIME Introduction and Resources.
Message Passing Interface is a standard messaging protocol for passing messages between processes or programs. It has been implemented in a number of programming languages, including C, C++, Java, and Python. MPI has helped enable the rise of parallel computing. See our Guide to MPI.
MSXML is a set of development tools for the Microsoft development environment for creating XML applications. It is not, however, consistent with the .NET framework and so is used less and less. Find our more: MSXML Introduction and Resources.
Ncurses is a library that allows text-based user-interfaces to be created that will be terminal independent. It's still useful for lightweight applications and is used in many of the hacker's favorite applications. Learn more: Ncurses Introduction and Resources.
The .NET Framework is the base system for created applications for the Windows environment. Learn all about it: .NET Introduction and Resources.
Network Programming
Network programming is the process of connecting computers together into networks, and building software systems that run across that network. A socket is a data endpoint for that connection, providing an interface (API) for communicating with the system from outside it. Most network sockets are internet sockets, which means that they use the Internet Protocol for communication. More about network programming and sockets.
Network Common Data Form, NetCDF, is a format for storing scientific data and libraries for manipulating and using it. Although quite old, it has kept pace with the times and is still widely used. Find out all about it: NetCDF Introduction and Resources.
You have doubtless used this system many times, but you may not know it. For example, some commenting systems let you log in with your Facebook or Google+ account. This is done with OAuth. More on OAuth.
OpenCL is a C/C++ framework designed for creating applications that will run on various platforms. So the same code can create an application on Windows 10, Android 6, and (potentially) the Apple Watch. Find out more: OpenCL Programming Introduction.
OpenID is a free system for lettering users and applications authenticate with each other in a secure way. Learn all about it: OpenID Introduction and Resources.
OpenSSL is a software library for creating secure websites using SSL/TLS. Find out about it and alternatives here: OpenSSL Introduction, Tutorials, and Resources.
OS Development
The Mount Everest of programming challenges is operating system development. If you want to prove to yourself that you can code anything, there is nothing better than writing your own operating system kernel and related tools. We provide you with an introduction and the resources to start you on your way. But beware: this is a journey for only the bravest and truest of programmers! Find out more: Operating System Development Resources.
Although no longer actively developed, PHProjekt is still widely used to manage projects. Learn more: PHProjekt Project Management System Resources. Also see: Alternatives to PHProjekt
Project Management
Creating software is about a lot more than just programming. This extensive resource will show you all you need to know to get started. Find out here: Project Management Tutorials and Resources.
If you do website programming, eventually you will find yourself trying to control robots. There are two ways to do this. You can deal with them on a site-wide basis with the robots.txt file. Learn all you need to know: Robots.txt Ultimate Guide. If you want to control how robots interact with your site on a page-by-page basis, you will need to use the robots meta tag. Check out: The Ultimate Guide to the Robots Meta Tag for Developers.
Sorting Algorithms
Sorting is one of the most basic things that computers do. In this resources, we go over five of the most popular sorting algorithms and provide information on learning more. Find out all about it: Sorting Algorithms Introduction and Resources.
SSH, or Secure Shell, is a protocol that allows users to communicate with remote computers in a secure way. Find out more: SSH Introduction and Resources.
SSH Clients
Once a SSH server is set up, you will mostly be using it through a SSH client. Learn about your options: SSH and PuTTY.
SOAP is a messaging protocol that allows computer programs to exchange data with each other. It is language independent and allows web applications to use and present data other websites or applications. Get start now: SOAP Introduction and Resources.
Subversion is a free and open source version control system. It is web-based with the repository centrally located so as to keep resource usage on coders' computers to a minimum. Find out more: Subversion (SVN) Introduction and Resources.
Unicode is the system that allows characters from all languages to be displayed on computer systems. If you want your code to work with all languages, you need to learn about Unicode. Read all about it: Unicode Introduction and Resources.
The Uniform Resource Locator (URL) is a critical part of the web and something that coders need to fully understand. Find out all about it: What is a URL?
Vi is an old text editor that is still very popular among programmers — especially those working with Unix systems. Learn more about it: Vi Introduction and Resources.
WebKit Web Inspector
WebKit Web Inspector allows developers to remotely debug JavaScript on Safari and other WebKit-compliant browsers. It's a great tool for dealing with tablets and phones. Find out more: WebKit Web Inspector Introduction and Resources.
Web Standards
The web wouldn't work if we weren't all speaking the same "language." Web standards allow the same web page to display properly on a desktop computer, a tablet, a phone, and more. Learn all about it: Introduction to Web Standards.
Web Services Description Language (WSDL) is an old XML-based system for describing web services. But it is still very popular and useful. Get start now: Web Services Description Language.
The Web Server Gateway Interface (WSGI) is a specification that allows Python frameworks to work correctly with all web servers. It is built into modern frameworks, but critically important for people developing new frameworks. Learn more: Web Server Gateway Interface Primer.
The Yahoo! User Interface (YUI) library allows JavaScript programmers to more efficiently develop dynamic webpages. But it is no longer being developed. Learn more about it: YUI Introduction, Tutorials, and Resources.
Zikula is a PHP framework for creating dynamic and maintainable websites and applications. Find out more: Zikula Introduction and Resources.

List of Programming Environments

A lot of programming is hardware specific. Check out our growing list of in-depth guides to operating systems and other environments.

Chyrp is a micro-blogging platform written in PHP. Although not a development platform, it is an excellent system to code for. Learn more: Chyrp Micro-Blogging and Alternatives.
Debian was one of the earliest Linux distributions, and a large number of other popular distributions are based on it (eg, Ubuntu). It still has a large and loyal user base and provides an easy way to get started using Linux. Find out more: Debian Primer.
Gentoo Linux
Although Gentoo is not a terribly well known Linux distribution, it is very popular among power users. It allows enormous control over exactly what is installed. Find out all about it: Gentoo Introduction.
Linux Programming
Linux programming involves everything from shell scripting through applications development all the way to kernel development. You can find out everything we know in our Linux Resource.
Mandriva Linux
Mandriva is a now defunct Linux distribution. But there are a number of forks of it that live on. Find out more: Mandriva Linux Introduction and Resources.
MS-DOS was the original Microsoft operating system for the IBM PC. It is no longer supported, but it is still around and used more than you might think. Learn all about it: The History and Impact of MS-DOS.
MS-Windows is still the most popular operating system in the world. Learn more about it: MS-Windows Introduction and Resources.
Raspberry Pi
The Raspberry Pi offers a great environment to get started creating specific hardware applications like MP3 players and drone controllers. Find out more: Raspberry Pi Introduction and Resources.
SilverStripe is a content management system (CMS) and a PHP framework. If you are looking for an easy way to create web apps, this is a good way to go. See: SilverStripe Introduction and Resources.
Ubuntu is one of the most popular Linux distributions. It is designed to be especially easy to install and use. If you'd like to get started with Linux, Ubuntu is a good choice. Learn more: Ubuntu Primer.
Umbraco is a .NET-based content management system written in C#. Find out all about using it and developing for it. See: Umbraco Introduction and Resources.
UNIX Programming
The breadth of Unix programming is great. It spans a range from administrative scripting to text based coding to X Window development. More: UNIX Programming Resources.
SilverStripe is a content management system (CMS) and a PHP framework. It is still used but development on it has slowed. Find out more: Xaraya Introduction, Resources, and Alternatives.

Related: Web Hosting Guide | Webmaster Tools | Database Administration

Programming History and Timeline

Computer programming is, at heart, mechanical. The great challenge for early computing was figuring out how to mechanize logic and mathematical computation. Technological advancement — inventing new components and miniaturizing them — came much later. The first computer — Charles Babbage's difference engine — was made out of gears, and powered by a hand crank.

But the problem with the difference engine is that it could only solve one kind of problem. In order to generalize the usefulness of this mechanical calculator, it needed to accept two kinds of input — data and programming. Babbage's theoretical new machine, the Inference Engine, solved that problem.

Though Babbage's Inference Engine was never built in his lifetime, the very first computer program was written to be run on it. Ada of Lovelace, a Countess and hobbyist mathematician, wrote programs for Babbage's computation device.

Modern Programming

In the 20th century, programming became a well-developed science — a branch of theoretical mathematics. This led to the development of modern programming languages.

There were several competing ideas about nature of computer programming and how languages should be structured. The "winner" turned out to be a set of ideas promoted by John von Neumann — ideas which included logical control structures like IF and LOOP.

This so-called "von Neumann architecture" allowed for the advent of programming as we know it today, and the development of high-level computer programs. It has dominated the logic and structure of every major programming language since. Only a handful of non-von-Neumann languages (such Plankalkül) exist, and none of them have gotten any widespread use.


The Jaquard loom, which uses punch cards to store weaving designs, is invented. The idea of storing data on punched paper cards would later influence computer design. The first computers were programmed with punch cards, and punch cards continued to be used in some types of computing into the 1980s.
Ada, Countess of Lovelace, develops an algorithm for Charles Babbage's Analytical Engine. The algorithm computed Bernoulli numbers and made Ada the world's first computer programmer.
The Atanasoff-Berry Computer (ABC) was first tested. It was conceived in 1937 and then build by Iowa State University professor John Vincent Atanasoff and then graduate student Clifford Berry. It was arguably the first electronic digital computer. As with other early computers, it had many limitations. In particular, it could not not be programmed.
The ENIAC computer was developed by the U.S. Government. It could only be programmed by presetting switches and rewiring the system.
Plankalkul, a language designed for engineering a mathematical work, is developed by Konrad Zuse.
John Von Neumann, working at the Institute for Advanced Study, conceived of two ideas which changed the course of computer programming. The first idea was that simple hardware should be controlled by complex instructions — that the "program" should be changeable without changing the hardware. The other idea was that computer programs should be broken down into small bits of conditionally executed code that could be jumped to from anywhere in the program. This allowed IF, ELSE and LOOP structures to be written into computer programs.
Short Code, the first programming language, was developed, based on Von Neumann's ideas. Unfortunately, it had to be "hand-compiled" — that is, someone had to translate the program in binary (1s and 0s) by hand.
Grace Hopper, working for Remington Rand, begins development a compiler for Shortcode that automatically translates ("compiles") code into binary.
AUTOCODE, an early compiler, is developed by Alick E. Glennie. He works on it in his spare time while attending the University of Manchester.
The draft specification for FORTRAN, the first programming language to gain widespread use, is completed. The team that developed FORTRAN is headed up by John Backus, who later works on ALGOL and BNF. FORTRAN is still in use today, over six decades later.
The first FORTRAN compiler is released.
The Short Code compiler developed by Grace Hopper is released by Remington Rand under the name MATH-MAGIC.
Work begins on LISP, a language closely tied with the development of Artificial Intelligence. Versions of LISP are still in widespread use today.
The first specification for ALGOL is released.
The Conference on Data Systems and Languages (CODASYL) creates COBOL.
The first block-structured language, ALGOL 60, is made available.
APL, a language with its own unique character set, requiring its own keyboard or input device, is released by Kenneth Iverson. : FORTRAN IV is released.

APL60, a Terminal System for APL, is released.

BASIC, a programming language designed to help people learn how to write computer programs, was invented at Dartmouth University by John Kemeny and Thomas Kurtz.
Fuzzy logic is introduced by Lotfi A. Zadeh. This branch of logic and computation would later be used to control high speed trains in Japan, naval helicopters, and auto-focusing cameras — among many other control systems.
FORTRAN 66 is released.
LISP 2 is released.
Work begins on LOGO.
The ALGOL 68 is approved by the specifications committee that oversees the language, despite objections from several committee members. ALGOL 68 is much more complex than ALGOL 60, and turns out to be very difficult to implement.
ALTRAN, a FORTRAN variant, becomes a available.
ANSI, the American National Standards Institute, officially defines COBOL.
Work begins on Pascal.
Simula, the first language using object-oriented concepts, is developed.
early 1970s
Work begins on a number of new programming languages, including Forth, Prolog, and Smalltalk. Development of Smalltalk leads to the codification of object-oriented programming concepts.
Konrad Zuse's manuscript describing Plankalkül is published, thirty years after he developed it. : C, the language that will come to dominate operating system development, is developed by Dennis Ritchie. : Prolog is implemented by Alain Colmerauer and Phillip Roussel.
The definitive reference manual for C is published.
ANSI releases another COBOL specification.
An implementation of BASIC, called "Tiny BASIC," is developed which can run on 2 KB of RAM. This leaves 2 KB available for a program to run on a typical 4 KB microcomputer.
Bill Gates and Paul Allen begin selling their version of BASIC to MITS, for use on their Altair microcomputer.
LISP dialect Scheme is developed by G.L. Steele and G.J. Sussman.
The definitive reference manual for Pascal, the Pascal User Manual and Report, is published.
Design System Language is released. This language has a major impact on PostScript.
The first ANSI specification for MUMPS, which would later be renamed M, is released. The language was designed to handle Medical Records data and only recognizes the string data-type.
The text-processing language Awk is released. It is named after its developers: Aho, Weinberger, and Kernighan.
ANSI releases the specification for FORTRAN 77.
Smalltalk-80, Modula-2, and Franz LISP are released.
The early version of what would become C++, called "C with Classes" is developed by Bjarne Stroustup.
Work begins on Common LISP and Prolog.
ISO Pascal and PostScript are released.
Smalltalk-80: The Language and Its Implementation is published.
The DoD begins using Ada for all new "Mission Critical" applications. The language is named after Ada, Countess of Lovelace, the first computer programmer.
The first C compilers for microcomputers are released.
The first implementation of C++ appears.
Turbo Pascal is released.
Objective-C is released.
A reference manual for APL2 is published.
The wreck of the Titanic is found, using a submarine controlled by Forth.
Methods, a version of Smalltalk, is released.
The first version of Smalltalk available for microcomputers, Smalltalk/V, is released.
Object Pascal for the Mac is released by Apple.
Turbo Prolog is releaed.
Actor and Eiffel, both object-oriented languages, are released.
Perl is invented.
The CLOS Specification (Common LISP Object System) is published.
Niklaus Wirth, who developed Modula-2, completes work on Oberon.
ANSI publishes the C specification.
A draft reference C++ 2.0 is released. This version adds multiple inheritance, along with other features.
Annotated C++ Reference Manual, which details C++ 2.1, is published.
Fortran 90 is released. Besides several new features, this version also changes the spelling away from ALL-CAPS.
Visual Basic is introduced.
HTML is described for the first time, by Tim Berners-Lee.
Work begins on Java.
Python is invented.
Dylan is released by Apple.
ANSI releases a draft-proposal for object-oriented COBOL. The standard was supposed to be released in 1997, but was not finalized until 2002. : The first public specification of HTML is made available.
Microsoft adds Visual Basic into Excel.
Dave Wood and Moti Schneider presents a proof-of-concept paper at the IEEE World Congress on Computational Intelligence, using the FEST Fuzzy Expert System Tools shell to model helicopter landing.
PHP is invented.
Ada 95 is released, adding support for OOP and real-time systems.
HTML 2.0 is released.
The first public implementation of Java is released.
JavaScript is invented. It was developed in a period of only 10 days, by Brendan Eich.
Ruby is invented.
The Gang of Four publish Design Patterns: Elements of Reusable Object-Oriented Software.
HTML 4.0 is released.
PHP 3.0, the first version of the language recognizable to contemporary users, is released.
ECMA released the first JavaScript (ECMAScript) standard.
ISO releases the first C++ standard.
HTML 4.0 is re-released without a version-number increment.
Scratch, a visual programming language designed to teach programming concepts, is released.
PHP 5, the current version of the language, is released.
The SOA Manifesto Working Group publishes the SOA Manifesto, detailing a set of objectives and principles for Service Oriented Architecture.
Clojure, a dialect of Lisp, is released.
Google releases Go.
CoffeeScript, an expansion of JavaScript that adds concepts borrowed from Ruby and Python, is released.
Rust, sponsored by Mozilla, is released.
Google releases Dart.
HTML5 is published as a W3C recommendation.
Apple releases Swift, based on Objective-C.
Facebook releases Hack, based on PHP.

Future of Programming

It's hard to say just where programming is going. In the short-term, we can probably expect more acceleration of the trends we're already experiencing:

  • Big data
  • Virtualization
  • "Internet of Things"

But long-term, it is notoriously difficult to make accurate predictions. Quantum computing may lead to a whole new paradigm of computer programming; computers may learn to program themselves, leading to the Singularity and the end of the human era; we may discover how to use programming to mimic biological intelligence, leading to transhumanism. Or we might just figure out how to make our phones smaller.

Whatever the future holds, it is more and clear that programming — being able to read and write code in a handful of common languages — is becoming the new business literacy. Familiarity with programming concepts and with the logic of computer systems and architecture is quickly becoming as important as basic business skills like sales, marketing, and design.

Further Reading and Resources

More programming guides, tutorials, and infographics related to coding and developer resources:

What Code Should You Learn?

Confused about what programming language you should learn to code in? Check out our infographic, What Code Should You Learn? It not only discusses different aspects of the languages, it answers important questions such as, "How much money will I make programming Java for a living?"

Fun Ways Kids Can Learn to Code

Coding isn't just for adults. And it shouldn't be! Children learn varied skills when then learn to code. Learn all about websites, apps, and games that help inspire children to learn programming in our infographic, Fun Ways Kids Can Learn to Code

Last update: July 12th, 2016