Our brief period of computer technology has witnessed a unique phenomenon of human history. In all this time software has been almost unimaginably bad and poses a danger to humanity. Imagine a psychosis of incredible proportions in which the people of earth have endured software programs largely dangerous to life because of the unremitting unreliability. Software developers, architects and their managers have delivered products to customers. The new relations between time, money, labor and materials create a set of conditions in which reliable, useful and solidly engineered software continues to elude our brightest minds.
Software developers must share blame. For the most part we, as developers, have been content to play our role in return for handsome salaries as our part in this endeavor. Many in the software industry have raised the design consciousness to new levels, have invented different ways of thinking about software, and have altogether created an abundance of terrible, expensive, difficult to use, and non-functional programs.
Of course, many in the software industry struggle to make socially useful programs. Entertaining games, educational websites, business oriented applications, new paradigms of thinking and useful frameworks. Entire new industries create new opportunities for masses of people. Many (most?) applications often fail to hit the mark. The intellectual satisfaction of these sincere goals rarely match the true feeling of achievement of appliations fit for our human lives.
Many developers wring their hands cynically as they foist known sub-standard applications on consumers. These applications do not fulfill consumer expectations but are friendly to the software community as they reap huge profits.
Many developers have a conscious. Many of us regret this situation. Many struggle to find different, better processes and methodologies. But the sea of life’s circumstances engulfs us. We must provide for our families. We must eat, pay the rent, pay health insurance and all the other myriad expenses our lifestyles entail. We cannot easily afford to lose our jobs. These situations entail an often inhuman professional environment that cannot be closely scrutinized. Asking uncomfortable questions can ultimately make us unemployable. Indeed, most developers find our careers much easier when we accept the directions of managers rather than question or suggest remedial actions to ill-suited direction.
This is a mass psychosis. At no time in history has any species accomplished anything near as complicated as our current computer revolution. Due to the all prevasive nature of our wired world, we must realize we have been entrusted with the creation and preservation of our physical world. We collaborate with the enemy even when the enemy is us. We struggle with the many languages and procedures we must use to accomplish our multitude of tasks.
Is there, then, even an enemy at all?
Many (most?) have parlayed our professional careers to a condition that not only follows this madness, but continues, protects and enlarges it. How happy are you with the structure of work in your environment?
Voices have begun to speak out concerning this state of affairs. We constantly hear about new ways of developing software: object orientation, agile practices, clean coding, functional programming, etc. How much of this is the emperors new clothes? How do we know we know the emperor has no clothes?
What is to be done? How should a developer speak out against the travails of the stresses developers face each day? Many, perhaps most, know that something is wrong and yet we do not know how to correct the wrong. How can our situations be corrected when software contains the possibilities of so much destruction?
Our View of the Universe
What would happen should we widen our view to that of the entire universe?
Have we ground into our psyches a view that software must remain flawed? That the software architecture of applications cannot always be perfect? That the last bug in code vanished only when the last user died?
Most of us are unaware that our conception of things could contain any concrete or immediate effect on our activities as a developer. In our day-to-day work we try our best to produce the best possible code for the circumstances – in whatever fashion we consider “good”. A difficult task indeed. We lack awareness that we have a special view of the world.
If we carefully examine our world view, we likely find a complicated mixture of ideas: vague conceptions of galaxies, atoms, stars, organic life. Mix in some form our concern for our fellow human beings, some kind of piety, some awareness of beauty. How can this muddled conception of the world cause responsibility for our software development efforts?
Is it possible that this conception interferes with our efforts to build beautiful applications?
What a fantastic idea! Whether or not we believe we have a subscription to this picture, whether or not we remain aware of the impact of this residue, even as we may be moved by spiritual or ecological concerns, most of us are still in the grip of this residue. Like an infection, it interfers with our actions, morals and, especially, our sense of beauty. It controls our thoughts when we attempt our best to produce great software.
The nature of software development could be considered continued change. The days of waterfall development are past. The Agile community embraces changes – and frequent changes at that. But do we have a world view for this continuous change? I think not. In the course of designing, coding, managing software development for these dazzling changes, how often do we consider the changes we should infuse?
Conclusions?
Alas, I struggle to provide sentient conclusions, to utter words that heal this yearning to provide the world with a palative that transcends the sketchy problems stated above.
I remain conflicted in the many ways of attaining resolution.