Careers, Learning, Programming...

I doubt this is the best forum for this. But i need some good advice. I am currently in 2nd year computer science. We have covered programming fundamentals and interactive software development. To the extent i can pick a book up on how to program and know most of the things being taught in it. But where do i go from here?... What sort of stuff should i be learning now if i want a professional career as a programmer? Not just in java... I just dont know where to start. I want to learn more and more...

I wouldn't worry about the language too much. Who know what the world will be using in 10 or 20 years? And even if Java is still around, who knows how different it will be?

I would take the time to learn subjects like databases, artificial intelligence, graphics, computer architecture, compiler design, etc. And don't forget to take all the theoretical stuff, that doesn't seem to have a purpose.

The goal is to learn techniques rather than languages. But more importantly, figure out what you want or don't want to do. Wouldn't it better to find out now if you find manipulating pixels boring as heck, than finding out in your job as a web designer?

I have completed modules on databases this semester and a module of operating systems communications and protocols and computer technology(architecture). In which we did alot of linux programming. Compiler design sounds interesting. Can you recommend any good books or resources on the subject?

This semester we will be studying the following which i cant wait to tackle.

I agree with Henry, especially on the "theoretical stuff" part. When you learn about computer languages and semantics you will have an easier time learning new languages because you realize that it is only the syntax that changes (slightyly).

Follow your courses and invest time and energy in those subjects that interests you.

With respect to Compiler design you could take a look at one of Appels three books (C, Java, ML) on Compiler design:

Make sure you also study different programming paradigms, like functional (Lisp or Scheme) and logical (Prolog). You don't need to become a proficient programmer with them, just knowing how things could be handled differently is an eye-opener in itself.