Learn Unix on a real OS; like BSD or Slackware. High level programming languages are froth; once you understand the basic concepts, it's best to work with C and system calls til you're absolutely sure what you are doing. Learn how to use a debugger, disassembler, packet sniffer and every utility you can find for creating mischief. A few books on actual hacking, you know, the "blackhat" kind, might come handy. Hacking…
I have to disagree. Sure, if you go through that chore, you'll probably end up being a cool hacker. However, systems programming might not be what you really want to do (maybe you want to be a cool Hacker of JavaScript frameworks or whatever). I think it is better to work on stuff you really want to do. Maybe you want to create games - if at some point you realize your game's performance sucks, you can still dive dow…
The parent post nails it: Find something you want to build and then build it.
I'd add that once you build it you'll probably learn enough to want to rebuild it without all the mistakes... and once you do you'll probably want to rebuild it a third time.
It's supposed to be fun. Work on something you love so much that you work on it until your hands need a break from the keyboard.