Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Universities tbh are more for meeting likeminded people nowadays: most of the stuff taught at CS can be learnt on your own given you're disciplined enough.

Just to underline some of the points others have made, here is a short list of things I found most valuable from my CS degree:

- Algorithms, Datastructures & Computational/space complexity (ADC). <-- This one is huge imo and will allow you to discern efficient code from inefficient ones.

- Discrete Mathematics. It's the lingua franca when talking about CS and you will need it to understand ADC for example. It introduces set theory, graph theory and so forth, which are used in ADC/AI etc... to describe and solve problems.

- Linear Algebra: if you ever want to work with 3d stuff, this one will be essential. It'll also work out nicely for 2d work, and seeing as you mentioned you've got a knack for UI work, you probably will appreciate this one. It'll allow you to get an understanding of for example affine transformations etc... You will need a computer graphics course too, but this is definitely a prerequisite course to do those.

- Probability and statistics. I really hated this course (it's also one of the harder ones coincidentally), but once you "get it", you really do "get it". Ever wondered how gesture recognition works? Or how spam filters work? Well, the math required for this will be addressed here, together with the following subject.

- Artificial Intelligence. Extremely useful if you're interested in game dev, or just want to learn to solve problems in a smart and efficient manner. It combines ADC with discrete mathematics with probability & statistics.

- Calculus. If not for the math, it'll definitely make you look at things in a different way, which imo in turn, contributes to your way of looking at problems. Partial derivation / integrals and how it can relate to 3d surfaces for example. And let's not forget taylor series etc... It'll give you an idea of how mathematical functions such as sin(1) etc... can be implemented etc...

- Operating systems, Computer Architecture/organization. Essential for understanding what happens under the hood. Allows you to reason about what the best code path is for solving a problem. Should you use the GPU for example instead of the CPU etc... and if so, why? etc... It also introduces models such as finite state automatons etc... which are also applicable in language processing for, say, compilers.

And that brings us to the last, but certainly not least subject, my all time favorite: - Compiler construction. Gives you an insight in how languages are being processed, and how to design your own language and build a compiler for it. It should also give you additional insights on how runtimes/virtual machines work.

The software engineering courses were more about processes, philosophies and patterns etc... and even though they're definitely useful, I think most experienced software engineers have already "got this". Either via books, company policy/culture or via experience.

Again, these are my experiences, YMMV :) Good luck!



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: