However, expertise requires all of knowledge, experience, and some degree of innate aptitude. No web course will turn anyone into a grizzled veteran programmer. Indeed, the major value of a grizzled veteran programmer is not the “programmer” part, but the “grizzled veteran” part. The experience to look at a project plan and realize the “final delivery” event is a year too early on the timeline, regardless of what the PERT chart says, is grizzled veteran, not programmer. The experience to recognize the symptoms of a junior programmer being unknowingly in over his or her head is grizzled veteran, not programmer. The experience to realize that something that sounds like a minor variation on something done a hundred times before is in fact a major departure from experience is grizzled veteran, not programmer.
Programming is still a craft, not a profession; the software field has simply not advanced far enough for “software engineering” to be anything other than a hope. Most “software engineering” books deal with the craft content of algorithms and data structures, and at times with the craft processes of requirements definition and fulfillment. While knowing how to build a form for a concrete pour is a valuable skill for a civil engineer to know, it is by no means the essence or even a particularly critical part of civil engineering. “Software Engineering” is still at the form building stage.
Although a certain degree of mathematical sophistication is necessary in some areas of computer programming, mathematical skill is generally not necessary. The single factor most predictive of success in the programming field is actually facility in one’s native language. Programming is, to a large extent, the reduction of the “idea” of a program to a textual expression of that idea — the program. This is essentially the same process as writing an essay or composing a speech. Programming is a skill that, with normal creativity and intelligence, can be learned.
Copyright © 2001 Brian Hetrick
Page last updated 30 December 2001.
Data Structures I
Building Blocks II
Data Structures II