2004-10-02 13:30 in /tech
As usual with Philip, I have mixed reactions to his latest article. I agree with the premise that the typical CS undergrad education in the US doesn’t really prepare people to be successful software engineers. Certainly, I share the opinion that more group projects, and more large, open-ended, and real-world-like projects are needed. I also think that a punch-in-punch-out mentality has to be avoided. (Although unlike Philip, I don’t find that inconsistent with a FortyHourWeek; if you aren’t dedicated and engaged, working longer won’t make you that way.)
I found that this excerpt echoed a lot of my current feelings:
Second, we want our graduates to have satisfying careers where they have autonomy, responsibility, and job security. Consider the typical computer programmer who takes specifications for a subsystem from a manager, unthinkingly produces a program to meet the spec, and hands the resulting code back for testing, integration, and evaluation by other departments. This is really a factory job where the workers' hands don't get dirty.
What's wrong with that? Sociologists have tracked a substantial loss in worker satisfaction as craft jobs were replaced by factory jobs. A craftsman builds a complete product and delivers it directly into the hands of a customer, seeing and hearing the satisfaction that the new product delivered. A factory worker, by contrast, builds a small component of a product and is typically several distribution layers removed from the customer.
A craftsman is responsible for whether and when a product goes out the door to the customer. In a classical factory a totally separate part of the bureaucracy, the quality control department, decides whether or not a product should be shipped. A craftsman listens to customer needs and adapts the resulting product accordingly. Factory workers never talk to customers; a separate marketing department assesses customer needs and determines changes in product design. Not only is a job in a code factory not very satisfying it is neither very secure.
What don’t I agree with? Well, to start with, there is the continuing fear of a brown man. Yes, lots of Indians and Chinese are getting technology jobs. And, good for them! However, I’ve supervised outsourced development groups and I’ve interviewed many developers, and it isn’t at all obvious to me that the Indian or Chinese schools are doing any better than the US ones. The Asians I’ve interviewed in general seem to have retained their ‘book learning’ better than the Americans, but they don’t do substantially better or worse at puzzles or problem solving on average.
I also don’t approve of the idea of removing the traditional liberal arts from the curriculum of aspiring software engineers. We can improve education within the discipline without removing other disciplines. Furthermore, a successful engineer of the sort that Philip would like to see is going to need to be able to communicate effectively, in speech and writing; to read critically and assimilate information from diverse sources; to understand political and macroeconomic trends, as well as the microeconomic forces at play within a business.
Finally, I would add a few suggestions, which might be implicit in Philip’s vision, but which could also be implemented within the current environment. First, students must be required to use version control on any project which involved multiple people, or which spans more than one week. Second, from day one, students should be expected to hand in test suites with every assignment, instead of relying on the test suites provided by TAs.