Julia Evans

How I got a CS degree without learning what a system call is

Yesterday I wrote that I have 2 CS degrees but didn’t know what a system call was when I graduated. Some people think this is surprising and a failure of CS education.

I don’t have any opinions really about what a CS education should be, but, to explain how this happened, I wrote down a while ago all the classes I took in my joint math/CS undergrad. The math & CS theory classes at my university were extremely good, so I just took all of them.

This is just to say that “a CS degree” can represent a lot of different educations, and personally I think that’s totally fine. I know people who mostly did electrical engineering and human computer interaction! Took a ton of biology classes because they were studying bioinformatics!

But more importantly – it’s ok to not know things. I knew practically nothing about a lot of really important programming concepts when I got out of grad school. Even though I’d started learning to program 8 years before! Now I know those things! I learned them.

I have friends who are amazing programmers who sometimes feel bad because they don’t have a CS degree and sometimes don’t know algorithms/CS theory stuff that other people know. They’ve learned the things they needed to know! They are great.

Here’s the list.

undergrad

PURE MATH
MATH 235 Algebra 1
MATH 242 Analysis 1
MATH 248 Honours Advanced Calculus
MATH 325 Honours ODE's
MATH 251 Honours Algebra 2
MATH 255 Honours Analysis 2
MATH 377 Honours Number Theory
MATH 354 Honours Analysis 3
MATH 356 Honours Probability
MATH 366 Honours Complex Analysis
MATH 370 Honours Algebra 3
MATH 371 Honours Algebra 4
MATH 355 Honours Analysis 4

OPTIMIZATION + ALGORITHMS
MATH 350 Graph Theory and Combinatorics
COMP 250 Intro to Computer Science
COMP 252 Algorithms and Data Structures
COMP 506 Advanced Analysis of Algorithms
COMP 567 Discrete Optimization 2
MATH 552 Combinatorial Optimization
MATH 560 Continuous Optimization
COMP 690 Probabilistic Analysis of Algorithms

UNIX BASICS + ASSEMBLY
COMP 273 Intro to Computer Systems
COMP 206 Intro to Software Systems

CS THEORY + PROGRAMMING LANGUAGES
COMP 302 Programming Languages & Paradigms
COMP 524 Theoretical Foundations of Programming Languages
COMP 330 Theoretical Aspects of Comp Sci

OTHER CS TOPICS:
COMP 761 Quantum Information Theory
COMP 462 Computational Biology Methods
COMP 520 Compiler Design

grad school

I had to take 6 classes during my master’s. They were:

  • Higher Algebra 1
  • Geometry & Topology 1
  • Geometry & Topology 2
  • Machine Learning
  • Topics in Computer Science (lie algebras)
  • Advanced Topics Theory 2 (I don’t remember the topic right now)

My master’s thesis.

Learning systems programming with Rust Some questions about Docker and rkt