In deference to two of my predecessors I propose the following definitions:
Art - the study of our spiritual existence in order to acquire new insight into ourselves. By this means we increase our wealth of subjective knowledge.
Science - the study of our physical existence in order to acquire new insight into our environment. By this means we increase our wealth of objective knowledge.
Craft - the application of both our objective and subjective knowledge to raw materials in order that they acquire new form and function. By this means we increase our wealth.
Software development is not an art because it involves the creation of artefacts which possess function rather than just an aesthetically pleasing form. Nor is it a science because there are no “laws” governing it; successful practice is down to the exercising of human skill and judgement. It is a craft - the job of the software developer is to create artefacts that are of use to an end-user in that they make the end-user’s job easier in some way. This means that the software developer is, in fact, a toolmaker whose purpose is to persuade a computer not to do what they want, but to do what their client wants. For this an understanding of technology is a necessary, but not sufficient, requirement - a much more important requirement is an understanding of psychology. The professional software developer must not only understand what is possible using computers, but also how people work, i.e. what it is desirable for a computer to do. Clients are usually not very good at knowing what they want so understanding your client’s requirements is actually the major challenge in software development; for a professional software developer getting a computer to perform the required task is relatively easy - it is defining what that task is that poses the biggest problem.
This book attempts to discuss the issues surrounding both the technological and psychological aspects of software development in reasonably equal measure and the psychological aspects from both the point of view of the system user as well as that of the system provider. It seeks to challenge some beliefs which have become conventional wisdom and is intended not only for programmers, but for anyone with an interest in, or who uses, information technology. While offering answers for some of the questions which I ask, for other, bigger issues I am simply trying to start a debate. I have organized this book with the more philosophical chapters, which I hope non-programmers will appreciate, at the beginning and the more technical chapters, of more interest to the programmer (both professional and amateur), later on. Although I discuss technical subjects in this book, it is not my intention that it should be a programming manual - if you want to learn about the detail of a particular language or programming environment there are plenty of suitable books on the market. This book takes a more high level look at the concepts applicable to programming in general.
| Copyright © 2007 Andrew Edgington | Home | Feedback | This Web Page Created with PageBreeze Free HTML Editor |