Hey HN, this is my first submission, but I've been reading HN for quite a while now.
Last spring I completed my first year of study in Computer Science, at a relatively large American university. I took two courses in CS: Intro To Programming, and Data Structures. Both of these classes taught exclusively C++.
Besides a little Python (that I've completely forgotten), that is my background in programming.
Initially, I was satisfied with the courses I took. I'm taking a year off to travel (currently, I'm living in Japan), and I've been doing a bit of thinking. I've begun to realize, that while my professors preached that they were trying to teach me the underlying algorithms and not the language, I really only was taught how to do stuff in C/C++. I recently have been playing with SBCL, and I realized that I had no idea what I'm doing. I feel like most of the concepts they taught me depend completely on the way C++ works.
I've decided to correct this. I won't be back at the university for another 10 months, and during that time I want to learn a new language.
I've seen discussions about Scheme, Clojure, CL, C, C++, Java, Haskell, Erlang and so many more.
In your opinions, what should I learn, and how should I learn it? I don't really care about usefulness in the workplace, I just want to see what I know, and I want to learn more.
Anyway, I'm just feeling a little discouraged. I hate feeling like I'm wasting my time at a university to a tune of $20,000 a year. I'm sure I've learned valuable stuff, but it all feels very one-sided.
I really appreciate any advice. I've been really impressed with the entire community here, and I dislike feeling as though I have nothing to offer back.
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 tutorials from the underground scene are masterpieces of juvenile bravado but they're written by people with heart. No one in academia or industry has the same passion for computing, or for that matter skill, as those "vandals".
Get a screw driver and take your machines apart (yes, get more than one machine.) Network them. Break them. Boot obscure OSes on them. Get as many computers with different architectures and instruction sets as you can get.
You don't deserve to be coding in a fancy functional distributed language with rad tools. You need to pay your dues first and get your hands dirty.
Your university probably sucks; your professor, your TA and the A-student in your classes are probably all lousy programmers. Your library there is under-stocked. Any industry representative who comes to give a speech about computing is probably a fraud. And once you graduate, or drop out, and make computing a profession; if you ever have to assemble a team of top-notch programmers to work with, the first names to standout will be strangers who you know by their nicknames from underground computing subculture. The guys you see doing interviews and recording lectures in polo shirts and khakis are laughably incompetent, big enterprise or "startup".
Join the demo scene, the amiga scene, the root-kit scene, the virus scene, the calculator hackers, etc. to see what good programmers look like. Real, honest to goodness hacking without blogging, self-promotion or careerist pan-handling. They do it for the love it, them honest thieves.