Harvard University's CS50: Introduction to Computer Science is an entry-level computer science and programming MOOC (massive online open course). It is often recommended in Reddit and Stack Overflow discussions for beginner programmers as a starter course. Best of all, all the material is available online and completely free!
I started the course with a novice understanding of programming concepts and a little bit of experience with C, C++, and Lua. This Git repository contains my solutions to the problem sets for the Fall 2020 course.
I have refrained from going back to "improve" earlier problem sets as I've advanced through the course because I also wanted to document my learning progress. The repo is updated as I go through the course.
Here is my week-by-week analysis of the problem sets:
The first program you ever write when learning a new programming language. Spiced up by using a function from cs50.h library to query for a name and print it out.
While and for loop structures, the basic building blocks of programming. Getting back to C syntax and being frustrated with forgetting those semicolons.
The main lesson was using if-else control flow to get the desired result. This was a decent challenge for me, took a few hours to finish.
Character data type, getting to know ASCII. String is just an array of characters. Using a few more libraries.
Taking a command-line argument, making your own functions. Again, a nice challenge that took an evening to complete.
This was a tough nut to crack for me. Took a lot of thought to figure out how to make sure each alphabet was used exactly once and how substitution was to be done correctly. This actually felt like programming.
Partial code with the main block given. The task was to complete 2 functions to get the program, was over before I knew it.
A step up in difficulty again. The task was to complete 6 functions, which were nicely bite-sized and contained. Text to logical problem, 2D arrays, loops inside loops. Didn't understand the whole logic behind the program even though I completed the code.
Oh man, the legendary Tideman. The logic was very hard to reason, I had to draw 2 pages full of visualizations and even a separate program to dial in lock_pairs function. Sorting algorithms, recursive functions, I felt like a total failure. Got all smiley faces in the end, but would've appreciated a little more hand-holding.