Tuesday, December 21, 2010

Children Programmers

No high-school graduate expects to get a job as a physicist, even after getting top grades in the advanced placement physics exams. But I know of many high-school students who make money programming, and who think of themselves as professional programmers. No large or knowledgeable company will use such child labor, but there are still many small businesses and other clients who don't understand what really makes a professional developer, and are glad to save some money this way.

If this is a small one-time job that doesn't require maintenance, it may even be successful. But if it becomes necessary to make changes, especially after the programmer has graduated from high school and moved elsewhere, the client often needs to scrap the application and start from scratch, having learned something the hard way.

This is not the children's fault. They really don't understand what being a professional programmer is about. In fact, this is not always discussed explicitly in the university computer-science curriculum. Yes, there are courses on software engineering as well as project-based courses, and conscientious professors require extensive tests and documentation even in other courses. But there are many courses, with specific requirements in each, and it is very difficult to create a truly large project that really requires good software engineering practices in the undergraduate curriculum.

Without such projects, the exercise is self-defeating. Students will do whatever is required to get a grade, which often means creating an impression of using the practices required of them. But they will realize that this isn't really necessary for the project itself. As a result, they will feel that software engineering is another of those things best forgotten after the exam. Hopefully, they will recall what they learned when they start working for real, and encounter the problems that make disciplined development a necessity. I still occasionally meet former undergraduate students who tell me that now that they work in industry they finally understand what I was talking about.

Being professional is actually much more than following some software engineering process. It is taking responsibility for your work: pursuing quality, avoiding questionable practices, refusing to release dangerous products. It is taking responsibility for yourself: keeping yourself educated, continuously learning, being honest with your co-workers, employer, and the public in general. All these things can't be taught in one course, in the same way that children can't be educated to be responsible citizens in one year. Both require lifelong learning, and teaching is best done by example. And with so many adults behaving like children (see "Programmers as Children"), how can we expect the children to behave like adults?