This content originally appeared on DEV Community and was authored by Jason Barr
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:
- Precalculus
- Single variable calculus
- Discrete mathematics
- Linear algebra
I've also added a physics course on electricity and magnetism, as it's a real-world prerequisite for the MIT Computation Structures course.
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, the CS courses on this list equal a 60 credit sequence (plus 3 credits for physics, 6 for data science, and 9 for math not counting Precalculus, which wouldn't count towards degree requirements for most CS programs). 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
- HarvardX, CS50
-
MITx, Computational Thinking using Python
- Introduction to Computer Science and Programming Using Python
- Introduction to Computational Thinking and Data Science
Object-Oriented Programming
-
Georgia TechX, Introduction to Object-Oriented Programming using Java
- Foundations and Syntax Basics
- Object-Oriented Programming and Algorithms
- Exceptions, Data Structures, Recursion, and GUIs
Software Design and Engineering
-
UBCx, Software Development (equal to 6 credits)
- How to Code: Simple Data
- How to Code: Complex Data
- Optional: finish the parts of How to Design Programs not covered by these courses
- Software Construction: Data Abstraction
- Software Construction: Object-Oriented Design
- Software Engineering: Introduction
- Software Development Capstone Project
- MITx, Software Construction
Data Structures and Algorithms
-
Georgia TechX, Data Structures and Algorithms
- ArrayLists, LinkedLists, Stacks and Queues
- Binary Trees, Heaps, SkipLists and HashMaps
- AVL and 2-4 Trees, Divide and Conquer Algorithms
- Pattern Matching, Dijkstra’s, MST, and Dynamic Programming Algorithms
- Stanford 261: A Second Course in 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
Electricity and Magnetism
-
MITx, Introductory Electricity and Magnetism
- Electrostatics
- Magnetic Fields and Forces
- Maxwell's Equations
Computer Architecture and Organization
- MITx, Computation Structures
- Hebrew University of Jerusalem, Build a Modern Computer from First Principles: From Nand to Tetris
Operating Systems
- Operating Systems
Databases
- StanfordX, Database courses
Networking
- Network Course Materials (from OSSU/computer-science)
Programming Languages, Interpreters, and Compilers
- University of Washington, Programming Languages
- Structure and Interpretation of Computer Programs
- Interpreters and Programming Languages
- StanfordX, Compilers
Parallel, Concurrent, and Functional Programming
-
Rice, Parallel, Concurrent, and Distributed Programming in Java Specialization
- Parallel Programming in Java
- Concurrent Programming in Java
- Distributed Programming in Java
-
École Polytechnique Fédérale de Lausanne, Functional Programming in Scala Specialization
- Functional Programming Principles in Scala
- Functional Program Design in Scala
- Parallel programming
- Big Data Analysis with Scala and Spark
Data Science and Machine Learning
-
MITx, Statistics and Data Science
- Probability - The Science of Uncertainty and Data
- Fundamentals of Statistics
- Machine Learning with Python: from Linear Models to Deep Learning
- Capstone Exam in Statistics and Data Science
- Data Analysis: Statistical Modeling and Computation in Applications
- Stanford, Machine Learning
Math
- ASUx, Precalculus
-
MITx, Single Variable Calculus
- 1A: Differentiation
- 1B: Integration
- 1C: Coordinate Systems and Infinite Series
- MIT, Mathematics for Computer Science
- Georgia TechX, Linear Algebra
-
Introductory Linear Algebra
- Linear Equations
- Matrix Algebra
-
Applications of Linear Algebra
- Determinants and Eigenvalues
- Orthogonality & Symmetric Matrices and the SVD
-
Introductory Linear Algebra
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.
This content originally appeared on DEV Community and was authored by Jason Barr
Jason Barr | Sciencx (2021-07-01T01:13:37+00:00) A free (or mostly free) computer science education. Retrieved from https://www.scien.cx/2021/07/01/a-free-or-mostly-free-computer-science-education/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.