WHY I DECIDED TO TAKE CS50X
I don’t feel guilty for not paying much attention to the description page, which used the word “demanding”
I started Introduction to Computer Science (CS50x) on edX contemplating all the theoretical material I was going to receive about how computers work and the software involved in the machine I use everyday to get work done. I skimmed over the course description but did not give it much attention. I was simply searching for a computer science introductory course and nothing more. I had gone through half of Introduction to Computer Science and Programming using Python on edX and got hooked on the programming language because of its straight-forwardness. I simply gave up that course because I was more interested in coding than I was in the theory. Eventually I realized I needed more information about the machine that was “magically” allowing me to program. In retrospect, I don’t feel guilty for not paying much attention to the description page, which used the word “demanding”. This would most likely have put me off taking the course, as I might have thought it was heavy on theory – not an appealing prospect.
The first week was a breeze, if not slightly frustrating. It introduces students to the concept of programming using a UI called Scratch, which is a fun but extremely basic way of programming that some hard-core programmers might consider “beneath them”. However, it is a great start considering that no prerequisites are required for this course. Not having any previous programming knowledge or even computer knowledge does not preclude anyone from taking this course. This first week would not set the tone for the remainder of the course as I quickly learned. It was up hill from there and this hill was particularly steep.
CS50x is essentially like taking a real, full-length college-level course, complete with lectures, breakout sections, walkthroughs, homework, quizzes, etc…
– Review by Mark Mahoney
WHO IS DAVID MALAN?
David Malan is Gordon McKay Professor of the Practice of Computer Science at Harvard University. His areas of research include (among others) distance learning, collaborative learning and computer-assisted instruction. At the risk of stating a cliché, his approach to teaching is unlike anything I have seen and can easily be labeled as revolutionary. One can detect the joy and effort he puts into each of his lectures.
At the risk of stating a cliché, his approach to teaching is unlike anything I have seen and can easily be labeled as revolutionary. One can detect the joy and effort he puts into each of his lectures.
He has published papers and given talks on using technology to optimize the learning experience in class and through MOOCs. This knowledge certainly comes through in all CS50x material. His TA’s share the same drive for passing on knowledge in fun-filled ways. I cannot erase from my mind a TA clad in a pumpkin suit for Halloween, which actually proved helpful considering it was the week on data structures, one of the more difficult segments for me. It is not difficult to see why since David start teaching CS50, the class has upwards of 700 students on campus and its online version, CS50x, attracts 400,000 registered students world-wide.
I think the most important skills to enter the course with are drive and patience. You will need ample amounts of both to get through the material. It is not an impossible course but does require extra reading and research to hunt for information that will ultimately help complete the problem sets. David’s approximately 50 minute lectures pave the way for this independent research.
Students start coding in C in the second week with reading material from two books, both of which will be excellent resources when you get to the problem sets. They are Absolute Beginner’s Guide to C by Greg Perry and Programming in C by Stephen G. Kochan.
The lecture material includes various videos to choose from (or watch all of them). Apart from two weekly lectures, there are a series of short videos (called “Walkthroughs”) each explaining programming functions and using short segments of code for elaboration. In addition there are “Shorts”, 10-15 minute videos of a TA explaining in more detail central concepts discussed in the lecture. TA’s also provide 1 hour “Sections” that go deeper into some of the more complex material but also providing examples through coding.
A high moment in the course for me, when I felt I had finally vanquished the dragon, was managing to retrieve “lost” photos from a “damaged” memory card with pics of smiling Harvard students around campus.
It must be said that there is a lot of overlap among the videos. David’s lectures, even though they are a joy to watch, are customized to attract students who might still be considering what they want to do in their careers. I found the Walkthroughs most helpful, as the examples clearly and succinctly explained functions in 5 minutes or less, after which I could transfer the knowledge to the assignments and build on them. The Shorts also provided the requisite information for the more theoretical segments in a similarly succinct but helpful manner.
David Malan and his TA’s promoting their Reddit AMA
For the assignments, each problem set consisted of a coding exercise and questions relating to how computers process the programs they run. The questions were designed to ensure all information, practical and theoretical, had been properly internalized. The reading from the 2 recommended books also provided ample information and examples. Coding involved designing games and using cryptography (a personal favorite topic). A high moment in the course for me, when I felt I had finally vanquished the dragon, was managing to retrieve “lost” photos from a “damaged” memory card with pics of smiling Harvard students around campus. It certainly sounds like fun, but the coding process can be quite intense.
I think the most important skills to enter the course with are drive and patience. You will need ample amounts of both to get through the material.
The code is evaluated by an automatic checker that searches for correct syntax and style in the code as well as the correct final answer to make sure it encompasses appropriate programming methods. However, there is no grade attached to the theoretical segment in the grade book, which makes me think it is not checked. I still attempted them to ensure I was getting the maximal benefit. After all, my main aim in joining this course was to gain a good introduction on what goes on inside the computer. Apart from core exercises, there is an ungraded “Hacker edition” that students can optionally attempt. These are much more challenging. Still, I enjoyed hacking my way through the background reading even if I could not complete the code itself.
Still, I enjoyed hacking my way through the background reading even if I could not complete the code itself.
As this indeed is the age of social networking, the course has provided various platforms through which students can ask questions, interact and collaborate on projects. Rather than use edX’s discussion board, there is a selection from Twitter, Facebook, Reddit and Stack Exchange for interaction. I found that Twitter was more of a platform through which students say hello or check up on issues that can be squeezed into 140 character. David promptly hello’d back and offered responses to those tweets with questions. Reddit and Stack Exchange were certainly more helpful when I had programming or logistic problems but they are offered more as platforms to get help from other CS50 students rather than TA’s. Students are also allowed to collaborate on the assignments and projects in the discussion board. I found the general Stack Exchange community most helpful, with responses already available from previous questioners with the identical or similar issue. Beware of those posting CS50 problem set responses. They spoil all the fun in finding the answer yourself.
The learning curve was quite steep for me so I was grateful the course was open for a whole year. I had to start from Scratch quite literally (pun intended). I cannot fathom how Harvard students are completing each problem set in one week and the entire course in a single semester. I was taking only one other edX course but needed up to 40 hours to complete each problem set. This improved over the course of the year but I could not complete any of the courses in the week allocated and some coding exercises would have me pulling my hair out. Nevertheless, the sense of accomplishment with the completion of each problem set was exhilarating beyond measure.
Nevertheless, the sense of accomplishment with the completion of each problem set was exhilarating beyond measure.
Probably the most encouraging piece of information David offers in the first lecture is that about 70% of students have no previous programming skills and that your measure of progress at the end of the course is not by comparing yourself to other students but to compare your knowledge to that you yourself had at the start. I consider myself quite fortunate to have started out searching for a course on how computers work and ended up with so much more. I have learned 3 programming languages, 2 markup languages and 1 database and started a programming projects portfolio.
I consider myself quite fortunate to have started out searching for a course on how computers work and ended up with so much more.
Introduction to Computer Science and Programming using Python
Introduction to Computational Thinking and Data Science
To delve into object-oriented programming: Introduction to Programming in Java
Editors Note: Review by Charlie Soliman. Charlie is a MOOC enthusiast by day, coder by night. She has an MSc. in Molecular Cell Biology but computer programming has opened her eyes to the world of software design and she now enjoys nothing more than coming up with new ideas and making them come to life through code.
Class Central is looking for reviewers and regular contributors. If you’ve ever finished a MOOC and want to write a critique to help future students considering taking that course, we want to hear from you. Drop us a mail.