Should We Do "Computer Science"?
use.perl.org
use.perl.org
IMHO, the first is not really a problem, or at least not a big one. Part of the way a field advances is that researchers are free to try out any old idea, to see if it is any good. Most of them aren't, but we don't know which are worthwhile until we try them out. So it helps that researchers are disconnected from the process of making salable products. "Make something that sells in two months" is not a good way to get people to try out interesting new ideas.
The result is a slow filtering of ideas from research into practice. Occasionally, a university researcher comes up with something that the programmer on the street can immediately pop into a product (RSA encryption, bump mapping, Introsort, ...) but this is not the norm; nor, I think, should we expect it to be.
The second problem (low-quality C.S. graduates) is more serious. The writer's suggestions are not particularly new; they amount to putting more of what is often called "software engineering" into the C.S. curriculum. And part of the problem there is that it is difficult to do large projects in a university course setting. When you don't do large projects, all that stuff (teams, complexity management, ...) is not really needed. So, while this second problem is worth pointing out, I don't think there are going to be any quick fixes for it.
When you come out of these programs you're neither an "Engineer" nor are you an "Architect" and using those titles next to your name is actually illegal. There is no expectation that the academic training produce a finished professional.
You then continue on another multi-year process of test-taking and working as an apprentice. Of learning the actual real world facets of the field. Facets which involve management, teamwork, business, people, design, how to deal with long, complex projects, scheduling, budgeting, etc. In short all the boring details which separate the dilettante from the professional.
Finally after you complete your state-mandated term as an apprentice you take some tests, submit a portfolio of your work to the government and assuming you are actually good enough you get your stamp, can use your title, and basically be counted on to do a professional job.
This system while cumbersome actually has a proven track record of working and producing capable professionals. Buildings often actually get built on time and budget and they rarely fall down onto people.
This isn't to say university is bad. Data structures, algorithms, etc.. should all come at an instructional level, but good design practices definitely come from coders.
As a side note, is there any sort of organized apprenticeship program, or are we dependent on introductory training at a job/Open Source level?
Not quite as good as a apprentice/mentor day-in day-out but it is supposed to work pretty well.
If that's actually the case he should be hiring those people because most interviewees can't even do those things.
To extend this thought, I also believe that someone majoring in any field--from English to art history--should be able to become professional programmers. I feel that industry is trying to make universities technical schools, when they have an academic focus.
That is not to say that I don't agree with some of the previous posters. We do need more training centers for people with practical inclinations.
I feel that the problem with this whole system is that people are automatically expected to go to university if they did well in high school. If not they will violate a social norm, and shame their parents. There should be practical schooling options for students that are also hard and prestigious.
I agree with this. I've been working as a programmer for a couple of years now and I'm planning to go to university to study computer science. I'm kind of annoyed that all of the universities I've looked at are all business now: the brochures are full of how students won't "miss out" on the practical, real-world side of things.
That's exactly what I'm not looking for, but unfortunately there doesn't seem to be any place to go if all you want is computer science.
I don't mean to be coy, but what's the point? Is it that business skills are important, too, and that universities (and their CS departments in particular) are underserving the computing industry? That's what one of the comments (http://use.perl.org/comments.pl?sid=42485&cid=67709) seems to indicate. The American education system needs some work, but I think it's a mistake to see a university education as vocational training: the "fields" in a university don't correspond to "fields" in the world. It's a coincidence that computer science roughly corresponds to a field in high demand these days.
(Also, CS people should be comfortable slinging code around. Some would argue this point, but having decent programming skills makes anybody whose work involves computers much more effective. Ideological purity be damned.)
Vocational education programs in computer programming tend to produce code-monkeys who produce internal applications that don't do anything especially interesting. The applications are usually web and desktop GUIs over some database, and tend to be written in Java, C#, VB and the like. Most people with this level of training would have trouble picking up a new language without more formal training.
Computer scientists tend to know massive amounts of theory. I suspect most computer scientists could pick up a new language simply by glancing over the documentation, and write a paper describing the theories the language implements. If you asked a computer scientist to create an application the accounting department at a big company could make use of, however, you'd probably have bad luck.
What's often missing is education and training for software engineers. Finding solutions to difficult problems requires a good grounding in theory, but actually implementing them requires a background in tools that meet real-world needs. It does appear that degrees in software engineering are starting to appear, though I know essentially nothing about the programs. Most hackers fall in to this category, though their learning tends to come from less formal sources.
Where do we find programmers who understand both the theory of algorithms and the practice of software engineering? It's simple - find someone who learned the theory in school and also has a few years of experience applying that theory. There are many of these people. If you can't find them, maybe the opportunity you are offering is not very attractive.