CS50 and the Computer Science Mindset

CS50, Harvard’s introductory computer science course, is the most influential class I’ve ever taken. CS50 spurred my interest in computer science – which I nearly pursued as my career – and the methodologies of computer science continue to inform my understanding of the world and guide my decisions to this day.

The Cult of CS50

I was reminded of this because the New Yorker recently published a profile on David Malan, CS50’s charismatic and innovative professor (and my boss at one point!). Even though much of the interview focuses on Malan’s pioneering work in digital-friendly education with high production value, the article also captures some of Malan’s quirks, like his antiquated speaking habits (he says “lest” a lot) and his Jobs-esque wardrobe, and it took me back to my time at Harvard. When I took it in 2009, CS50 was more cult than ordinary Harvard course, garnering a class size approaching 700, meaning nearly half of Harvard undergrads take it. It held enormous events like an overnight hackathon and a project exhibition fair, replete with corporate sponsors such as Google, Facebook, and Dropbox. CS50 even has its own branding and swag! I still wear my “I took CS50” t-shirt and CS50 hoodie; in fact, a Harvard alum wearing a crimson H hat commented on my CS50 shirt in Trader Joe’s the other day.

As a sophomore, I was a n00b when I took CS50, but the dazzle of Malan’s lecturing, the committed teaching staff, and the nature of computer science itself attracted me immediately. The problem sets were time-consuming during a challenging semester (my other courses were quantum mechanics, organic chemistry 2, and molecular/cellular biology. lol), but I still remember those CS50 psets fondly. We coded Sudoku, we made simple websites and databases. My favorite pset was racing to load a mock dictionary and query it as quickly as possible to climb the classwide leaderboard… good times. In the years following, I joined the teaching staff army, becoming a grader in 2010 and then a teaching fellow in 2011 and 2012.

You can join the cult too, even now in the age of COVID. CS50 is a flagship course of EdX, the free online course collaboration by Harvard, MIT, and other renowned universities. Although you won’t have TFs grading your psets, there are recorded sections, and of course the main events – Malan’s lectures – are designed to be consumed online. Malan is a phenomenal lecturer and the lectures incorporate student interactivity, physical demonstrations, and multimedia tools. I just watched the 2019 lecture0, and he still rips a phone book in half on stage (multiple times!), but other components have certainly evolved since 2009. For instance, he had a student play a Scratch-coded Ivy League themed version of the World’s Hardest Game for three minutes on stage.


Computer Science Training is Valuable

Sure I’m a doctor now, but I almost wasn’t. I graduated with a secondary concentration (a minor, in Harvard speak) in Computer Science with a focus on low-level systems designs. I went through several rounds of CS interviews and had accepted a coding job for after graduation. Seriously, I signed a contract and booked plane tickets and all before suddenly reneging seven weeks before my start date in order to commit fully to medicine.

Nonetheless, my training in computer science has proven probably more valuable than my concentration (major, in Harvard speak) in Chemistry and Physics.

Comfort in Exploring Digital Spaces

You probably spend your working hours in front of a screen and then spend much of your leisure time either in front of a big screen or a small screen. I do too. 

I enjoy watching vids, guffawing at memes, and scrolling through the webzones just as much as anyone, but my favorite digital space is probably the Settings tab. Seriously, I love poking around to find out what options the developers have implemented to enhance our experience. In addition, I go out of my way to open all the menus and click all the buttons just to see what happens. I’m not afraid of losing my way or “breaking things;” thanks to my training, I trust my ability to find my way back, and I trust the developers to have built a system robust against foolish end-users (like me). Also, I’ve kind of been part of the tribe: I’d want my end users to appreciate all the features I’ve built too. 

Give it a try! Mature programs and websites have thousands of man-hours behind them, and often there’ll be capabilities that make the program a lot cooler than you initially assumed. Some great examples might include tab stops (can people please stop spamming spaces to pseudo-right align, please??), MSWord Styles in general, PowerPoint color themes and default shapes, YouTube keyboard shortcuts, Gmail labels, and the different Views available in File Explorer.

