Why is it that some software engineers and computer scientists are able to produce clear, elegant designs and programs, while others cannot? Is it possible to improve these skills through education and training? Critical to these questions is the notion of abstraction.
These are the questions Dr. Jeff Kramer of Imperial College London asks in his latest paper titled Is abstraction the key to computing? -- ACM Volume 50 Issue 4.
So perhaps I advanced Dr. Kramer's argument a bit too far to fit my educational background (Physics degree, Secondary Science Education Certification). However, here's why I believe Physicists in general are better software developers than their Computer Science (only) counterparts.
Abstraction Skills: Having to install, configure, manipulate laboratory equipment to produce results that prove or disprove an esoteric equation on the chalkboard is a great exercise in abstraction. Raise your hand if you have ever suspended an oil droplet in an electrostatic chamber (
Millikan Oil Drop Experiment) and produced a value within one percent of the currently accepted value for the charge on an electron? I dare say that infinitely many Physics undergraduates have! Along the way burning themselves with hot oil and shocking themselves with high voltage DC power supplies!
The skills necessary to convert abstract, complex (Quantum Mechanics anyone?) ideas into easily digestible and meaningful equations and then convey those ideas to others is another form of abstraction. To distill down the complex into the essential leaving all extraneous bits out.
"Things should be as simple as possible, but no simpler"
- Einstein
Debugging Skills: Physicists have better problem solving skills than do their CS counterparts. They have to! It's just that simple. They have to because to earn a degree in Physics one has to solve countless Physics and Math problems (on paper and in the lab). This requires very good problem solving skills and the ability to view the 'big picture' while working on the minutia and to quickly jump back and forth. This makes for better debugging and problem solving.
Abstract Communication Skills: Physic teachers are able to carefully select the appropriate level of abstraction to include only that which is necessary or required to properly convey the idea for the target audience. The same lesson (F=ma) has to be conveyed differently to sophomores than to seniors. Good Physics teachers are able to do just that. This skill is valuable especially when in the boardroom trying to convey to the "Decision Makers" why one software implementation plan is better than another.
Is Abstraction Teachable? If so, then how? Good questions. Dr Kramer addresses the teaching of abstraction in his paper.
Join the ACM and read it online.