Introduction
[
Update: See also the follow-up post to this piece,
An Intensive Bachelor's Level Computer Science Curriculum Program.]
A few months back we took an in-depth look at MIT’s
free online Introduction to Computer Science course, and laid out a self-study time table to complete the class within four months, along with a companion post providing
learning benchmarks
to chart your progress. In the present article, I'll step back and take
a much more broad look at com-sci course offerings available for free
on the internet, in order to answer a deceptively straightforward
question: is it possible to complete the equivalent of a college
bachelor’s degree in computer science through college and university
courses that are freely available online? And if so, how does one do so?
The
former question is more difficult to answer than it may at first appear. There
are, of course, tons of resources relating to computer science and
engineering, computer programming, software engineering, etc. that can
easily be found online with a few simple searches. However, despite this
fact, it is very unlikely that you would find a free, basic computer
science curriculum offered in one complete package from any given
academic source. The reason for this is fairly obvious. Why pay $50,000 a
year to go to Harvard, for example, if you could take all the exact
same courses online for free?
Yet, this does not mean
that all the necessary elements for such a curriculum are not freely
accessible. Indeed, today there are undoubtedly more such resources
available at the click of a button than any person could get through
even in an entire lifetime of study. The problem is that organizing a
series of random lecture courses you find on the internet into a
coherent curriculum is actually rather difficult, especially when those
courses are offered by different institutions for different reasons and
for considerably different programs of study, and so on. Indeed,
colleges themselves require massive advisory bureaucracies to help
students navigate their way through complicated degree requirements,
even though those programs already form a coherent curriculum and course
of study. But, still, it’s not impossible to do it yourself, with a
little bit of help perhaps.
The present article will
therefore attempt to sketch out a generic bachelor’s level curriculum in
computer science on the basis of program requirements distilled from a
number of different computer science departments at top universities
from around the country. I will then provide links to a set of specific
college and university courses that are freely available online which,
if taken together, would satisfy the requirements of our generic
computer science curriculum.
A Hypothetical Curriculum
So,
what are the requirements of our hypothetical computer science
program? Despite overarching similarities, there are actually many
differences between courses of study offered at different colleges and
universities, especially in computer science. Some programs are more
geared toward electrical engineering and robotics, others toward
software development and programming, or toward computer architecture
and hardware design, or mathematics and cryptography, or networking and
applications, and on and on. Our curriculum will attempt to integrate
courses that would be common to all such programs, while also providing a
selection of electives that could function as an introduction to those
various concentrations.
There are essentially four
major parts to any bachelor’s level course of study, in any given field:
pre-requisites, core requirements, concentration requirements and
electives.
Pre-requisites are what you need to know
before you even begin. For many courses of study, there are no
pre-requisites, and no specialized prior knowledge is required or
presumed on the part of the student, since the introductory core
requirements themselves provide students with the requisite knowledge
and skills.
Core requirements are courses that anyone
in a given field is required to take, no matter what their
specialization or specific areas of interest within the field may be.
These sorts of classes provide a general base-level knowledge of the
field that can then be built upon in the study of more advanced and
specialized topics.
Concentration requirements are
classes that are required as part of a given concentration, focus or
specialization within an overall curriculum. For example, all students
who major in computer science at a given university may be required to
take two general introductory courses in the field, but students who
decide to concentrate on cryptography may be required to take more math
classes, while students interested in electrical engineering may take
required courses on robotics, while others interested in software
development may be required to study programming methodologies and so
on.
Finally, electives are courses within the overall
curriculum that individuals may decide to take at will, in accordance
with their own particular interests. Some people may prefer to take
electives which reenforce sub-fields related to their concentration,
while others may elect to sign on for courses that may only be
tangentially related to their concentration.
Our
hypothetical curriculum will simplify this model. We will assume no
prerequisites are necessary other than an interest in learning the
material and a basic high school education. Our curriculum will also
not offer any concentration tracks in the traditional sense, as that
would require specialized resources that are not within the scope of our
current domain. Instead, our planned curriculum shall provide for
introductory courses, general core requirements, and a choice of
electives that may also serve as a basis for further concentration
studies.
Basic Requirements
A
quick survey of curricular requirements for programs in computer
science at a number of the country’s top colleges and universities
reveals a wide spectrum of possibilities for our proposed curriculum,
from a ten course minor in computer science to a twenty-five course
intensive major in the field along with an interdisciplinary
concentration. (See, for example,
MIT,
Carnegie Mellon,
Berkeley,
Stanford and
Columbia, or the comp-sci page for a college or university near you.)
Our
proposed curriculum will attempt to stake out a space between those two
poles, and aim for a program that consists of about 15 courses: 3
introductory classes, 7 core classes and 5 electives. The required
topics and themes of a generic computer science degree
program are fairly easy to distill from the comparison: introduction to
the field, data structures, algorithms, programming languages, operating
systems, networking, data communications, systems engineering, software
development, and so on. Our program will consist of university or
college level courses from around the world that cover our basic
requirements and are freely available in full online.
Note:
I have, unfortunately, not watched every single video from all of the
courses below. However, I have completed three of them in full, viewed a
handful lectures from a number of the other courses, and spot checked
the videos from the rest for quality.
Introductory Courses
Intro to Computer Science, pick two of three:
Basic mathematics, pick one of two:
Core Courses
Data Structures and Algorithms, pick one of two:
Operating Systems:
Programming Languages and Methodologies:
Computer Architecture:
Networking:
Data Communications:
Cryptography and Security:
Electives
Web Development:
Data Structures:
Systems:
Programming Languages:
Security:
Cryptography:
App Development:
Artificial Intelligence:
Graphics:
Math:
Leave any suggestions for improvements or additions in the comments!
UPDATE: There has been a ton of great feedback on this post, with suggestions for additions, critiques of the overall form, identification of "glaring holes" and more. Thanks everyone! However, rather than address them one by one in the comments, or include them all into an update of some sort, I think I may just begin work on a new version of the piece which provides a more intensive track of study and tries to incorporate as many of those suggestions as possible, assuming that examples of such courses are available for free in full online from a college or university. So be sure to check back in future!
UPDATE II: See also the companion post to this piece,
An Intensive Bachelor's Level Computer Science Curriculum Program.