Harvard University’s CS50 | Here’s what I learnt

Harvard University’s CS50 | Here’s what I learnt

So, in my freshman year, I decided to take Harvard University’s CS50 Introduction to Computer Science. And mind you, I’m not a student at Harvard. I am just taking the MOOC version of the course which is hosted on edX.

David J. Malan | Trynal
David J. Malan | Trynal

You might ask me why I took this course. Let me tell you, I chose this because I’m passionate about educational technology and its great potential to drive communication, collaboration, and student centered learning. As a student with some computer science background, I always wanted to see how things work at institutions like Harvard University. So, I decided what better way to learn coding than by “attending” Harvard University’s largest course.

What Makes it Unique?

What makes CS50 unique amongst other MOOCs is that its not a toned-down version of a university course divided into 6 weeks instead of the regular 12 weeks of a real semester. It’s lectures are not bite sized chunks of 10-15 minutes each. It’s assessments are not short quizzes designed for anyone to master while learning in their living room. Rather, it is the real Harvard course, including every lecture, every walk-through, every short, and every section, with the same problem sets given to the Harvard students (Interesting, right?). The problem sets are even graded and if you complete the course, you get a verified Certificate of Achievement from Harvard University (for a fee). Which looks something like this.
Verified CS50 Certificate | Trynal

So, let’s get into the five lessons that I’ve learnt from CS50.

1. Programming is ACTUALLY Hard!

Initially, I used to solve problems on HackerRank. Mostly they were simple puzzles. I usually aced on the first try many times. This taught me some new information but mostly made me feel really smart.

Then, I started CS50 featuring long but highly entertaining lectures not about specific programming languages but really about the logic of how computers work and how to think like a computer. These lectures and various other videos are followed by problem sets in which one has to write actual programs using code. Psets 1 to 5 are in the C language, with the course expanding to other languages in future units.

These tasks have included creating a right angle half pyramid for “Mario” whose number of lines are based on a number inputted by the user, writing a “Greedy” program in which given a dollar amount, the program will calculate the smallest amount of coins to return for the sum, converting a given name into only its initials in capital letters, and converting a secret message based on the Caesar and Vigenere Cipher. Completing these tasks is really hard. It is like after one week of learning a new language being asked to compose a 5 paragraph essay in this new language complete with perfect grammar and punctuation. Sometimes I had to sit for hours not knowing where to start or stuck on a specific line of code.

2. Great Support from Online Group

Taking CS50, I have never felt alone. Even though I am not in the actual lecture hall and cannot attend sections or office hours to pepper the teacher’s assistants with questions, I have had office hours 24/7 through the CS50 community. The CS50 Facebook group has over 159,059 members of which I would guess hundreds are active participants at any given time. These members span the globe (Africa, Asia, Australia, Europe, North America, and South America are all represented) and ages (from teenagers as young as 15, 16, or 17 to retirees). I have found that when I am stuck, I just ask a question or pose a snippet of code to the group and very quickly my virtual classmates will quickly hop in to help.


And there is the CS50 Stack Exchange, a question and answer site for students in CS50 to post code and queries for others to comment on, make suggestions, and even revise. The site includes badges and voting as an added incentive for people to help others. I have found the combination of Facebook and the Stack Exchange to be invaluable not just in doing the psets but in creating a sense of community.

And the help of people like Irene and Kareem that has been a great boost to me. Note, neither Irene nor Kareem are teaching assistants hired by Harvard. They are just students who successfully completed CS50 online and have continued to be a part of the community to give back by helping students who are currently in the course. The experience of interacting in this community of learners has been exhilarating. Imagine, thousands of students, throughout the world, all working in the same class, with the same lectures and coursework, all at different stages in the process but somehow feeling like they are all together in one classroom through their online learning group. If only we could create this type of environment for all our classes.


3. Being Reasonable and Academic Honesty

Well, with so much sharing of information through the various online communities, how does one prevent plagiarism and cheating? The syllabus itself gives a good set of guidelines which would be worth other teachers copying (by paraphrasing of course with credit, we would not want to plagiarize the statement on academic honesty.
This course’s philosophy on academic honesty is best stated as “be reasonable.” The course recognizes that interactions with classmates and others can facilitate mastery of the course’s material. However, there remains a line between enlisting the help of another and submitting the work of another. This policy characterizes both sides of that line.
The essence of all work that you submit to this course must be your own. Collaboration on problem sets is not permitted except to the extent that you may ask classmates and others for help so long as that help does not reduce to another doing your work for you. Generally speaking, when asking for help, you may show your code to others, but you may not view theirs, so long as you and they respect this policy’s other constraints. Collaboration on the course’s final project is permitted to the extent prescribed by its specification.

Interesting One!

So, what I have seen is that when trying to help others, my CS50 classmates will act as good teachers, posting suggestions for areas of thought, providing examples from similar code, or explaining in pseudo-code, English designed to follow the logic of code, what the code should do. Rarely will people outright tell others how to code. This has been a great source of frustration for me as I have found mastering the syntax of the code to be most difficult but it has forced me to think for myself which ultimately has been very gratifying.

What is fascinating is how this community has come up with its own rules for academic honesty without teachers actively enforcing it. This is likely because students in this course are doing it mostly for the love of learning. They want to gain new skills and recognize intuitively that if they cheat, they would only cheat themselves.


4. Generating Excitement About the Learning

David J. Malan, the educational visionary who created the CS50 MOOC spends a great deal of time in his lectures saying, “This is CS50.” At first, I thought this was hokey and a bit of Harvard arrogance but then I realized his real intent, to generate excitement about the course. With all his shtick, his giveaways, T-shirts, and contests. He has one intention, to make CS50 and computer programming in general something to be excited about. The course is now not only given at Harvard but also at Yale University. It features a world-wide audience in the world’s largest MOOC as I described above. The course has become a phenomenon, complete with its own coming attractions for the upcoming years.

Watch below.

Now before you get upset at this shameless self promotion, think a moment. Wouldn’t it be wonderful if we had teaser trailers for ALL of our courses? Imagine if our teachers were as famous as professional athletes (and compensated as such). This is what David Malan is accomplishing through his course. He’s making learning, logic, ideas into something that is hip, cool, and fun.

5. Starting With Something Simple

Here is one final lesson that I gained from David Malan’s course design. It is how to start with something simple and then harness it to teach layers of complexity. The course begins in Problem Set 0 with programming Scratch. Scratch is a visual programming language created by the Lifelong Kindergarten Group at the MIT Media Lab. It was designed to spread the philosophy that “anyone can code” even starting with children.

Before starting CS50, I thought Scratch was something akin to a game. Basically, where you dragged the various pieces and it created something for you. I did not realize that Scratch was actually a genuine programming language as open ended as any of the text-based languages. You can make mistakes in Scratch and there is no one right answer, its really all up to your imagination! What Professor Malan illustrated through his lectures is how the most significant ideas in programming using Scratch, loops, variables, operators etc., all have its counterparts in other programming languages like C. By first teaching these items through the visual blocks in Scratch, it greatly helped me conceptualize what programming is really about.

And, here is what I accomplished using scratch (my pset1): Hello CS50!

If you’ve come this far, I can surely say that you’re thinking to start this amazing journey! All the best.


One Reply to “Harvard University’s CS50 | Here’s what I learnt”

Leave a Reply

Your email address will not be published. Required fields are marked *