5 Lessons That I Have Learned from Harvard's CS50

This summer, I decided to take Harvard University's CS50 Introduction to Computer Science. Mind you, I'm not a student at Harvard and never plan to be. Rather, as I have done in the past, I am taking the MOOC version of the course which is hosted on edX.

The reason that I chose CS50 is that I am someone who is passionate about educational technology and its great potential to drive communication, collaboration, and student centered learning. But my experience has primarily been using tools like Google Apps for education, learning management systems, and apps galore to facilitate everything from flipped learning, to real-time formative assessment, to generating a public audience for project based learning. I have no formal computer science background and (gasp!) I really don't know how to code. So I decided what better way to learn coding than by "attending" Harvard University's largest course.

What makes CS50 unique amongst 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 8-12 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 section, with the same problem sets given to the Harvard students. The problem sets are even graded and if you complete the course, you get a free Certificate of Achievement or even credits from Harvard (for a fee).

So here are five lessons that I have learned so far from CS50.

**Spoiler alert** Almost none of these lessons have anything to do with actual coding (except perhaps the first).

1. Coding is REALLY Hard

Last summer, I took a similar MOOC from Stanford on Computer Science 101. This course led me through short lectures about various topics followed by brief quizzes which I usually aced on the first try. The course 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. So far psets 1 and 2 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 have sat for hours not knowing where to start or stuck on a specific line of code. But so far I have not given up due to my second lesson from the course.

2. The Awesome Power of Online Learning Communities 

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 64,000 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 pipe in to help.

For more involved coding, 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.

Below are two posts from my recent discussions on these sites.

It's been through the help of people like Irene and Kareem that I have been able to successfully navigate this course thus far. Note, neither Irene nor Kareem are teaching assistants hired by Harvard. I do not believe they have any special certifications. They are just students who successfully completed CS50 online last year 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 community. If only we could create this type of environment for all our classes.

3. Academic Honesty and Being Reasonable

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... 
Below are some highlights of a fascinating discussion on this topic from the Facebook group.

What I have experienced 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. This leads to my next lesson.

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 and 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 school year.

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 with all of its hoopla. He's making learning, logic, ideas into something that is hip, cool, and fun.

5. Starting With Something Simple

One final lesson that I gained from David Malan's course design 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 beginning CS50, I thought Scratch was something akin to a game 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.

Also, by beginning in Scratch, it gave me a great sense of accomplishment. Using Scratch for pset0, I created a game based on my TechRav Twitter persona! See the finished product below.

Here are instructions to play:
Tweet like the @TechRav! Press the Green Flag to begin play. Use the Left and Right arrows to move the TechRav. The object of the game is to send as many "tweets" as possible by catching the Twitter bird while avoiding the dreaded Facebook, Google Plus, Instagram, and Snapchat.

This is an educational strategy that all of us can utilize as we plan for the upcoming school year. Start the year with a project that is simple and quickly gives students a sense of accomplishment, while at the same time models many of the key concepts that will be revisited throughout the year.

I plan to continue my coursework in CS50 although my guess is it may take me many months to finish. As I trek through the course, I expect to not only gain knowledge on how to think like a computer but to benefit from this awesome online community and generate excitement which I hope to share with my own high school students about the joy and sense of accomplishment one can gain through continuously growing and learning.