These core units should be a beginner’s starting point and are intended to be consumed in order. If you get tired of strictly following this progression, some supplementary units only require working up through a particular core unit, e.g. the supplementary unit, “The C Language (unit 2)”, can be done immediately after the core unit, “The C Language (unit 1)”, even if you haven’t finished the remaining core units.

The notes and quiz questions are originally in .doc format, and the slide presentations are originally in .pptx format. Of the fonts used, Inconsolata is free, but it’s a bit tricky to get Calibri on Linux.

a first programming language

Introduces a simple programming language called “Pigeon”. Covers expressions, variables, control flow, functions, global variables, et al.

numbers as bits

How numbers are represented as bits.

bits and text

Terminology for talking about bits and discussion of how text is represented as bits.

hardware and operating system basics

The basic components of computer hardware and the low-level software that controls it all.

programming languages

How source code becomes a running program, how languages are categorized, and a survey of important languages.

the Javascript language (unit 1)

The popular language Javascript (not to be confused with Java, another popular language) is very close semantically to Pigeon, so it’s a natural choice for our first real language.

the C language (unit 1)

The C programming language is one of the oldest and most influential languages still in use today. Unlike most other languages (including Pigeon and Javascript), C gives programmers a fine degree of control over the hardware, making it suitable for writing systems software (such as operating systems, like the Linux kernel) and for programs requiring high performance, such as the latest computer games.

the Internet

forthcoming. How networks and the Internet work, including discussion of TCP/IP and DNS.

the C language (unit 2)

Continues coverage of the C language. Goes into depth on “complex” pointer and array types, e.g. pointers to pointers, arrays of arrays, arrays of pointers, etc.

Unix system calls

forthcoming. The essential system calls in Unix for files, managing processes, and interprocess communication.

Unix terminals and shells

forthcoming. 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 AgainShell). 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.

the Java language (unit 1)

Unlike Javascript and C, the Java language heavily emphasizes Object-Oriented Programming. 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.

C, Java, and Javascript miscellany

C, Java, and Javascript have a number of features we skipped over, most of which are simply conveniences for writing more compact code. You needn’t master this material straight away, but you will encounter these features in real world code at some point. Because these details are too dull to cover in lecture form, we present them simply in written form.

software design and engineering

forthcoming. Once you can read and write code, there’s still much to learn about how to go about using code to solve problems.

data structures and algorithms

forthcoming. There are only so many fundamental ways of organizing data. We’ll discuss these data structures and the algorithms associated with them.

structured data formats

forthcoming. Structured data is data in which individual pieces of data (numbers, pieces of text, etc.) are related together in an organized way. A person, for instance, can be represented as structured data: a name (text), an age (number), an address (text), etc. We have standard formats for such data such as XML (Extensible Markup Language) and JSON (Javascript Object Notation), among others.

the web

forthcoming. A survey of webpages, web servers, and web programming.

databases

forthcoming. A database is a specialized program for storing large amounts of data in a way that can be searched and retrieved efficiently. 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).

security and encryption basics

forthcoming. The basics of security and  encryption and security aren’t nearly as arcane as you might imagine.

Comments are closed.

-->

Discussion

For questions about programming and the project, use the user Google group.

For contributions to the project, use the developer Google group.

News feed