Software Development
Anyone can tell you that writing software is hard. But that analysis is not precisely
correct. Writing software is actually easy, just like digging ditches is easy (if done
by pointing and clicking). Deciding what software to create, and how
it will be architected, written, certified, tested and released, is not only complex, time
intensive, and expensive, but is almost never actually done. Most software is written
by diving in and coding toward an elusive end.
The classic analogy is that software is like any other ware: incredible experitise is required
for design and tooling, but only skilled labor is needed for manufacturing
and distribution. Architects and engineers are expensive, educated, experienced professionals.
Electricians, plumbers and carpenters are trained craftsmen. Truck drivers and line workers are
unskilled laborers. It seems like the modern endeavor
of software development ought to correspond to other costly, complicated, large-scale projects,
with tier upon tier of careful structure. The curious thing about software is that this is
just generally not how it's done.
It is this single facet of software development---that all of the work from start to finish
is often completed entirely by highly-paid, ultra-creative techno-wizards---that makes software
development hard. The problem space itself is no more fundamentally difficult than creating any other
complex thing. However, the discipline has developed without the usual hierarchy associated
with big projects. The problem with programming is the programmers.