It can be a source of argument as to the qualities and experience than one expects to be embodied by an “expert” in any field. I do not want to entertain this argument here; let that lie in the domain of Socrates or Plato. For this illustration let us agree that an expert software developer is one that is recognizable by other “expert” developers. I know I am cheating here, so let’s move on.
Experts are able to achieve Herculean accomplishments based on sheer skill. What appears to the naive outsider as effortless is actually a manifestation of hundreds of hours of refinement. A great tennis player has put many hours into his art, as does a great singer or magician or carpenter or violinist. There are at least two observations that can be made:
1. There are no shortcuts to achieving these skill levels and
2. The skills cover a very narrow domain and are not generally applicable elsewhere.
Expert software developers have likewise put many hours into honing their art. But for the expert software developer those two observations may not hold.
With the readily available general utility libraries available an expert software developer can build a reasonably complex web application over a few weekends. An expert violinist would probably be envious that they cannot use some “violin” library to add to a piece they were playing.
Also the expert developer can reuse his programming skills in other “domains”. For example, with a little motivation a kernel developer can move into web development and a business application developer can move into game development. Programming is after all very malleable.
The very nature of modern software development allows one to build things that are greater than would generally be expected from an expert in other fields. And to reiterate, I really do mean “experts” here, not the overnight “hacker” project prototypes that are passing for products lately.
But all suffer from the Expert Builder Paradox; that any application built by an expert and matching his skill is more likely to contain fatal flaws than one built by a novice that also matches his skill.
I remember building my first Perl and HMTL (and java applet of course) web application in 1999 and I can even remember some of the exact variable names I used. And I don’t so fondly recall how vulnerable it was to SQL injection.
I also remember at around the same time saving the HTML source of web forms of high profile sites and manipulating the elements to my advantage before submitting. I do not think these developers were any less expert than myself.
So while experts artisans in other fields are “protected” by the medium itself from building things that can have fatal flaws, software developers do not have that protection. So they must be especially vigilant not to be deceived by the Expert Builder Paradox.
Try to remember this when you embark on your next big project so that when it feels too “easy” you know what to look for.