The software industry is large — from Operating Systems (Microsoft’s NT, Sun’s Solaris, Linux] to Desktop Applications [Microsoft’s Office Suite] to Building Blocks [Oracle’s Database, IBM’s DB2, Rational’s Development tools] to Enterprise Applications [SAP’s R/3 and MySAP.com, Siebel’s Sales Force Automation and CRM suite, i2’s Supply Chain Management Software]. Then, there is the embedded software which goes into cellphones, chips and cars. Today, as companies talk about integrating front- and back-office, the challenge is as much about integrating disparate software systems as about re-engineering business processes.
Software is at the heart of the challenge we face today. Writing Perfect Software is inherently difficult. A path-breaking paper written in 1986 [http://www.student.math.uwaterloo.ca/
~cs212/resource/Articles/SilverBullet.html] entitled “No Silver Bullet : Essence and Accidents of Software Engineering” by Frederick P. Brooks, Jr. discusses why software is still much of an art:
Not only are there no silver bullets now in view, the very nature of software makes it unlikely that there will be any–no inventions that will do for software productivity, reliability, and simplicity what electronics, transistors, and large-scale integration did for computer hardware. We cannot expect ever to see twofold gains every two years.
First, one must observe that the anomaly is not that software progress is so slow, but that computer hardware progress is so fast. No other technology since civilization began has seen six orders of magnitude in performance price gain in 30 years. In no other technology can one choose to take the gain in either improved performance or in reduced costs. These gains flow from the transformation of computer manufacture from an assembly industry into a process industry.
Second, to see what rate of progress one can expect in software technology, let us examine the difficulties of that technology. Following Aristotle, I divide them into essence, the difficulties inherent in the nature of software, and accidents, those difficulties that today attend its production but are not inherent.
The essence of a software entity is a construct of interlocking concepts: data sets, relationships among data items, algorithms, and invocations of functions. This essence is abstract in that such a conceptual construct is the same under many different representations. It is nonetheless highly precise and richly detailed.
I believe 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.
The longer software stays an art, the greater is the opportunity for India and her software companies.