Welcome to CS-A1120 Programming 2!

(Left: NVIDIA GV100 GPU, 5120 FP32 cores, 21.1 billion transistors, 12 nm process. NVIDIA.)
(Right: Hamina Data Center. Google.)

Preface, Spring 2023

A programmer wields immense power. This is the power to manipulate information according to the laws of computation, harnessed by a program, executed at the rate of billions of instructions per second, from every execution port, from every port in a processor core, from every core in a processor, from every processor in a compute node, from every node in an industrial-scale computing facility.

In this course, it is our pleasure and privilege to introduce you to many of the central principles of computing and programming, to the computer as a machine, and to programming paradigms that enable you to virtualize and scale up your computations all the way to industrial-scale infrastructure, if you so choose.

We start our quest for abstraction and efficiency at the bottom, at the level of the physical machine, with bits and logic gates operating on bits, and build our way up to conclude at the frontiers of modern computing, with algorithms and complexity, with machines that learn by themselves, with us as programmers acting merely as teachers.