I will be documenting here some of the resources and MOOCs that helped me in my journey to becoming a software developer. One thing I would like to note is, when doing an online course, I found exercises to be where real learning happens. If a resource didn't have one as in the case of youtube videos, then to avoid passive learning, I like to pause the video and write the code on the screen.
If Codeacademy was focused on the syntax and basics of programming, then this is where I learned how to write programs that solve tangible problems. I got to learn how to process files, generate reports, store the result in a database, scrape the web, and much more.
This one was an eye-opener for me. In just 12 weeks, it teaches you the C language, some basic data structure and algorithms (searching, sorting, linked lists, hash tables, and tries), PHP (replaced by Python in a later version of the course), HTML, CSS, and SQL. The problem sets are challenging and vary from encrypting messages to recovering deleted files from a hard drive. In the end, they require you to submit a project of your own. I was interested in writing games so I followed Remaking Cave story in C++ and Dive into C++11/14 2 and finally got a working C++ game which I submitted as a final project.
It took me a while to complete this two-part course but was worth every second of it. What I liked about it is how it goes into great length in explaining algorithms and then give you challenging assignments in which you need to apply those algorithms to real-life problems. Towards the end of the course, the professor explains that many of the problems covered in the course could be reduced into a handful of problems, which was mind-blowing.
I believe that learning is a continuous process and should never stop. There are gaps in my knowledge which I would like to fill by taking even more courses. These are the ones which I plan to do next:
- Nand2tetris: Building a Modern Computer From First principles
- fast.ai's Practical Deep Learning for Coders
- A Compilers course. Didn't find a good one yet.
I would never recommend anyone to start with java as a first language. Printing a simple hello world to the console requires you to write a class with a static method and to dig two levels deep in System namespace to access
println. Not to mention all the capitalization and semicolons that you have to be aware of. ↩
This was rather an interesting rabbit hole as he shows you some modern C++ features, uses it to implement an Arkanoid clone game, discusses various game loop implementations, and then finally introduces you to entity component system. ↩