## Algorithm Drills

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
- Math
- 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