I'm afraid I have to wonder about how we're defining a "programmer." Are we saying that a "programmer" is one who programs between 1 and n languages or a computer scientist? Given the first definition, one might call a programming a "dead end." After all, it's simply hacking away at the same skill set day after day, much like a mechanic or a plumber. However, computer scientists are programmers only in the sense that programming is one of the means by which they convey ideas and construct tools. As was mentioned in an earlier comment, the applications of computation are increasing by the day (e.g. computational biology). Thus, it seems to me, that if we set the definition, the "dead-ended-ness" of the career will become obvious. The analogy then, I suppose is, mechanics work with cars, scientists and engineers create cars. If you consider either one a "dead end," fine, but there's no good answer to a query with poorly defined parameters.
It seems to me that this is a topic that will remain generally debated for a good while longer. On the whole, I think we'll see many more universities move their introductory programming courses to Java. However, I don't see this so much as a problem, rather, it may well be to the students' benefit.
When one looks at how universities teach programming/computer science, we've got to remember that there are at least two primary aspects one must learn with regards to this. As science consists primarily of theory/hypothesis and actuality (that is, actuality being the refinement and testing of theory through experiment).
Considering computer science, one must accept that OOD/OOP is the theory currently in the most favor. I, at least, tend to think that Java provides a reasonable means to teach OOD/OOP theory. Java is heavily object oriented and strongly typed, causing students to adhere more stringently to OOD theory. Moreover, Java provides a sandbox in which young programmer can begin to better understand advanced topics (e.g. pthreads or Java's Thread API, which sounds easier?). Further, Java, as I see it, stands as a gateway language. That is, it provides a reasonable bridge between the languages of today and the languages of the future.
However, theory alone cannot create useful and skilled developers. Students will have to learn C and assembler. They will have to understand how opcodes are developed, how kernels handles socket calls, etc. The actuality of computer science, having not yet caught up to the theory, requires students to understand both and the differences between the two.
That said, I see no harm in universities naming Java their introductory language of choice. In addition to the benefits above, its syntax is close enough to C that the transition to the "actuality" of programming should be relatively easy. So, I suppose, in the end, we must let the kids have their sandbox, where else are they going to learn to play nicely?
I'm afraid I have to wonder about how we're defining a "programmer." Are we saying that a "programmer" is one who programs between 1 and n languages or a computer scientist? Given the first definition, one might call a programming a "dead end." After all, it's simply hacking away at the same skill set day after day, much like a mechanic or a plumber. However, computer scientists are programmers only in the sense that programming is one of the means by which they convey ideas and construct tools. As was mentioned in an earlier comment, the applications of computation are increasing by the day (e.g. computational biology). Thus, it seems to me, that if we set the definition, the "dead-ended-ness" of the career will become obvious. The analogy then, I suppose is, mechanics work with cars, scientists and engineers create cars. If you consider either one a "dead end," fine, but there's no good answer to a query with poorly defined parameters.
It seems to me that this is a topic that will remain generally debated for a good while longer. On the whole, I think we'll see many more universities move their introductory programming courses to Java. However, I don't see this so much as a problem, rather, it may well be to the students' benefit.
When one looks at how universities teach programming/computer science, we've got to remember that there are at least two primary aspects one must learn with regards to this. As science consists primarily of theory/hypothesis and actuality (that is, actuality being the refinement and testing of theory through experiment).
Considering computer science, one must accept that OOD/OOP is the theory currently in the most favor. I, at least, tend to think that Java provides a reasonable means to teach OOD/OOP theory. Java is heavily object oriented and strongly typed, causing students to adhere more stringently to OOD theory. Moreover, Java provides a sandbox in which young programmer can begin to better understand advanced topics (e.g. pthreads or Java's Thread API, which sounds easier?). Further, Java, as I see it, stands as a gateway language. That is, it provides a reasonable bridge between the languages of today and the languages of the future.
However, theory alone cannot create useful and skilled developers. Students will have to learn C and assembler. They will have to understand how opcodes are developed, how kernels handles socket calls, etc. The actuality of computer science, having not yet caught up to the theory, requires students to understand both and the differences between the two.
That said, I see no harm in universities naming Java their introductory language of choice. In addition to the benefits above, its syntax is close enough to C that the transition to the "actuality" of programming should be relatively easy. So, I suppose, in the end, we must let the kids have their sandbox, where else are they going to learn to play nicely?