10 Jul 2021
Lately I’ve been trying to chip away at the fundamentals of being a good “person that writes programs that does interesting stuff”. I think this roughly breaks down into
- Algorthims and Data structures
- Systems Programming (eg. knowing how sockets work and being able to use them)
To make this a little more concrete, here are some things I can’t do that would prevent me from saying “I’m good at this stuff”:
- Recognize a problems requires FFT and correctly implement the solution
- Implement a novel and tricky cost function from a recent deep learning paper and know why it works
- Implement a SQL server from scratch
- Implement a HTTP server from scratch
I feel like I know quite a bit about all of these topics but I haven’t proved that I do.
For math I’m going to take the easy route and get a math degree. For systems programming, I’ll be taking a project based approach, IE write a kernel, write a database, etc.
For algorithms and datastructures I’ve been doing codeforces problems but I recently
had remembered an idea: katas. Doing problems over and over again. I’ll
progressively adding problems just outside my skill level that are tailored
for education and trying to speed run the entire set. I did something similiar
with chess tactics that greatly helped my game so we’ll see how it goes.
For a starting list I’m thinking:
- A few binary search problems
- A few DP problems
- A few sorting problems
- A few number theory problems