At the end of 2018, I decided to fully commit myself towards Computer Science. I hold a bachelor degree in Foreign Languages (English & Chinese), so the transition was not easy. My goal was to obtain the equivalent of a real computer science BA through MOOCs and other online courses, ultimately to be able to apply for master degrees. Here is the record of the courses I have taken, and some useful information about them (duration, knowledge acquired etc).
CS50, like a lot of other people before me, changed my life and made me love computer science. David J. Malan introduces Computer Science to begginers in an amazing and challenging way. Taking this course if you have never writen a line of code before can be
tough, really tough, but completing each week's assignment can feel really rewarding.
The content of the course itself is really complete: from how to use a basic command-line interface to fully implementing a complexe stock related website through explaining how simple algorithms work, CS50 is a incredible class to give you a taste of what Computer Science is.
This class also requires a Final Project.
Courses | Author | Duration |
---|---|---|
CS50's : Introduction to computer Science | Harvard | 11 weeks |
Topics covered
- Basic Computational Thinking
- Scratch
- C Language
- Arrays
- Memory (RAM and ROM)
- Introduction to Data Structures
- Basic web: HTTP, HTML, CSS
- Python Language
- Web Programming using Flask and Javascript
- Databases (SQL)
Notable Projects
- CS50 Finance : This is the main imposed project throughout the course. The goal is to implement a fully functional website where we can buy and sell stocks, using real live data.
- Final Project : Final project of our choice where we a free to build anything we want, as long as it draws upon CS50’s lessons. I decided to implement a fictive e-learning platform.
Because I have been spending a lot of my time working on side projects using Python as the main programming language, I thought that it was also important to spend some time learning an other one. The Object Oriented Programming Specialization from UC San Diego & Duke was perfect, as it's also focusing Object Oriented Programming.
Courses | Author | Duration |
---|---|---|
Java Programming: Solving Problems with Software | Duke | 4 weeks |
Java Programming: Arrays, Lists, and Structured Data | Duke | 6 weeks |
Object Oriented Programming in Java | UC San Diego | 6 weeks |
Data Structures and Performance | UC San Diego | 6 weeks |
Topics covered
- Java OOP
- Working with CSV's
- Data Structures (ArrayList, HashMap, HashSet, LinkedList, Trees...)
- Memory Models
- Creating GUI's
- Inheritance, Polymorphism
- Basic Algorithms (Binary Search, Linear Search, Merge sort etc)
- Intro to Asymptotic Analysis, benchmark
Notable Projects
- Earthquake Map: This is the main project of course 3, and every week's goal is to complete a milestone. The goal is to implement a interactive visualization of a large dataset tagged by geospatial information focus on earthquakes around the world.
- Speller: This is the main project of course 4, and every week's goal is to complete a milestone. The goal is to implement a 'a smart text editor/processor that incorporates “intelligent” behaviors of modern-day text interfaces including autocomplete, flagging misspelled words and spelling auto-correct'.
Coming from a non-technical degree, having a strong foundation in Maths was really important. Therefore, I decided to start over from Pre-algebra. Khan Academy was really useful for this. When it comes to Linear ALgebra and Discrete Maths - which are probably the most important fields for CS students , the University of Texas and UC San Diego's respective courses are great and well explained
Basic Math
Courses | Author |
---|---|
Pre-algebra | Khan Academy |
Algebra 1 | Khan Academy |
Algebra 2 | Khan Academy |
Precalculus | Khan Academy |
Advanced Math - General Math
Courses | Author | Duration |
---|---|---|
Essence of Linear Algebra | 3Blue1Brown (Youtube) | - |
Linear Algebra - Foundations to Frontiers (alt) | University of Texas | 15 weeks |
Calculus 1A: Differentiation | MIT | 12 weeks |
Calculus 1B: Integration | MIT | 15 weeks |
Calculus 1C: Coordinate Systems & Infinite Series | MIT | 8 weeks |
Advanced Math - Mathematics for Computer Science
Courses | Author | Duration |
---|---|---|
Mathematical Thinking in Computer Science | UC San Diego & HSE | 6 weeks |
Combinatorics and Probability | UC San Diego & HSE | 6 weeks |
Introduction to Graph Theory | UC San Diego & HSE | 5 weeks |
Number Theory and Cryptography | UC San Diego & HSE | 4 weeks |
Delivery Problem | UC San Diego & HSE | 3 weeks |
Nand2tetris is THE reference when it comes to understanding computer hardware. This class literaly made me start with logic gates, the most primitive components that you can find in a computer, through building a complete computing system which is able to play Tetris. This course was extremely tough, but I now have a deeper understanding about how computers work.
Courses | Author | Duration |
---|---|---|
Build a Modern Computer from First Principles: From Nand to Tetris | The Hebrew University of Jerusalem | 6 weeks |
Topics covered
- Boolean Functions and Gate Logic
- Boolean Arithmetic and the ALU
- Memory
- Machine Language
- Computer Architecture
- Assembler
Tim Roughgarden's course at Stanford University is probably the most complex course about Data Structures and Algorithms. Can be really challenging, but rewarding as well.
Courses | Author | Duration |
---|---|---|
Divide and Conquer, Sorting and Searching, and Randomized Algorithms | Stanford | 4 weeks |
Graph Search, Shortest Paths, and Data Structures | Stanford | 4 weeks |
Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming | Stanford | 4 weeks |
Shortest Paths Revisited, NP-Complete Problems and What To Do About Them | Stanford | 4 weeks |
Topics covered
- Asymptotic Analysis
- Divide & Conquer Algos
- Randomized Algos
- Graph Primitives
- Greedy Algos
- Minimum Spanning Trees
- NP-Compete Problems