WritingThe gap between a CS degree and shipping software
PublishedMarch 5, 2025
Reading time3 min read

The gap between a CS degree and shipping software

University taught me to think like a computer scientist. The internet taught me to build things. Here's what I had to unlearn, and what I'm glad I learned.

I graduated with a Computer Science degree and promptly discovered I didn't know how to build a website.

Not really. I knew HTTP existed. I'd written some HTML in first year. But could I sit down and ship something real, from nothing, to a URL someone could visit? Not without a lot of Googling.

This isn't a complaint about my degree. It's an observation about what university is for, and why the gap between it and industry is so consistently surprising to new graduates.

What the degree was good at

Computer Science is fundamentally about reasoning about computation. My degree made me good at:

  • Thinking in abstractions — separating what a thing does from how it's implemented
  • Analysing trade-offs — time vs space, consistency vs availability, simplicity vs flexibility
  • Reading research — papers, specifications, technical documentation
  • Knowing that I don't know things — understanding that every tool has assumptions baked in, and those assumptions matter

None of these show up in a portfolio. None of them help you on day one. But they're the things I reach for when a problem gets hard.

What I had to learn after

The actual mechanics of building software — the stuff you spend most of your day doing — I learned outside of lectures:

  • How the web actually works — HTTP headers, CORS, cookies, sessions. I knew TCP/IP from networking class but had never traced a real request.
  • Git beyond the basics — not just commit and push, but rebasing, resolving conflicts, reading git blame like a detective novel
  • Reading other people's code — university code is written to demonstrate concepts. Production code is written by humans with deadlines, changing requirements, and imperfect information. It looks different.
  • Deploying things — the first time I set up a server I felt like I was doing something illegal. Nobody had taught me this was a skill.

Most of this came from projects. Side projects, open source contributions, reading source code out of curiosity.

The thing I'd tell myself on day one

Stop waiting to feel ready. The gap doesn't close by studying — it closes by building things that don't work, then figuring out why.

The degree gave me a way of thinking. Building things gave me things to think about. Both matter. Neither is sufficient alone.

Also: learn to touch type. I'm still annoyed at myself for taking so long to do that.

← Back to writingMarch 5, 2025