|
|
Christopher G. Wilcox |
Software Philosophy
One of my interests is how cultural factors interact with traditional software engineering
practices. Here's a short introduction to the topic:
Many software projects run over budget and past deadlines, often without producing software
that remotely meets user expectations. Since the inception of software development, the same
issues arise over and over again. Which factors contribute to the efficient production of high
quality software? Why do software projects go astray? The field of software engineering was
created to answer such questions. Has the effort been successful? Many working engineers and
academics remain unconvinced that software development has evolved into a rigorous engineering
discipline.
While many theories explain the current state of affairs, in my mind they fail to address
the fundamental issue. My view is that one of the predominant factors in software engineering
is the culture and behavior of its practitioners. To discuss such an assertion, we need a
concise definition of cultural factors and how they differ from other concerns. My simple
taxonomy divides software development concerns into three separate but related areas:
technical, environmental, and cultural.
Technical factors consist of the advances that we normally associate with computer science:
programming languages, compiler theory, parallel programming, object-oriented (OO) and
aspect-oriented (AOP) techniques, database theory, and so on. My list includes everything
that lies within the theoretical framework of computer science, with the exception of software
engineering. Technical factors exert a strong influence on software development practices,
as witnessed by how quickly theory becomes reality in many areas of computer science.
Environmental factors are the real world implementation of the techniques discussed above.
Such factors comprise the milieu in which software engineering is performance at any given
point in time. The most obvious of these are hardware platforms, operating systems, and
compilers and other development tools. Theoretical advances are interesting, but no
significant programming can be done until the theory is manifested into working tools. The
recent profusion of parallel programming models provides an excellent example of how
this works.
Cultural factors encompass the behavior and practices of software developers and managers.
The process of developing software is essentially a culture practice, as so elegantly
portrayed in "The Mythical Man-Month" by Fred Brooks. As such, it is heavily influenced
by the attitudes, biases, and backgrounds of the participants. Within most organizations,
a process is followed when making software. Software processes range from ad hoc
to carefully managed development lifecycles as described in the software engineering
literature. I contend that cultural factors exert an unduly strong influence on the
project success or failure.
All of the factors just described are closely related. As mentioned, technical factors
drive the environment for software development. Throughout the history of computer science
we have seen technical advances appear in actual products very shortly after (or even before)
new ideas are published. Environmental factors often exert a strong influence over software
development practices. As an example, the development world is currently dividing sharply
between desktop and mobile platforms. In a circular fashion, cultural factors often control
the adoption of new technologies, which in turn influences the practice of software
development within an organization. The real question in all this is what are the cultural
factors that contribute to success? I have compiled my own list:
Along with this list I include a list of worst practices. For example, why are programmers
still trying to write portable C, when Java essentially solves the portability problem? Why
are programmers still using C arrays when C++ template containers are so much easier and more
reliable? Why do managers still make the same mistakes pointed out by Dr. Brooks decades ago?
Here's my short list of pitfalls: