|
Fundamentally,computer science = data structures + algorithms. in a data structure class,you learn the basic structures like PODs,structs,vectors and linked lists. in algorithm class,you learn various basic sorting algorithms plus the big O notation and thats pretty much it. Then you will take a few physics classes,then chemistry classes,then maybe calculus one and two,then probably discrete mathematics class,one or two writing class,if you a lucky,maybe a single semester of operating system class. you may learn the basics on haskell in one class,the basic of java in another,maybe assembly in another class and you get your degree.Basically,you will leave school knowing only the basics of a bunch of things but not enough of anything. The above it how it felt to me as a CS major. |
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).