/cs-courses-notes

Contains information, notes, and personal opinion on a couple of Graduate & Other Level courses I took while studying on my own to improve my Machine Learning, and Software Engineering Skills

MIT LicenseMIT

CS Courses Notes

Contains information, notes, and personal opinion on courses (both at Undergraduage and Graduate levels) I took while studying to improve my Machine Learning/Software Engineering Skills, as well as my Computer Science Knowledge. I arranged the courses by the offering university first, then by offering MOOC.

Stanford University

I took a couple of courses from Stanford, especially right at the beginning of my training. They include:

  1. Statistical Learning. This course is fantastic, and mainly revolves around the book Elements of Statistical Learning. It's a great foundation in Machine Learning, and covers the major ML models, like Linear Regression, Logistic Regression, Decision Trees, Gradient Boosting (one of my favourite!), and many others. The Course Authors, Trevor Hastie and Rob Tibshirani, are among the inventors of a couple of these algorithms and are extremely well known in their fields. In fact, understanding this course automatically leads one to understand the theory behind most ensembling algorithms, like Random Forests and Gradient Boosted Decision Trees.

    • Time Taken: 2016 Q1
    • Programming Language Used: R
    • Course Difficulty: Medium
    • Mathematics Content: Average
  2. Deep Learning for Natural Language Processing This is my most-liked course on Natural Language Processing (NLP). It was one of the first courses in NLP I took, when preparing for the Allen AI Science Challenge, where I scored Top 5% in the world. In fact, contrary to most folks who got into Deep Learning via Image Processing & Computer Vision, I got into Deep Learning via text processing. It was a bit hard, especially the Maths was very advanced and occasionally multi-variable calculus proofs were required, however through reading of other NLP papers and materials I managed to finish auditing the course to prepare my solution to the competition. The course covers almost everything in DL for Natural Language processing, from word vectors to advanced Recurrent Neural Networks for sequence prediction, like Long Short Term Memory Networks (LSTMs).

    • Time Taken: 2016 Q1
    • Programming Language Used: python
    • Course Difficulty: Medium to Hard
    • Mathematics Content: Average to High
  3. Introduction to Mathematical Thinking Although it's an undegraduate level course, this course is particularly good at going to the fundamentals of Mathematics required for success in any STEM field major. It thoroughly covers the topic of "logic", with Professor Keith Devlin always emphasizing on developing one's "Math Sense" rather than just memorizing formulas. I particularly enjoyed the passion and personality of Professor Keith. He can really make someone to fall in love with Mathematics - I did indeed fall in love with advanced Maths after his course.

    • Time Taken: 2016 Q1
    • Programming Language Used: None. I did use some python sometimes, when the logic got very complex. The goal wasn't to make things easier for me at the time, but the goal was to simply become familiar with python.
    • Course Difficulty: Easy to Medium
    • Mathematics Content: High
  4. Machine Learning by Andrew Ng Being one of the "founding courses" of the MOOC Revolution, I'm both proud and deeply grateful to have taken it in summer 2016 and scored 95.7% final grade. I'd have to admit that the assignments were very easy though (as is the case for assignments of most MOOCs. They're easy mostly to improve graduation rates). The course is particularly good in explaining Machine Learning from scratch, while giving one the intuition of most algorithms, starting from Linear Regression.

    • Time Taken: Summer 2016
    • Programming Language Used: Octave (open-source equivalent of Matlab)
    • Course Difficulty: Easy
    • Mathematics Content: Medium
  5. Game Theory This was one of my favourite courses. Learning about the Prisoner's Dilemma could be very enjoyable but at times challenging as it involved deep probabilty. I believe this course further solidified my probability knowledge, which is very useful for any Machine Learning Engineer.

    • Time Taken: 2016 Q1
    • Programming Language Used: None, however I used a Python Library called Gambit
    • Course Difficulty: Medium
    • Mathematics Content: High

MIT

I managed to take a couple of courses at MIT, most of which were undergraduate courses. I found MIT Courses, especially those on the ocw.mit.edu website, to be particularly challenging, as the materials presented in the courses were scanty and sometimes incomplete. Courses are:

  1. Introduction to Probability & Statistics This course was a very fun and challenging one. I learned a lot, and feel like my probability & maths skills got a lot better. I believe this kind of formed the foundation upon which I could slowly build my ML and DL skills over time. I highly recommend it to anyone interested in getting good at probability.

    • Time Taken: Q2 2015
    • Programming Language Used: None. Although, at the end of the course, I experimented with a library for symbolic maths in Python called sympy. sympy is super fun too!
    • Course Difficulty: Medium. It's not too hard, but in case one wants to go deeper (which I did, by doing all exercises in the associated textbook, then it can get very hard).
    • Mathematics Content: High
  2. Mathematics for Computer Science This course gives you the basics of what kind of Maths to expect while going to a Computer Science curriculum. I found it very comprehensive as it covered most CS Math subjects like graph theory, probability, statistics, calculus, etc.

    • Time Taken: Q4 2014
    • Programming Language Used: None
    • Course Difficulty: Medium
    • Mathematics Content: High

Georgia Tech

Atlanta, here I come! Georgia Tech offers a really cool Online Master Degree in Computer Science on Udacity (OMCS). I spend most of my free time peeping into the courses, checking out which one I can take next, because the course videos are available for free on Udacity! The course catalog is quite attractive, and is updated every once in a while with new courses. I wished I had more time to devour all of the courses, especially the ones on Cybersecurity, which is a secret passion I started developing in 2017.

  1. Software Development Process I took this course out of frustration. I was about to start a whole new, daunting software project, of building a dashboard web app. However, I didn't really know how to start. All I knew was how to write python functions. I also needed help from other developers to be able to complete the web app on time, and needed a process to manage myself and the other devs I brought onboard. So I took this particular course, and to be honest till now I still use information from this course in managing any software project (of course combined with other information from other sources). This course is great for anyone yearning to learn how to implement and manage a bug-free software project from A to Z.
  • Note: I made a mindmap of this course with the Mac MindNode software. It's present in this repository. I regularly use this mindmap to remind myself of any useful piece of knowledge when I'm managing or building a big software project.
    • Time Taken: Q2 2017
    • Programming Language Used: None
    • Course Difficulty: Easy
    • Mathematics Content: Very Low
  1. Introduction to Information Security Introductory course to Cybersecurity. Though the course does a great job of covering all of the different sub-topics of cybersecurity, I expected it to be a bit more technical, especially in terms of programming. It however gives an interested learner a door into the world of Cybersecurity, which is a very fun world. For anyone interested, I also made a mind map for this course (mindmaps are cool, aren't they?), which present in this repository. The mind map is very extensive, covering all of the topics in the course. I made it using the MindNode software for Mac.
    • Time Taken: Q3 2017
    • Programming Language Used: None (I wished there were some programming projects in the course)
    • Course Difficulty: Easy
    • Mathematics Content: Very Low

Udacity

I'm a huge fan of Udacity. In fact, I even help them grade projects and mentor students in my free time. I'd say I owe my passion in Computer Science and coding to them. My journey with the MOOC platform started in late 2013 when I fell upon the course Introduction to Computer Science. At the time, it was one of the best CS courses I'd seen around the internet, with the lecturer teaching Computer Science from scratch, using Python. The assignments were very challenging (even till now most friends who take it find it to be challenging), but had solutions which could still help and guide one throughout. I completed the whole course by doing all of the programming exercises included in it. It was really rewarding to learn all of this programming, given that I didn't have a background in CS! After the Intro to CS course, I sticked to Udacity pretty much the whole time when learning how to code and program. I took the following courses from them (I just audited some, obtained certificates for some, beta tested a couple of them too, and even got invited as a mentor and grader for others). They are listed below:

  • Web Development (one of the first Web Dev courses and my second course in my programming self-education)
  • Intro to Algorithms, by Michael Littman! I loved this one, as it extensively covered data structures & algorithms, a key skill for any aspiring Computer Scientist.
  • Front-End Web Development Nanodegree. I was among the first batch of Udacity Students to enroll and graduate from this one.
  • Software Debugging I learned the ins and outs of python via this course
  • Machine Learning Nanodegree & Data Analyst Nanodegrees I completed all of the projects on my own for these Nanodegrees (NDs), but didn't graduate because I got invited to become a reviewer for the projects, and I didn't find useful to go on and have the certificate. However, much was learned while auditing the curriculum of both NDs. I especially got very good at Statistics, a subject I didn't excel at in University.
  • How to Use Git and Github, Version Control with Git, GitHub & Collaboration. Version Control, version control, and yes, version control. Took the first course (how to use git and github) when taking the Front End Nanodegree, and then took the two others when I wanted a revision and a new perspective on how to use Version Control. Version control is extremely powerful, and I'll recommend any aspiring coder to master this skill. I have mindmaps for each of these different courses in a Version Control Mindmap, feel free to steal it ;)
  • Self-Driving Car Nanodegree Engineer. One of the "flagship courses" of Udacity. I was selected to be among the first batch of students to enrol in the course in October 2016. Completed the 3 terms of the course few months later. The course helped to solidify my Computer Vision and C++ skills.
  • Rapid Prototyping. I think this course is for all coders who're scared of design (I was once like that!). Take this course, and you won't be scared of plunging into coding that brand new zero code zero design idea of yours!
  • Digital Marketing. This one is gold for any developer seeking to level-up their marketing skills. Checkout the mindmap from here

Now that's it for Udacity. So much so as I love the platform, they have a huge competitor, Coursera, from which I learned a lot too.

Coursera

Coursera is an awesome platform. Their courses are closer to the Academic counterparts, since the lecturers and courses are designed by partner universities rather than partner companies like Udacity. I believe this is the main difference between Coursera and Udacity - Udacity focuses on providing jobs to students, while Coursera is more Academic. In addition to the courses listed above like Machine Learning from Andrew Ng, I took the following courses from Coursera.

  • Learning How to Learn. Best Online Course I've ever taken. Why do I say this? Simply because not only is Professor Barbara Oakley's passion in learning very contagious, but the course forms a solid foundation of learning skills upon which you can build any other skill you want. Whether it's singing, swimming, Literature or Quantum Physics, you're in good hands with Learning How to Learn Skills. After the course, in order to deeply understand the material, I bought the book version of the course, called A Mind for Numbers from Amazon. Both the book and the course are must haves for anyone serious about improving his/her learning abilities.
  • Software Product Management. Great course, it's more modern than the Software Development Process course from Udacity.
  • Entrepreneurship Wharton. Ahh, this one. Amazing course, insightful professors. Lots and lots to learn about Entrepreneurship. Highly recommended.