Why Do Introductory CS Courses Overlook Passion?

Washington Zhao
The Startup
Published in
7 min readJun 16, 2019

cout <<"Hello world!" <<endl;

Holy shit. I’ve done it, I’m a programmer now!

My first programming class in high school consisted of if/else statements (often 5 or 6 else ifs at a time), nested for loops (not one..not two..not three…), and printing out “ROFLcopters” and birthday cakes with ASCII characters.

All we did was provide our names as input to the program…AND we forgot to put in the day.

Our projects were procedural, and required little analytical thinking. The requirements made it such that the brute force solution, using magical numbers everywhere, often was the best possible solution.

It didn’t matter if our programs ran in O(n¹⁰), or if we wrote 1000 lines of code in one file. (None of us did that though, for the record)

From an outsiders view, we were learning little about CS other than the pure, barebones syntax of the C++ language — actually our knowledge of even syntax was minimal at best.

But it didn’t matter, because we enjoyed it. And we thought it was incredible that “Hello world” could be shown on a computer so easily.

Last semester at USC, I took the infamous computer science weed out class, which is rumored to boast a 50% dropout rate and is curved 15%. Projects in the class consistently took over 15 hours, and the average grade on exams was around a 60%.

Familiar int[]s turned into int*s, std::vector<int> into std::map<K,V>, std::set<T>, std::queue<T>..., and turns out, running programs can be more complicated than just pressing the “run” button on Amazon Web Services’ online IDE C9.io.

Despite going through some rough patches over the course of the semester, I ultimately came out of it with an above average grade as well with my love for CS intact — unfortunately the same cannot be said for many other people.

I attribute this success greatly to the introductory programming class I took in senior year, and more specifically, the passion that it introduced to me.

Perhaps, that class may not have taught me as much about CS as other introductory classes at my school offered — many of my peers skipped this specific class to go directly to OOP in the upper level courses. Maybe that class doesn’t even count as a CS course. But, one thing for sure: it made me love programming. And that passion far outweighs any jargon that a tougher first class could have taught me.

What separates those who succeed in these grueling CS courses, isn’t necessarily knowledge of the topic. No, the people who did well were those who turned on their class VM to work on their homework whenever the chance arose, who went into office hours to ask questions about topics not on the curriculum, who inundated Piazza with their questions etc.

This may seem like common sense — it’s the common cliche that “hard work beats talent when talent doesn’t work hard” yada yada yada. But in CS especially, passion is so important to go far in the field.

In the US, computer science has consistently been the major with the most undergraduate drop outs — those who switch out of the major before graduation. Since 2013 computer science has become the 4th most popular STEM major based on expressed interest, with the fastest growth rate as well. Yet, only 8% of STEM graduates are computer science majors. As demand for the field is ever-rising, it is important to diagnose the root of the problem, and quickly.

As with other fields of study, CS demands work outside the classroom. Although you can probably get a good job out of college with just coursework and maybe an internship along the way, the most successful students tend to be those with side projects — attending hackathons, building personal websites, chrome extensions, you name it.

Quality real life code /s (Taken from r/programmerhumor)

As more and more students choose to study CS, sometimes for misguided reasons such as portrayals of informatics in pop culture and perhaps just a love for programming but not the math behind the science, many students simply don’t love the subject itself enough to put in the necessary work outside the classroom.

The solution to this problem isn’t to discourage students who may not understand what they’re getting into from deciding on computer science, but to improve introductory classes to both give a better portrayal of what the study is actually like, as well as a higher emphasis on nurturing the passion of the students.

My introductory programming class may have not done a good job at the former, but for me and my classmates at least, it succeeded at the latter.

I am currently in the process of transferring into the USC Viterbi School of Engineering to become a CS major, and many of my classmates from that class chose to add a double major in CS, greatly inspired by our experiences outputting dumb pictures to the screen.

My friend Jennings wrote a convincing article, How to Learn and How to Teach, in which he discusses how the Northeastern introductory programming classes fail to create a love for CS, and more importantly how that lack of passion contributes to students’ failures outside the classroom in building side projects.

If you were on a first date with Jennings, a topic of conversation that is guaranteed to come up is the projects he has done. (That, and his love of animals and interesting facts about them)

When I asked him to send me a video I had made previously and sent to him but could not find, instead of simply sharing it to me over Google Drive, he uploaded it to his self-hosted server to test its capabilities — because he is simply so passionate about it. It didn’t work, but the joy it brought him was real. He has a terminal downloaded on his phone, with the only purpose so that he can SSH into his server and code while he’s on the go. He spent a weekend of his free time going to a hackathon with his friend who was new to CS to help her build a simple chrome extension that discouraged people from wasting money on Bubble tea — not because the extension was going to win the hackathon but just because teaching the subject of manifest.jsons was enjoyable to him.

This summer, he took on a completely unpaid position to utilize CS to help a Children’s Hospital in Boston through neural imaging.

Jennings is the most passionate individual I have ever met, and he is also amazing at computer science. Yet, while he may understand security issues, he often tells me how he spends much time at work googling simple JS syntax.

It isn’t hard to learn syntax of a programming language, or the documentation of a new API. After all, why else would Stack Overflow be a thing?

But it is so difficult to find intrinsic drive to spend hours searching for a solution to a bug, to spend your free time building a new app rather than searching for existing ones on the App Store, to love computer science for the subject and not for the glory.

Without such drive, getting through upper level courses is ever-so difficult. Why would you want to spend hours trying to create an AVL tree when it seems like you aren’t learning anything about creating real software, if not for the reason that you like solving problems with computers?

In my opinion, the burden is on our education system to help facilitate students’ passion for the subject. Obviously, some will nevertheless find that CS may not be for them — but introductory classes that task students with boring projects and overly abstract jargon aren’t the answer.

Obviously, there is no easy solution — schools need to ensure their degree integrity holds by teaching them the knowledge they need to succeed in the future.

Here are some small, preliminary ideas from my experiences though:

  1. Host project expos/bring senior students to demo their projects to introductory classes

USC’s video game expo this past semester quite literally blew my mind with so many amazing projects. Seeing the work of fellow older students can give a sense of “they can do it, why can’t I. I want to do that.” Even online examples work really well — you can visit bl.ocks.org for beautiful data visualizations, or even on Product Hunt to see how people have built real things with code. The code isn’t important yet, the result is.

2. Assign interactive projects in class instead of the same old “Zombies” program

Not all projects were born the same. If you’re teaching arrays, you could create a made up story of a store inventory (for some reason with only 5 items) — but quite frankly that’s boring for students and misleading to how stores utilize code in real life. Spice it up! Build a lights out game, or anything interactive that students can play around with when they finish the code. I definitely loved playing printed games of UNO on the screen with my friends in class after the work was all done.

3. Explain jargon better — or better yet save it for later classes

Yes, I know it’s a CS course, and where else would students learn the jargon that programmers are addicted to using? (Seriously, why do programmers love jargon so much, even outside of work) But in an introductory class, jargon is a turn-off: how can you be excited to learn the material when your teacher is speaking in a complete different language? If you’re going to introduce terms, do a better job at explaining them please — don’t give a basic Stack Overflow definition and leave it at that.

I love CS, and even though I may not be very good at it yet, I know I am willing to put in the work necessary to improve, because the thrill of my code running and solving the problem is worth any time I put into it.

So, instead of immediately diving into boring syntax lessons, linked lists and data structures, why not focus more on passion-building exercises? After all, maybe your students won’t know how the chat app they use in class to talk to the teacher was built with sockets and MEAN stack, but wouldn’t they enjoy talking to their best friends with something their teacher made themselves with code?

Without passion, even success in the field doesn’t feel like success anymore.

--

--

Washington Zhao
The Startup

Just a CS student at USC that likes to write in more than computer languages— https://washingtonzhao.com