Comment This guy is about as unbiased as Stroustrup! (Score 5, Interesting) 1267
99% of what you learn as a programmer you don't learn at college anyways (at least the people who don't totally suck at programming). Furthermore, unless you have one-on-one mentoring from a senior programmer or professor who has at least 10 years of solid professional coding experience under their belt, not much else is going to help you other than you and yourself in maturing as a programmer.
Most CompSci college graduates are totally unproductive on their first job. They can be put to work on trivial things, but no matter what school they came from, they are just going to need a lot of hand-holding to make it through the first year. That is just how it is. Doing coursework at school is no substitute for coding on a meaningful project, whether it be work related, something open-source related, or just something for fun. That is the honest to god's truth as a software developer for over 12 years now and I don't even consider myself even that wisened in the field (maybe after 20 years I will feel differently).
Now, with respect to Java as an introductory programming language, it is not bad but not great either, however the purpose of any introductory course to anything should be to capture the interest of the people who are curious enough to take the course in the first place. Back in college, we started with C (most of my peers had already been programming since they were teething but this was CMU) and if not for my persistent no quit attitude in life, I probably would of given up programming right then and there because spending your entire night trying to debug a trivial program not because you didn't understand the material but because of one stupid uninitialized pointer turns a lot of people off right then and there who may have had the potential to be great programmers, but because their first impression of programming was so bad, they gave it up before they got to learn more about how great programming really is.
Oh yeah, and the not relevant at all math courses didn't really help much either. Whenever in your career you need to use some advanced calculus or discrete math, you will have likely forgotten about 99% of it and need to look it all up in a book anyways. Besides, 99% of programming projects in the real world basically involve high school level algebra and not much else. What separates the productive programmers from the unproductive ones is not who got a better grade on their math course back in college, but those who innately understand systems and are willing to make the extra effort to learn all about the gazillion design patterns available to programmers so that when they are faced with a difficult project, they will not waste inordinate amounts of time reinventing the wheel.
As for understanding computing at a rather low-level, as is the case with a class in operating systems, then yah Java might not be such a great choice, but then again learning C is easy because C is made up of very simple constructs (C++ is another story). However, using C productively just requires a crapload of practice/experience to be good with, not necessarily a whole lot of computing expertise. In addition, the mastery of whatever API's you happen to be basing your career on is paramount as well. In the real world, employers don't want to hear "but I can learn anything quickly" because mastering some API's can take 6 months or more so if you come out of university with no specific skill sets, it is going to be really hard to get that first job because unless you can be productive soon (or even on day one), you are useless as far as employers are concerned. Also, though I don't program in Win32 professionally myself, from my understanding it takes at least 3 years of non-stop work with those API's just to be semi-proficient in them. Professionally, most of my work over the years has been in Java, and Java is probably scary to a lot of neophyte programmers these days because since 1.5, it has unfortunately turned into the bastard child of complexity like its twisted sister C++.
Last but not least, as for the complaint about students needing a GUI IDE to write Java code, well that is unfortunately true these days thanks to some of the really poor decisions SUN has made over the years concerning Java, especially the retarded ugly complex (and confusing) syntax of generics. Newbie programmers may feel they need an IDE because what was once a simple, powerful, and productive object-oriented application programming language without all the silly ivory tower crap of C++, is now exactly that thanks to the marketing department over at SUN pressuring the Java folks to keep up in the feature race with C#.
If you want to know what is really "damaging" to students, I would say turning the mass majority off to a career in programming through irrelevant coursework and boring introductory classes is what is really to blame. The first couple of courses in CompSci should be simply about programming simple games (and not the towers of Hanoi for crying out loud). Most people I know (including myself), got interested in programming because of games and are desire to hack at them or even write a few ourselves, not because of the promising potential of working in the bottom of the basement at some IT department.
Programming can be extremely fun, even if your work does not happen to be on a game, but showing people first hand the power you have with the ability to program anything you want, especially a game, gets a lot of people to look at programming as more than being just an autistic math nerd's paradise. If you want people to put up with the hard stuff in pursuing a career in programming, you first need to convince them that putting up with the hard stuff is worth it in the long run.
Most CompSci college graduates are totally unproductive on their first job. They can be put to work on trivial things, but no matter what school they came from, they are just going to need a lot of hand-holding to make it through the first year. That is just how it is. Doing coursework at school is no substitute for coding on a meaningful project, whether it be work related, something open-source related, or just something for fun. That is the honest to god's truth as a software developer for over 12 years now and I don't even consider myself even that wisened in the field (maybe after 20 years I will feel differently).
Now, with respect to Java as an introductory programming language, it is not bad but not great either, however the purpose of any introductory course to anything should be to capture the interest of the people who are curious enough to take the course in the first place. Back in college, we started with C (most of my peers had already been programming since they were teething but this was CMU) and if not for my persistent no quit attitude in life, I probably would of given up programming right then and there because spending your entire night trying to debug a trivial program not because you didn't understand the material but because of one stupid uninitialized pointer turns a lot of people off right then and there who may have had the potential to be great programmers, but because their first impression of programming was so bad, they gave it up before they got to learn more about how great programming really is.
Oh yeah, and the not relevant at all math courses didn't really help much either. Whenever in your career you need to use some advanced calculus or discrete math, you will have likely forgotten about 99% of it and need to look it all up in a book anyways. Besides, 99% of programming projects in the real world basically involve high school level algebra and not much else. What separates the productive programmers from the unproductive ones is not who got a better grade on their math course back in college, but those who innately understand systems and are willing to make the extra effort to learn all about the gazillion design patterns available to programmers so that when they are faced with a difficult project, they will not waste inordinate amounts of time reinventing the wheel.
As for understanding computing at a rather low-level, as is the case with a class in operating systems, then yah Java might not be such a great choice, but then again learning C is easy because C is made up of very simple constructs (C++ is another story). However, using C productively just requires a crapload of practice/experience to be good with, not necessarily a whole lot of computing expertise. In addition, the mastery of whatever API's you happen to be basing your career on is paramount as well. In the real world, employers don't want to hear "but I can learn anything quickly" because mastering some API's can take 6 months or more so if you come out of university with no specific skill sets, it is going to be really hard to get that first job because unless you can be productive soon (or even on day one), you are useless as far as employers are concerned. Also, though I don't program in Win32 professionally myself, from my understanding it takes at least 3 years of non-stop work with those API's just to be semi-proficient in them. Professionally, most of my work over the years has been in Java, and Java is probably scary to a lot of neophyte programmers these days because since 1.5, it has unfortunately turned into the bastard child of complexity like its twisted sister C++.
Last but not least, as for the complaint about students needing a GUI IDE to write Java code, well that is unfortunately true these days thanks to some of the really poor decisions SUN has made over the years concerning Java, especially the retarded ugly complex (and confusing) syntax of generics. Newbie programmers may feel they need an IDE because what was once a simple, powerful, and productive object-oriented application programming language without all the silly ivory tower crap of C++, is now exactly that thanks to the marketing department over at SUN pressuring the Java folks to keep up in the feature race with C#.
If you want to know what is really "damaging" to students, I would say turning the mass majority off to a career in programming through irrelevant coursework and boring introductory classes is what is really to blame. The first couple of courses in CompSci should be simply about programming simple games (and not the towers of Hanoi for crying out loud). Most people I know (including myself), got interested in programming because of games and are desire to hack at them or even write a few ourselves, not because of the promising potential of working in the bottom of the basement at some IT department.
Programming can be extremely fun, even if your work does not happen to be on a game, but showing people first hand the power you have with the ability to program anything you want, especially a game, gets a lot of people to look at programming as more than being just an autistic math nerd's paradise. If you want people to put up with the hard stuff in pursuing a career in programming, you first need to convince them that putting up with the hard stuff is worth it in the long run.