Software Development: Science or Art?
Many of the problems related to software
development are at the individual level,
with those who create bad code rather
than with any specific technology issue.
Therefore the goal of anyone staffing a
project is to attract employees most
likely to ensure success. The infamous
1968 study by Sackman, Erikson, and
Grant, "Exploratory experimental studies
comparing online and offline programming
performance," concluded
that productivity variation between
good and bad developers was a factor of
10. The test was based on how quickly
their subjects could write a program to
solve a maze algorithm, and implicit in
this was the assumption that the coders
who solved it fastest were superior. It's
not an illogical conclusion to make.
Most computer science faculties do the
same when they grade students based
on their ability to write sort routines or
their intimate knowledge of Knuth's
programming fundamentals.
Frederick P. Brooks in The Mythical
Man-Month writes, "The hard part of
building software is the specification,
design, and testing of the conceptual construct,
not the labor of representing it." In
other words, it's the thought process that
is essential to success, rather than coding
horsepower. If the act of programming is
more aligned to a creative process than to
one requiring a traditional engineering
discipline, why is this not encouraged and
recognized more? The most successful
teams I've worked on are usually composed
of well-rounded individuals who
aren't chasing the latest technology fad to
pump up their résumé. These people
have both feet firmly on the ground. They
stay focused on delivering sensible solutions
to the immediate problems.
Writing good software involves foregoing
gratuitous complexity, concentrating
rather on such concepts as reuse, maintainability,
and reliability. Often those
most qualified for this aren't professional
computer scientists but instead graduates
of other disciplines who, instead of focusing
on being one-person programming
machines, have developed their analytical,
creative, and communication skills
while at college. It's hard to formalize
what traits good programmers need, but I
think people interested in subjects outside
of computing, the musically minded
for instance, make the best coders.
Mathematics disciplines are often
separated into pure and applied: number
theory versus building a bridge that
won't fall down. Perhaps computer science
needs the same, so that future generations
of programmers will be more
grounded in the practicalities of building
and maintaining application code. The
two most important movements in software
of recent years - design patterns
and extreme programming - were not
born out of any academic research institute
but instead came from experienced
developers looking for ways to improve
the production process.
In "Hackers and Painters", Paul
Graham draws parallels between a programmer
and an artist. The artist doesn't
need to know the chemistry of paint, but
instead is responsible for knowing how
to mix and match colors to create the
finished canvas. The best coders likewise
are not immersed in esoteric computing
theory, but have a picture of the finished
product in their minds and understand
the techniques required and the tools
available to arrive at completion.
In terms of degree results and employment
placements, the safe route for college
computer science departments is to
recruit mathematically minded students.
These can be drilled with little effort, or
thought, frankly, into the next generation
of speed coders. Each year they collect
their degrees only to join business IT
departments or software companies.
Computer science was born out of a marriage
of mathematics and engineering,
but surely it's time for the faculty to take a
step away from academic roots and try to
attract and nurture the more practical
side of programming. Universities must
attract creative individuals as the next
generation of programmers, and dispel
the myth that successful software development
is a sport practiced by mathmo
nerds. Instead it's more akin to poetry for
machines, with computer language syntax
being the artist's medium.
References
Sackman, Erikson, and Grant:
Click Here !
The Mythical Man-Month: www.awbc.com
Hackers and Painters: www.paulgraham.com/hp.html
Author Bio
Henry Roswell is a veteran consultant who would like to think he's seen it all, but is constantly amazed by new events everyday.
henry@sys-con.com