As it stands, my comprehensive Introduction to Programming series is organized into parts as follows:
1) A first language
To program, you must learn a programming language, so we start by introducing a language called Pigeon. Pigeon is a language created expressly for students in that it features as simple a grammar as I believe possible while still reflecting the concepts found in “real” languages. Learning Pigeon first should make later tackling your first real language much easier.
Computers are deeply mysterious until you understand how information is represented as bits. We start with numbers because their bit representation is used as a basis for representing other kinds of data.
Text is represented using what are called character sets. The most commonly used character sets are ASCII and Unicode.
In this part, we briefly discuss some elementary concepts of computer graphics.
5) Hardware and operating systems
Here we cover essential concepts in computer hardware and operating systems.
6) Languages and tools
There is a wide array of programming languages in existence. We’ll survey the most popular ones and discuss their major differences. We’ll also discuss the associated tools, e.g. debuggers.
8) The Internet and the web
Here we’ll discuss the basic structure of the Internet and the protocols on which it runs.
10) Structured data formats
11) HTML and CSS
12) The Unix command line shell
Before graphical user interfaces, computer users interacted with the computer using a command line shell—basically, an interactive programming language in which each command the user types is immediately executed. Today, shells are still powerful tools used by programmers and system administrators. In this unit, we’ll focus on the shell language used most commonly in Unix systems, BASH (the Bourne Again Shell). We’ll also discuss the command-line programs commonly available on Unix systems and discuss how these programs can be tied together through the shell.
13) Assembly language
Assembly language represents the lowest level of programming. Here we’ll cover assembly language for x86 processors using the NASM assembler.
14) The C language
15) Data structures and algorithms
There are only so many fundamental ways of organizing data. We’ll discuss these data structures and the algorithms associated with them.
16) Object-oriented programming
Object-oriented programming is a style of programming in which the programmer, rather than focusing on action, focuses on establishing types of data and the actions associated with those types. This style is strongly encouraged in a number of so-called “object-oriented languages”, including Java.
17) The Java language
Since the late 1990′s, Java has been the most commonly used programming language. Java’s success has spawned an imitator from Microsoft called C# (“C sharp”), which differs in many details but is fundamentally similar. We cover Java instead of C# mainly because Java is somewhat simpler and still more popular.
18) Encryption, security, and compression
We’ll discuss the basics of encryption, security, and compression, which aren’t nearly as arcane as you might imagine.
19) Graphical interfaces
To write a program with a GUI (graphical user interface), a programmer uses a library called a GUI toolkit. We’ll focus on one such toolkit for Java called Swing.
20) Version control
When we write code, it’s very nice to be able to keep track of all of our changes such that we can always go back to an earlier version when we mess something up. It’s also really important to coordinate our changes with others working on the same code. For these reasons, programmers use programs called version control systems to manage their code. We’ll focus on two popular such programs, Subversion (abbreviated as “svn”) and Git.
A database is a specialized program for storing large amounts of data in a way that can be searched and retrieved efficiently. Databases are used everywhere: for instance, a popular website like Amazon.com uses databases to store product and customer information. The most commonly used databases are relational databases, meaning they structure data in the style of the relational model. The programs we write typically communicate with a relational database using a query language called SQL (pronounced “sequel”, Structured Query Language).
22) Regular expressions
Regular expressions (sometimes abbreviated as “regex”) are a sophisticated tool for finding patterns of characters in text. For instance, using a regular expression, I could easily remove from a text all instances of the word “curry” following the word “lemon”.
23) The Clojure language
Many regard Lisp as the most elegant of all languages, and Clojure is a particularly elegant recent variant of Lisp. Clojure gives us an opportunity to introduce functional programming, a style of programming in which we avoid “state change” as much as possible.
24) Automating the build process
The whole process of translating source code and data files into a working program is called the build process. In most software projects, we end up building the project many times over as we develop the code, fix bugs, and change features, so it makes sense that we automate this whole process as much as possible. In this part, we’ll discuss popular build tools, such as the Unix make program.