A magazine about programmers, code, and society. Written by and for humans since 2018.

Jerry Cain

The late 2000s were an interesting time for online education. The wider availability of faster and more reliable bandwidth led to an explosion of online video. This, in turn, led to the emergence of an ever-expanding number of providers of online learning services, and then to a wave of “Massive Open Online Courses” or MOOCs, many of which were offered by large universities and high schools all over the world. This month’s Vidéothèque movie is a full playlist featuring one of the earliest (and, in the opinion of this author, one of the most useful) examples of an online programming course.

It was at the end of the 2000s when services like the following broke into the mainstream, offering unprecedented access to online education resources that were until that moment restricted to a few lucky (and wealthy) attendees: Coursera, Udemy, edX, Udacity, MasterClass, Pluralsight, Platzi, Khan Academy, Brilliant, LinkedIn Learning (originally known as Lynda.com), StackSkills, DeepLearning.AI, Frontend Masters, Project Euler, and so many more that it would be impossible to list them all.

But the Internet is an inherently democratizing medium. Many smaller institutions thus chose to deploy a Moodle instance and host their educational content themselves. To avoid the burden of maintenance required by a self-hosting solution, some allocated budgets and decided to hire some third-party providers to serve their content, ranging from bigger ones like Instruqt, to smaller ones like nu.education.

Most importantly, many individuals took a cue from the bigger names and expanded their online presence with some dedicated training resources. Some of these are Gary Bernhardt and his Execute Program, Dylan Beattie and his Ursatile, Amy Hoy’s 30x500 Academy, Jessica Brody’s Writing Mastery Academy, Jason Calacanis’ Founder University, Scott Galloway’s Section School, Anna Bey’s School of Affluence, or Rachel Thomas and Jeremy Howard’s fast.ai service.

For self-taught programmers, like the one writing the lines you are reading at this moment, there is no shortage of interesting resources online. Suffice to mention MIT’s recent Missing Semester of CS Education; also from MIT, the now legendary 6.001 Structure and Interpretation featuring video lectures by Hal Abelson and Gerald Jay Sussman given in July 1986 for Hewlett-Packard employees; and last but not least, the Spring 2015 Computer Architecture Lectures, taught by ETHZ Professor Onur Mutlu in Carnegie Mellon University.

This month’s Vidéothèque entry is a full playlist titled Programming Paradigms published on YouTube in July 2008 by the Stanford Center for Professional Development of Stanford University, and taught by Professor Jerry Cain.

In this course, consisting of 27 lectures, Professor Cain dives into a magnificent multi-paradigm, multi-programming-language course, explaining various concepts of computer science on a medium as analog and mechanic as chalk and blackboard can be.

Maybe one of the greatest advantages of this course is that Professor Cain jumps immediately into one of the most puzzling aspects of programming for people new to the subject: the correspondence between lines of code and the internal representation of data in memory. Noteworthy are the seemingly endless sequences of “byte patterns” that represent various types of data in memory, sometimes featuring entire regions filled with a large zero: integers, IEEE 754 floating-point numbers, arrays, null-terminated strings, etc.

Professor Cain uses various programming languages to explain these concepts: he starts with C (roughly from the second lecture to the 8th), then Assembly (lectures 9 to 11), C++ (lectures 12 to 18), Scheme (lectures 19 to 23), and Python (from 24 to 26). The last lecture (27) dives into some other functional programming languages like ML, Miranda, and even Haskell, as well as some advanced type design concepts, to round up your general programming knowledge.

Let us remind ourselves of what Steve McConnell said about such a multi-language approach, a quote we shared in a previous article of this magazine:

The examples are in multiple languages because mastering more than one language is often a watershed in the career of a professional programmer.

I remember watching Professor Cain’s course as I was giving the final touches to my Master’s Degree thesis, and being completely in awe. I have recommended this series, again and again to quite a few generations of software engineers who asked me for guidance at the start of their careers. And now I am doing it again, albeit in the pages of this magazine, as a tribute to a fantastic resource that should be more widely known.

Watch this month’s Vidéothèque playlist, Programming Paradigms, by Professor Jerry Cain of Stanford University, on YouTube, and I am sure this will make sense to people. (Watch the series, and you will get this last joke. I promise.)

Cover photo chosen by the author from the first lecture of the series.

Back to top