| People are incredulous when I tell them I use 90% of the stuff learned while getting my CS degree. Stuff I've done in the real world: AI: I've lost count of the number of times I've had to implement A* Graphics: wrote a ray tracer; matrix transformations Data structures and algorithms: wrote an approximation algorithm for the travelling salesman problem (christofides); fancier data structures like bloom-filters, lru caches; and just every day coding Databases: query optimization OS: Made me aware of systems (context switching, caching performance,...). Scheduling algorithms and how they affect the embedded software I write. Concurrent programming. Networking: Super helpful for everyday stuff when you understand the underlying principles. I've had to implement an RFC from scratch (DNS). Linear algebra: Used extensively in a path planner I wrote---with it I was able to reduce the state space by orders of magnitude compared to the standard grid approach. Statistics: wrote an online algorithm for adaptive windowed linear regression Even computability theory has been helpful, as it has strengthened my proving and reasoning skills---helping me find holes in requirements, or proving algorithms/invariants. Same with all the theoretical math courses I took (Analysis, Set Theory, First Order Logic ...) The list goes on... Above all, my CS degree taught me how to learn CS and beyond. Sometimes I worry about the potential solutions I am overlooking, because I never fully branched into the continuous domain (control theory, etc). |
FWIW I switched out of CS into Mathematics after one year. I've never implemented A*, I've used raytracers but not implemented my own, used a bloom filter but not implemented it, used an lru cache but not implemented one, used adaptive windowed linear regression but never implemented it myself. When optimizing database queries I've never needed more than EXPLAIN SELECT; when optimizing performance I've never needed more than a language-level profiler. I did actually implement an RFC from scratch (SMTP), but that was easy enough to do by, well, reading it and implementing it.