---
layout: post
title: Ticket to ride&#58 reflecting on the value of my CS degree
comments: true
permalink: ticket-to-ride.html
analysis: ◼
---


Looking back, I think the main advantage of getting a CS degree was that it gave me a lot of time to develop an intuition for how computers behave, what tools are useful for what things, and which problems are amenable to which approaches.

Developing this intuition in a semi-directed environment like school is actually really useful because classes are a good placeholder for learning.

By "placeholder", I mean that going to class is like being on a train. On a train, you can look out the window when interesting stuff is happening, and when it's not, you're free to read a book or something. Class is basically the same. Professors will take you past some really cool and important things, and it would be hard to see it all in the same timespan without boarding the train. But while you're free to pay attention to everything, you can also spend most of your time just messing around with stuff when what's going on outside your window doesn't seem important.

Ultimately it's critical to do a bit of both. In my school, for example, &mdash; and I suspect this is true of pretty much every school &mdash; there is simply no real coverage for:

* **Reading code.** Most of the emphasis in school is on tools to write code better or faster.
* **Evaluating whether code is correct.** This feels like something school should teach you, but I don't think it does. For example, how many people do you think could write quicksort correctly in C, with no errors right off the bat? I don't know any either.
* **Managing abstractions.** Even in cutting-edge research programming, most of the struggle is in managing lots of abstractions in your head gracefully. "This does this, which results in this", *etc*. Classes like PL introduce you to some tools for managing abstractions but realistically the dominating factor is not whether you've seen it before, but whether you have lots of practice using them.
* And so on.

It turns out that a CS degree is just a multi-$10k ticket to ride.

Developing these skills, in contrast, is mainly a matter of consistent, directed *practice*.

The real value of going to school, it seems, is that it lets you ground your practice in the things that you see as you go past them in your school-train. Ultimately, though, you need to put in the legwork to develop skills yourself.

I recognize that things like this can't really be taught, which is why I think that most schools should probably just have internship requirements as part of the degree, like Waterloo does.
Add ticket to ride post
Add ticket to ride post
