I think that learning the theory is more important than the tools we use in industry. Picking up a programming language is pretty easy, if you already know all the hard topics like different paradigms, computability, logic, mathematics and so forth. Sure, you can learn these on your own, but I think its much more valuable to have people who know how to learn, know how to program and have a good, solid theoretical background.
I don't think you can be a great programmer unless you can develop a non-trivial program in a programming language in all major paradigms. The best way to do this, is to know the more abstract details beforehand.
Having said that, I do believe its important to do a lot of hands-on programming experience and feel that universities need to be somewhat more hands-on too. I also think that they should put some focus on team work and collaboration, on tools like debuggers, source control and profilers and also things like unit testing, though it is much much easier to learn these later than it is to learn the theory later.
I don't think you can be a great programmer unless you can develop a non-trivial program in a programming language in all major paradigms. The best way to do this, is to know the more abstract details beforehand.
Having said that, I do believe its important to do a lot of hands-on programming experience and feel that universities need to be somewhat more hands-on too. I also think that they should put some focus on team work and collaboration, on tools like debuggers, source control and profilers and also things like unit testing, though it is much much easier to learn these later than it is to learn the theory later.