I’ve been involved with web development for more than 10 years. yet my story is a little bit unordinary. From the beginning, I used WordPress to run content-based sites, so it may not be considered real programming works. Then I moved on with Zend Framework to build a sharing file service (like MediaFire). After that, I got hired by Yahoo! as a Product specialist before I’ve managed a startup team to built a Hulu clone site for the local market. (Btw, my startup has failed due to the bad business model). After that, I’ve tried others but still failed then I've become a government officer till nowadays. The thing is that I am a self-taught developer, as the result, at that period I just focused on building the final product without a deep knowledge of the programming language. My focus was on the top-level of languages, and frameworks, just used built-in functions, 3rd party libraries to implement desired features. Sometimes, I didn't understand how they work, just know how to put them together. The product was still been running but with a lot of struggles in development and when looking back, I am sure that my products weren't optimized at all. Though, I've obtained a lot of experience in web development during that period.
Back to the present, I've been looking for a remote job opportunity as a web developer because this is what I'd love to do. I always feel energized and enjoyed when coding, not like being at the 8 to 5 job. So, I decided to educate myself to catch up with the latest technology and more importantly, to strengthen my fundamental knowledge. After looking around from both Coursera and edX, I have chosen to enroll in the CS50 courses. I've completed both the courses CS50x (opens new window) and CS50 Web Programming (opens new window) in 4 months, by studying online after working hours. Then, this has been the best decision I've ever made. In this article, I would like to write about my joyful experiences with the CS50x - Introduction to Computer Science
(opens new window) (opens new window)
The course CS50x has been divided into 10 weeks, in conjunction with 10 domains of programming knowledge and two extras about Security and Artificial Intelligence. You don't need to follow exactly that timeline but by your self-pace. The structure is simple, each week, you will have a video lecture (there are notes, source codes ... comes along) then there could be a lab (a problem but with a guided solution at the end) and there are problem sets with detailed instructions yet without a solution. You can reach for support by social platforms such as Slack, Discord, Linkedin, Facebook ... My favorite ones are Discord and Reddit. The students are equipped with web IDE, included many built-in features. You may want to set up your private development environment, and the staff has provided all necessary packages (opens new window). I usually prefer to set up my own, but in this case, the web IDE is surprisingly convenient, particularly when coding C language. All of these toolsets work excellently, to support students to check, submit problem sets.
The content of each week is incredible. It often took about 2 and a half hours to complete. To me, the content in each lecture is overwhelming, though it's not so difficult to digest. Each one of them could be taught as an individual course. Other than that, there are short videos, which I strongly recommend, to explain complex topics such as pointers in C. Every topic has been covered with theory, concepts, visualizations, then practical examples, and extensive explanations. And when all of these materials have been taught by professor David Malan, it became some kind of art.
Professor David J Malan (opens new window) is the crucial element of this course. I have never imagined how a course could be like an art performance, as David has performed through the course. He creatively produced visualized materials to explain complex concepts such as stack, heap, and pointers. I've read them previously, but still feel vague, until I watched his lectures. All of them have been comprehended week by week. You must watch his video lectures to see how much energy he puts into this course. I have no words to express my appreciation for his dedication.
Almost every week, students got problem sets to solve, and it's stated that "If you submit and receive a score of at least 70% on each of this course’s problem sets, labs, and final project, you will be eligible for a free CS50 Certificate". Personally, each problem set is really interesting, like a fascinating challenge than homework (which I usually felt uncomfortable in high school). I've put a lot of effort and attention to complete all of them, especially the Tideman. Combined with the lectures, you will surely grasp the new knowledge. The most engaging one is the Fiftyville, which I just want another one to try (actually found one here (opens new window)).
After finishing, I've acquired a lot of systematic knowledge from the course, from the low level such as binary code, how memory addresses allocated, how to evaluate if an algorithm is optimized ... to the high-level topics such as Python, SQL, Django framework, and Javascript ... The most important thing to me is I can deeply understand how a computer program works (though, I've written a bunch of them already). Then I can comfortably dig deeper into the individual subject when facing practical problems in the final projects. Ultimately, this strong fundamental help me more confident to pursuit career switching shortly. Here are my final projects on GitHub.
Vocabulary Builder (opens new window) for CS50x
Expense Tracker (opens new window) for CS50 Web Programming