Every Online Course I've Taken
These courses were offered mostly by Coursera, edX, Udacity, (free) and Georgia Tech, with the latter spanning three masters programs (paid). Topics were mostly in computer science, machine learning, data analytics, and security. I want to be clear right out of the gate: I took way too many courses, and I do not recommend to others to follow suit. (See the FAQ for more details.) Bottom line: I think a more focused approach would be a far more efficient use of one’s time.
A few tips on how to best use this page:
- Don’t read from first to last, and don’t even read the whole thing. Skim until you find a topic that interests you. They’re arranged alphabetically.
- Similar to my reading pipeline, I use the same, totally rigorous and scientific rating scheme of: Great! > Good. > Meh. > Nah… I’m told that searching for “Great!” is the best way to cut to the chase.
- Entries that have a course number, e.g. “Rocket Surgery (CS123)”, are courses that I paid for, usually as part of a degree-granting program. Some have free options that I tried my best to find and link.
- If you’re interested in learning more about a course and reading other reviews, check out Class Central for MOOCs and OMSCentral for Georgia Tech offerings.
Lastly, a disclosure: I was a Udacity graduate and employee, and I currently own stock in the company. All opinions are my own, and I try my best to remain objective! With that out of the way, here we go…
- Algorithms (+Part 2), Princeton. Good. This was my very first algorithms class, and I thought Sedgewick was a fantastic lecturer and teacher. It follows his book, Algorithms, which is a good resource as well.
- Algorithms: Design and Analysis, Stanford. Meh. It looks like they re-tooled the course and split it out into a multi-course specialization, but I did not really enjoy or learn much from the first iteration. There was a lot of time spent doing proofs, and it was just not what I was looking for.
- Applied Cryptography (CS 6260), Georgia Tech. Good. Sasha Boldyreva was one of the best instructors I had at Georgia Tech. Content-wise, it was a great intro that covered hashing, symmetric, and asymmetric cryptography. Surprisingly theoretical for an “applied” class, but I did enjoy fundamentally breaking insecure schemes.
- Artificial Intelligence, UC Berkeley. Good. Sadly, I think they sunset this course, but it was a good intro course that surveyed search, Markov decision processes, and even reinforcement learning. If there is a newer and available version, I imagine it will only be better!
- Artificial Intelligence in Robotics (CS 7638), Georgia Tech. Meh. Free at Udacity. The lectures taught by Sebastian Thrun were great, but the execution and assignments for Georgia Tech’s version were very disappointing. The focus here was definitely more on robotics and control than AI.
- Automata Theory, Stanford. Meh. It looks like they shuttered this course, but I was underwhelmed when it was open. To be fair, I think the subject matter is a bit dry and hard to make exciting, despite the importance of the topic.
- Autonomous Navigation for Flying Robots, TUM. Great! This class was awesome! You basically learn about building blocks and algorithms like Kalman filters, sensor fusion, and SLAM to program a quadcopter in a virtual environment. Then, (optionally) you can upload and run it on a physical drone. The course is archived, but the materials are all still available online.
- Bayesian Statistics (ISYE 6420), Georgia Tech. Meh. Okay, so the class, lectures, and subject matter were fantastic. I can’t not see things through a Bayesian vs. frequentist lens anymore, so it definitely changed my world view and perspective. However, the projects were super painful and outdated. I do not wish WinBUGS upon my worst enemies. This class could have been phenomenal if they used a more ergonomic and modern stack like Python and PyMC3.
- Business Fundamentals for Analytics (MGT 6754), Georgia Tech. Nah… This required course was painful every step of the way. There is nothing here about analytics; this is just a watered down business and finance class.
- Code School (multiple courses) Great! I really enjoyed Code School when I first started learning how to code, especially their Rails content. I pretty much consumed their entire catalog and fondly remember the Rails for Zombies courses. I’m not sure what it’s currently like after the acquisition by Pluralsight.
- Computational Photography (CS 6475), Georgia Tech. Good. A fun (and easy) class that pairs well with much harder classes. You get to do some pretty cool projects with an open-ended capstone. Highlight for me was building a camera obscura and confusing the crap out of my neighbors. WHATEVER, their loss. I think this would be a great precursor for computer vision classes, with exposure in manipulating images and pixels with code.
- Computer Networks (CS 6250), Georgia Tech. Good. Any class that has projects where you reproduce algorithms from papers with code is basically an automatic Good+ in my book. This class is no exception. Highlight was writing congestion control for buffer bloat. I regularly see this class of problem at $JOB. I’m incredibly grateful for the lessons I learned in this class.
- Computing for Data Analysis (CSE 6040), Georgia Tech. Great! Free on edX. I loved this course! What an incredible intro to data analysis, with engaging and insightful projects. I took many other data analysis and data science courses, but this one stands out as one that drove first principles along with many nuanced concepts not seen elsewhere. Highly recommend!
- Data Analyst Nanodegree (ND002), Udacity. Good. And I’m sure this has only gotten better over time! This was a fantastic survey of different tools, methodologies, and how to think like a data analyst. I really enjoyed the projects, especially the ML project on fraud classification using Enron emails.
- Data Analytics and Security (INTA 6450), Georgia Tech. Meh. Way too easy, with very little to learn. This was basically to fulfill a cross-department requirement, so I kind of phoned it in, to be honest. My favorite part of it was that the final project was about Enron so I totally recycled some materials from the entry above ^ that I took a few years before this class.
- Data Analytics for Business (MGT 6203), Georgia Tech. Nah… Free on edX. A very watered down analytics class for business majors. It was a required course for OMSA, and I dragged my feet every step of the way. The projects were basically coded for you and you just had to change a few things and write about it.
- Data and Visual Analytics (CSE 6242), Georgia Tech. Meh. Way too broad, covering way too many tools, with very little depth. Also, extremely short on the “visual” portion; most of the projects involved data munging and big data tools (Hadoop, Spark, etc.). I came in expecting to learn data visualization and presentation, but was left with superficial learning of how to set up big data tools that I’d probably be better off learning on the job.
- Deep Learning Nanodegree (ND101), Udacity. Meh (when I took it). The version I took was split 50/50 between the awesome parts taught by Mat Leonard and Luis Serrano, and the awful parts by Siraj Raval. They’ve since made the smart decision–in my opinion–to cut out Siraj’s parts, so it’s likely much better than when I took it.
- Deep Learning Specialization, deeplearning.ai. Good. I’m always a fan of Andrew Ng. He’s such a great teacher, and this specialization packs in a bunch of awesome practical knowledge you won’t find elsewhere, e.g. a discussion of how randomly-distributed parameterization is often more performant to parameter grid searches. The last class on sequence models was one of my favorite parts.
- Deterministic Optimization (ISYE 6669), Georgia Tech. Great! I really liked this class. Great exposure to linear programming and optimization. The projects were fantastic, and I still remember the being fascinated by the elegance of column generation algorithms.
- Engineering Software as a Service, UC Berkeley. Good. Unfortunately, archived, but a lot of the material came from saasbook.info. This was my first intro into test-driven development and Ruby on Rails. I also just really like the instructors, Armando and David, and their teaching style.
- Educational Technology Foundations (CS 6460), Georgia Tech. Great! Among many things, David Joyner is a brilliant lecturer and teacher. I loved that this class was so open-ended and provided freedom around the main project. I actually had the chance to present our group’s work with David at LWMOOCS.
- Entrepreneurship 101 and 102, MIT. Good. Bill Aulet is a fantastic teacher and the lessons here are really great. In retrospect, I wish this was in a book format; I think I would have benefited from being able to revisit it in written form. (Or maybe I should have just taken better notes!) Regardless, these are quick classes with high ROI.
- Full-stack Web Developer Nanodegree (ND002), Udacity. Meh. I believe I was the first graduate of this program, so it was a bit rough on the edges. I enjoyed it at the time, but years later (and wiser) as I write this review, I think it wasn’t nearly enough preparation to be a full-stack engineer. I would have rather seen an intro to back-end followed by a more advanced full-stack program.
- Human-Computer Interaction, Georgia Tech. Good. Another great entry by David Joyner. I actually only audited this class (all the videos are free online), and deeply regret not taking this class during my degree program. I think I probably missed out on some great projects and discussions.
- Information Security Policies and Strategies (PUBP 6725), Georgia Tech. Nah… This was a required class for the InfoSec track that I delayed until the last possible moment. Yeesh, what a snoozer. I don’t know what to say… policy just isn’t my thing. I think the sections on organizational policy were useful, but I quickly lost interest when the class zoomed out to national and transnational policy.
- Intro to Computational Thinking and Data Science, MIT. Good. This was the second part of the intro CS class at MIT. It built on the previous class and had the same level of quality, but I didn’t learn quite as much. Still a good intro-level course, though!
- Intro to Computer Science and Programming Using Python, MIT. Great! This was my very first MOOC and where I learned to code, so I’m probably totally biased. I regret not taking any of the 6.00 series classes in-person at MIT, but this was the next best thing. It was fun and challenging, and I can point back to this as the formative experience that got me into coding.
- Intro to Information Security (CS 6035), Georgia Tech. Good. I think this was a pretty good intro, but it’s a bit hard for me to be objective about it since I took it as a required course for OMSCY while having already taken several other advanced security classes. It seemed like a good survey of everything from buffer overflows to cryptography.
- Intro to Linux, Linux Foundation. Nah… This was pretty awful, and I can’t believe they charged so much for the optional (and useless?) certification. Skip this: you can learn more from Wikipedia, reading about FHS and the major distros.
- Intro to Analytics Modeling (ISYE 6501), Georgia Tech. Good. Free on edX. There’s a lot packed into this class, and the pace was a bit fast with weekly assignments and micro-projects. I think I would have enjoyed it far more if it were in Python instead of R.
- Intro to Health Informatics (CS 6440), Georgia Tech. Meh. Cons: way too easy and I barely learned anything. Pros: I got to help some CDC folks and build a web app for them to plug into FHIR data sources.
- Knowledge-Based Artificial Intelligence (CS 7637), Georgia Tech. Meh. The lectures were a bit of a slog to go through, but I really enjoyed the project. I incrementally built an AI agent to solve a visual IQ test (Raven’s Progressive Matrices). I liked how it was open-ended, and it’s a good contrast to more common AI and ML methodologies.
- Learning How to Learn, USCD/DTS. Great! One of the best classes I’ve taken, and the one that I wish I took first. Super short, but concise and useful. This is a class that I can safely recommend to anyone. It’s a great way to maximize value from other learning experiences, whether they be courses, books, or anything in between.
- Machine Learning, Stanford. Great! This was one of the first MOOCs I took and my first foray into ML. Andrew Ng is a phenomenal teacher that teaches first principles and construction of primitives and algorithms, from perceptrons to decision trees. My only gripe with this class is that it was taught in Octave, which seemed like a poor fit.
- Machine Learning (CS 7641), Georgia Tech. Good. Isbell and Littman are a great combo. The lectures are quite long, but the fun they had while teaching is wonderfully palpable! The projects involved replicating classic ML papers, which I appreciated and learned quite a bit from. The exams were quite difficult (but fair), from my recollection.
- Machine Learning Engineer Nanodegree (ND009T), Udacity. Good. I took this while I was working at Udacity and had a bit of a “behind the scenes” viewpoint, so I’m definitely biased. Nonetheless, there were some really great lectures and projects here. I’m not entirely sure that it’s advanced enough to land an entry-level ML job, but it’s probably foundational enough to lead into more advanced programs.
- Mining Massive Datasets, Stanford. Nah… Hard pass. This one was an absolute snoozer for me. To each their own, though!
- Network Security (CS 6262), Georgia Tech. Good. This was the first security class I attended, and it was largely responsible for me getting into security. The projects involved everything from scanning the entire IPv4 space, to analyzing malware, to configuring an IDS, to bypassing IDS with polymorphic blending attacks.
- Penetration Testing with Kali Linux (PEN-200), Offensive Security. Great! Whew, where to begin? This probably deserves a blog post of its own, but this might be my most highly recommended course. I had a ton of fun and learned a bunch along the way. This was my gateway into ethical hacking.
- Practical Machine Learning, Johns Hopkins. Good. Probably one of the better courses in the specialization, but it goes by quick. I wasn’t a huge fan of the whole series, but this course stands out as a good use of time.
- R Programming, Johns Hopkins. Nah… zzZzzZzz. Just RTFM.
- Regression Analysis (ISYE 6414), Georgia Tech. Meh. Mixed bag: the theory and instruction was really good, but the software and tooling was old and clunky.
- Reinforcement Learning and Decision-Making (CS 7642), Georgia Tech. Great! This was Isbell and Littman’s sequel to the ML course, and built very much the same way. This class wins points for expanding my world view, and now I see a lot of things through the lens of optimization and exploration vs. exploitation. I loved the projects here, particularly using OpenAI’s gym to land on the moon.
- Reverse Engineering and Binary Exploitation (CS 6265), Georgia Tech. Great! This course took my life over for a semester and I easily clocked in 30+ hours/week. It’s basically a semester of weekly CTFs ending with the NSA Codebreaker Challenge and an in-class Jeopardy-style CTF.
- Secure Computer Systems (CS 6238), Georgia Tech. Good. Contrasting from the typical cybersecurity feeds of new and shiny things, this was a refreshing review of timeless first principles from classic security papers. If you can’t access the class, check out the syllabus for some still very relevant classics like Protection (Lampson 1974).
- Simulation and Modeling for Engineering and Science (ISYE 6644), Georgia Tech. Good. Light on theory, but heavy on implementation with reasonably-sized projects. Using Arena and Python to simulate queuing problems was a lot of fun!
- Software Development Process (CS 6300), Georgia Tech. Nah… This was my first class in the OMSCS program, and it was… pretty underwhelming. I can’t say I enjoyed or really learned anything from it. The group project was absolutely painful. I have heard that they revamped it, so perhaps the newest iteration is more valuable!
- Team Treehouse (multiple courses) Meh. I think I preferred Code School. At the time, neither really had projects, so it could be much better now. Also, I made the mistake of going through some of the beginner content that I should have just skipped over.
- The Data Scientist’s Toolbox, Johns Hopkins. Meh. Not a whole lot of depth, here, or maybe this is an absurdly tiny toolbox. I would look for something more substantial.
- Upcase, thoughtbot (multiple courses). Good. The material here was both advanced and pragmatic, particularly those with Rails and Vim. It’s been a few years, and it looks like they have more content (yay, Haskell!), so I’ll probably re-subscribe at some point.
By order of completion:
- M.S. in Computer Science (OMSCS) at Georgia Tech. Great! This was a formative experience in my software engineering journey and one that I can easily recommend to my peers, regardless of seniority. There is a lot of flexibility in this program, and it has extremely high ROI at a ~$7k bill, total. I went through the AI track, but in retrospect, wish I had gone through the high performance computing focus.
- M.S. in Analytics (OMSA) at Georgia Tech. Meh. I think the required courses soured my experience here, but I am glad for the ~50% of courses that I did get to select. My capstone project was a scalability analysis at $JOB, which was a nice way to end the program with a practical application of my choosing.
- M.S. in Cybersecurity (OMSCY) at Georgia Tech. Good. This was a fantastic program! The curriculum for the information security track was top-notch, but I didn’t care much for the policy and cross-track requirements. For the capstone, I worked with a research group to write a malware network scanner based on zgrab2.
Q: Are you insane? Why would you take three masters degrees?
Possibly! I never actually set out to earn a certain number of degrees; it just kind of happened organically. I’d like to claim that it stemmed entirely from a desire to learn, but I will openly admit to a few other motivating factors:
- I’m cheap. I was lucky enough to work at employers that outright paid for or largely subsidized education, so not taking advantage of it felt like leaving money on the table. I’m over it now, though, and definitely value my free time more, especially now that I have kids. A poor side effect here is that I often optimized for completion of courses, e.g. chugging through a subscription’s content catalog, when I should have been maximizing for learning and retention. Clearing 100% and retaining 10% is far less valuable than retaining 100% of 20% completion.
- I’m stubborn. I should have just dropped every course that was a “Meh” or below as soon as I knew it. Same goes for any of the books I slogged through and finished just to finish. I definitely know better, now. Life is too short to spend time doing boring stuff.
- I’m obsessive. I’m a little lucky that I picked online learning as an outlet, but I definitely have an addictive personality and got really sucked into the dopamine loop of learning new things.
Q: How much knowledge do you actually retain?
Sadly, not as much as I’d like. I got pretty lucky with being able to apply knowledge at $JOB immediately following select courses, but mastery of the material diminished quickly over time. I’ve also learned that revisiting old course videos isn’t the best way to recap or recall a topic. In retrospect, I wish I had adopted Zettelkasten or spaced repetition much sooner. I also would have taken the course Learning How to Learn much, much earlier.
Q: How do you balance learning with a full-time job?
Something has to give, and it’s usually free time or worse: sleep. I actually flunked my first semester in OMSCS because of how bad I was at time management, but I learned to repurpose lots of idle time for studying, e.g. commuting on the train and a disturbingly large amount of time sitting on porcelain. Learning while having kids is an extra tier of difficulty… I remember bottle-feeding a tiny human while watching a lecture with headphones.
Q: What makes for a good course?
For me, the three repeating themes are:
- Fascinating and challenging projects. These helped reinforce learning the most. All the lectures are kind of fuzzy, but I vividly remember almost every substantial project.
- Expanding my world view or changing my perspective. This had the highest ROI, and those courses I regularly revisit and reference.
- Talented, passionate, and involved instructors. Makes or breaks a course. One of my most positive experiences was attending office hours with Sasha Boldyreva for a cryptography course. She was fantastic and really cared about students’ learning.
Some qualities that make a bad course for me (aside from the inverse of above):
- Required courses for degree programs. These were almost always bad from my view, most likely because they weren’t the courses I actually wanted to take.
- Group projects. Good grief, this had like a 95% hit rate for making a bad experience, whether it be due to timezones or workload distribution.
- Overindexing on tools vs. methodology. I wanted to focus on first principles and how to think, and I didn’t really get this from courses that focused too much on how to use tools.
Q: Will you keep taking more courses?
Probably! But definitely at a slower pace. I’ve also sworn a blood oath not to take on another masters program. Three is already ridiculous enough :P