DEV Community

Cover image for A free (or mostly free) computer science education
Jason Barr
Jason Barr

Posted on • Edited on

A free (or mostly free) computer science education

Update: Some of the materials I had originally listed are no longer available, so I've taken the dead links out and added new ones for the same courses, if possible, or if not, alternative options that should be just as good.

===
We programmers are lucky. A world-class education in the subject we practice is literally just a few searches away. There are myriad free and low-cost online courses available, and if you're not interested in the extras that come with taking actual courses you can just crib the notes from literally hundreds of course websites from university computer science courses all over the world.

In fact, if you've ever tried to put together your own self-study computer science/programming program you might find you have the opposite problem from what you'd expect: there's simply so much information out there that it's hard to know what to use.

Here's a list of online courses and a few other resources I've put together to study for myself in lieu of getting an actual degree.

Note that I'm already employed as a programmer, so a degree isn't necessary for me to work in the field. Your experience may vary, and you may decide an actual degree is the way to go. That's fine! There's nothing wrong with that. Sometimes I think we get stuck in this hacker mentality where we feel like we have to go our own way instead of following an established program. If a degree or other formal academic program is right for you, that's totally cool. Do what works best for you to help you meet your own goals.

If it's not, here's one way you might go about educating yourself.

The subjects

I wanted a list of resources that would cover most of the foundational subjects you would study in a top university CS program. These include:

  • Programming
  • Object-oriented programming and design
  • Data structures and algorithms
  • Low-level programming
  • Computer architecture and organization
  • Operating systems
  • Software engineering
  • Databases
  • Networks and networking
  • Programming languages

I also picked some "electives" based on my own interests:

  • More advanced algorithms
  • Parallel and distributed programming
  • Data science and machine learning
  • Functional programming
  • Interpreters and compilers

I also added some relevant subjects in math, since as an arts major my collegiate math background was inadequate for a CS education:

  • Mathematical thinking
  • Calculus
  • Discrete mathematics
  • Linear algebra
  • Statistics and probability

I've also added an optional physics course on electricity and magnetism, as it's a real-world prerequisite for the MIT Computation Structures course. There's also an optional course on theoretical computer science, which you should only work on if you have a good understanding of discrete mathematics (see the mathematics section).

How I chose my resources

I decided to prefer existing online courses that have certificate options, although these usually require payment of some kind. I find that having an external reward like a certificate helps keep me motivated and keeps me coming back to study when I'm tired after work and would rather just veg out and watch Netflix.

Even though in many cases I've linked to certificate programs that list a cost, you can access the content for the vast majority of courses I've picked for free, although there may be extra functionalities (like grading) that are unlocked by paying money.

This is simply my preference, and if you decide to choose other resources that are completely free that's totally fine; do what works for you.

I couldn't find adequate courses for all the relevant subjects, so in some cases I've listed books, video lectures, and materials available from course websites to fill the gaps.

I'm considering each top-level bullet point to be roughly the equivalent of a 3 credit, semester-long university course (except as noted), but YMMV. Using that as a guide, it should be pretty easy to pick enough from all the major topical areas to equal about 60 credits from a university. That's about average for major requirements in an undergraduate CS program here in the United States.

The program

Introduction to Computer Science and Programming

Object-Oriented Programming

Software Design and Engineering

Data Structures and Algorithms

Low-Level Programming

  • DartmouthX, C Programming with Linux
    • Getting Started
    • Language Foundations
    • Modular Programming and Memory Management
    • Pointers and Memory Management
    • Advanced Data Types
    • Linux Basics: The Command Line Interface
    • C Programming: Using Linux Tools and Libraries

Optional: Electricity and Magnetism

Computer Architecture and Organization

Operating Systems

Databases

Networking

Programming Languages and Compilers

Parallel, Concurrent, and Functional Programming

Optional: Theoretical Computer Science

Data Science and Machine Learning

Math

For further study

The above list will give you a solid foundation in computer science and programming on par with what you would get from a BS degree. These are obviously just suggestions, though; feel free to tailor your own study to your interests and the things that motivate you.

If data science isn't your thing, maybe a course on iOS or Android app development will scratch your itch. You could also look into cloud-based development with programs from AWS or IBM. Chances are good that, if you've got an interest, there's a course out there for you.

I hope this list is helpful for you as you seek your own path to a well-rounded education as a developer.

Top comments (5)

Collapse
 
jameslau profile image
James Lau

Thank you so much for sharing this list!

I actually signed up for the Harvard CS50 course earlier this week, while in job hunt limbo. There's a lot of concepts being covered with this course. Even though I have been in the front-end development space for while, the origin story to certain syntax wasn't always clear to me and it bothered me that I don't know them. Is it necessary, no not really. But being an odd history nut in my spare time, it builds confidence in my brain!

Collapse
 
jasonsbarr profile image
Jason Barr

I can totally see that! I love learning the backstory behind why things are the way they are.

Collapse
 
klapsteinalan profile image
Alan Klapstein

Very good contribution friend, greetings from Argentina. Adiós.

Collapse
 
brunomechca profile image
BrunoMechCa

That’s a great list. Thank you!!
But isn’t there too much duplicated information? Like the DartmouthX C programming course and what Harvard’s cs50 teaches.

Collapse
 
jasonsbarr profile image
Jason Barr

Sure, there's some material that duplicates things covered in other parts. That's more or less the result of putting together a "program" in an ad-hoc fashion using different sources rather than creating one as a whole where the materials are designed to complement each other.

For the specific example you raise, yeah there's a lot of overlap. It looks to me like the DartmouthX course goes into more depth with C than CS50 to some extent, and then there's the Linux stuff. The Linux stuff is probably the bigger attraction for me.

If someone is happy with their understanding of C they could always do something like skip the DartmouthX course and get a good book on C programming with the Unix interface.