Tinkering is Handy

In fact, propensity to tinker around with the settings of my work-related programs has frequently become my side gig at my jobs. At my clinical research job, I also redesigned and automated the Excel spreadsheet used biweekly to self-report work hours. I also built a Microsoft Access database for them (I hadn’t used access before). 

Currently, at my radiology residency, I’m the resident power user of our two programs: GE Centricity for scrolling through radiological studies and Nuance PowerScribe for producing dictations for clinicians to read. I’m in the midst of several projects for seeing how we might rework the inner workings of our dictation habits to streamline our workflow and perhaps increase our accuracy. And to clarify, none of this requires any coding; this stems primarily from my fondness for clicking around just to see what happens.

Systematizing Learning

Computer science is forced to formalize the inputs and outputs of the learning process. The fuzzy concept of “getting better” is broken down into concepts such as training data, validation sets, tweakable parameters, and internal variables. 

These days, while trying to improve my ability to accurately read radiology scans, I try to liken my brain to an AI. These scans (2D pixel in x-rays, 3D voxel arrays in CTs) are my input, my dictated reports are my outputs, and the quality is validated against the interpretations of the attending radiologists. For equivocal cases, my interpretations must be verified against the underlying anatomical veracity and patient health by reading the chart for the pathology report or — get this — clinical correlation. 

Learning in Board Games

I’m not an innovator by any means, but I consider myself an optimizer. This stems from the need for testing: exploring the parameters allowed by a program and verifying proper behavior in corner cases. The process of thinking carefully about the logical space in its entirety naturally lends to uncovering emergent patterns and subsequently developing optimal strategies. Of course, I’m segueing into board games.

You might know that I play a handful of games with a distinct obsessiveness. Catan. Backgammon. On my phone, Threes. I’m the opposite of a dabbler, seeking out games with elegant rulesets and little dependency on human emotion or deceit (I eschew Mafia-type games) but strive to learn them as best as I can, Some friends joke that my favorite part of a board game is reading the rulebook, and there’s some truth to that! A game cannot be played precisely unless its game space is fully understood.

The Optimizers Mindset

Consider this, a specific example of the optimizer’s mindset. Imagine there’s some daily task that takes you an hour each day to complete (for instance, typing daily rounding progress notes). There’s an optimization you could implement that’d speed you up by 8.3%, saving you five minutes each day (say, an auto-filling template) for the rest of the year. How much time would be worthwhile to invest into executing that tweak?

21 hours. 5 minutes times 250ish workdays. That’s almost 2 workdays of reading documentation, copying and pasting phrases from other templates, and just tinkering in general. And that’s just one year of writing notes… 10 minutes for 5 years of workdays would be like a whole 6-week sabbatical. The point is: anything you do a lot (such as typing) is worth learning to do efficiently. Also, I don’t know about you, but it gives me great joy to know that I’m doing something well.

Recognizing the Digital World’s Influence

The Anthropocene is digital now, and the efforts toward seamless integration of technology into our lives is impressive, if not foreboding. I fear that Gen Z and Gen Alpha take this technological permeation for granted, not quite grasping that this kind of world is actively designed and built as such by a bunch of very smart humans. Such ignorance can be dangerous: never knowing the tedium of indexing, forgetting how to spell, or believing a targeted feed comprehensively represents the world.

Nonetheless, you should be impressed by what we have now. Look at your smartphone, which is an amalgamation of so many groundbreaking physical inventions: micro-transistors, capacitive touch screens, high-res LCD/OLED panels, inductive charging, and miniature cameras, speakers, microphones, accelerometers, antennae. Also, the software it runs represents the culmination of decades of systems: cloud storage and computing, wireless data protocols like WiFi, deeply indexed search engines, voice recognition algorithms, social media and crowd-sourced content. Finally, all the way at the bottom, there are coding languages and fundamental framework of binary logic.

So browse the internet a little (but focus on the infrastructure; the content of 2020 is mad depressing). Appreciate the extraordinary feats that generations of engineers and programs have accomplished. I think that’s beautiful.