What you should do or learn:
Programming paradigms – Imperative, object-oriented and functional programming. Try to learn a language for every category. Example: C (procedural), Java (object-oriented) and Haskell (functional). If you know every style, you will program much better, especially when you use multi-paradigm languages, like Python, C++ or Scala. Addons are Assembler, Prolog and Forth.
Algorithms and data structures – Complexity theory, optimizations, searching, sorting, cryptography, AI, graphics. Dig deep to the hardware level and learn about instruction sets, caches and architectures. Compilers and operating systems are the high end topics here.
Abstract background knowledge – quite theoretical. Lots of math, formal verification aka model checking, Turing machines, lambda calculus and type theory.
- The human side – project management, design patterns, UI design, psychology. You will have to deal with people, who think very different than you. Managers, customers and co-wokers may not be “into computers” like you are.
- Practice – with the Open Source movement, you have a wealth of projects, who would like to get a hand or two. You’ll learn to deal with people and foreign source code. You’ll also gain familiarity with some tools like version control, IDEs and wikis.
- Creativity – don’t forget to do other things. Music, design, drama or whatever you like. Your brain has two sides and not both are for logic. Creativity and outside the box thinking can be learned and nurtured.
- Personality feats – university is a good place to develop yourself. Learn to work with discipline, to stay healthy and fit and to be social! Train good habits and starve the bad ones! Read a lot!
The choice of the university is mostly important for the piece of paper you get at the end. The education you get depends on you.
COMMENTS