When I started exploring code in freshman year of high school, I wouldâve called it coding. Perhaps even programming. But it wasnât computer science.
What I now major in is computer science â a similar sounding but utterly different thing. Itâs a bit like how knitting sounds like a fun pastime on the weekends, but yarn engineering sounds like something you would only do if compensated handsomely.
And true to the name, whatâs taught in the classes Iâve taken so far at Tufts is computer science. We start at the fundamentals, memorize the concepts, and write simple programs in a vacuum.
But thatâs not how I learned programming. And much more importantly, thatâs not why I enjoy programming. I enjoy programming because I can use it to make things that other people can use. Without people on the other side, my code might as well not have been written.
I have a theory that our professors also learned programming in the way that I did. They liked it, so they got good at it, and pursued a career in it. But then they got to teaching a class and thought to themselves, âWhat kind of foundation do I wish I had when starting out?â. And then they teach this foundation, forgetting that a robust foundation isnât what got them interested in the first place.
The foundation is dull and difficult, and if you start there, you lose droves of students who thought theyâd enjoy computer science but drop the program after the first class (or first week) because theyâve seen the computer science âisnât for them.â
Letâs do a concrete example. Our first two homework assignments in Data Structures have been to implement a storage mechanism for a list of characters in two different ways: array lists and linked lists (if you donât know what these mean, thatâs completely fine). Weâre doing this to understand the efficiency tradeoffs between two different mechanisms of storing data, even though they look the same from the outside.
But to find this interesting requires a lot of imagination. Weâre building a tool that someone else could use to store data for a hypothetical use-case â but no one ever will use my code in any concrete way. The only thing that will ever run my code is the auto-grader that runs when I submit it. Thereâs nothing interesting there. Itâs just an assignment.
Perhaps if we tacked a second week onto this assignment, where we built some sort of simple program that used the data structures we created in a way that showcased their effectiveness, itâd be more interesting. But we donât do that. We struggle with finishing the assignment, turn it in, and the motivation for doing it never really sinks in.
Thatâs the other thing: these assignments are quite significant. The past two weekly homework assignments have taken me 7-8 hours each, even though I know programming already.
Itâs not hard to see how students get discouraged:
- Thereâs no âaha!â moment early on where they see why what theyâre learning is interesting.
- Assignments are a difficult and stressful to pull yourself through. Extremely stressful.
I wish there was something earlier on that would show computer science majors why what theyâre doing is interesting. Why programming is an enjoyable thing to do. Why it brings me so much joy to do for my own projects.
So to my friends in these CS classes: hang in there. Let me know if you want to bounce ideas off of someone. But most of all, it gets better. Perhaps not in these classes, but knowing how to code means you can make things for other people; and thatâs probably my favorite feeling.