No matter how terrifying a monster is, humans always try to find the silver bullet, to bring the inexplicability of the monster to a level of comprehension. Software is referred to as such a monster because its ever-expanding level of complexity brings with it, multifarious issues which themselves are monstrous in their own accord.
The inherent properties of a modern software system are conformity, changeability, complexity, and invisibility. Conformity is a necessary evil and normally has no logic to it but, for organizational restrictions. Changeability again is a constant sword hanging over software systems. Complexity of software systems is rather interesting as it is desired and not accidental and yet constitutes most of the monstrosity of software systems. By invisibility, I refer to the fact that that there isn’t any tool that can physically and convincingly represent a software system and this limits us in ways nothing else does.
Let’s backtrack to when abacus had just been invented, we thought this was definitely an answer to the egregious calculations. As calculations became more and more complicated, seeking an answer led us to the beautiful concept of object-oriented programming. It was a moment of celebration for developers all over the world as they thought- finally we have our solution. OOP with its modularity, reusability, reliability, maintainability, etc. definitely addressed a lot of issues. However, the software is abstract and a conceptual entity, and hence visualization of its impact and its challenges is indefinitely and inherently complex. We have now come a long way and invented supercomputers like IBM, Sequoia, Cray, Titan, NUDT, Tianhe-2, and yet we are not close to our silver bullet. OOP, however, many would argue, is the closest thing to a silver bullet in the software world.
Artificial Intelligence is considered to be a major breakthrough in the field of technology and could be thought of as the much sought silver bullet. “The exciting new effort to make computers think . . . machines with minds, in the full and literal sense” (Haugeland, 1985) is AI, but AI has no generalized solution for software issues but attacks very specific issues. Hence the quest for the ultimate answer is not complete yet.
For over 50 years now efforts are being made to develop automatic programming. A piece of code that would write numerous pieces of code on command is an enticing idea. To design such a tool however we need to consider a multitude of paradigms. Computer Assisted Part Programming (APT, Automatically Programmed Tool) is a breakthrough in this field but as with most breakthroughs of Artificial Intelligence, this is also problem specific and lacks generalization. But the basic nature of programming remains unchanged. It is largely an informal, person-centered activity which results in a highly detailed formal object (Balzer, R., 1985). To infuse this arbitrary orderliness with the help of the machine is again a monstrous obstruction in the path of attainment of the silver bullet.
As technology progresses we definitely have managed to address a lot of issues to streamline the process of software development. However, as Fred Brooks mentions the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation. We still make syntax errors, to be sure; but they are fuzz compared with the conceptual errors in most systems. If this is true, building software will always be hard. There is inherently no silver bullet (Brooks, F., 1987).