Thursday, June 25, 2009

Efficiency

             Efficiency is the ability of a software system to place as few demands aspossible on hardware resources, such as processor time, space occupied in internal and external memories, bandwidth used in communication devices.Almost synonymous with efficiency is the word “performance”. The software community shows two typical attitudes towards efficiency.Some developers have an obsession with performance issues, leading them to devote a lot of efforts to presumed optimizations.But a general tendency also exists to downplay efficiency concerns, as evidenced by such industry lore as “make it right before you make it fast” and “next year’s computer model is going to be fifity percent faster anyway”.

            This issue reflects what I believe to be a major characteristic of software engineering, not likely to move away soon: software construction is difficult precisely because it requires taking into account many different requirements, some of which, such as correctness, are abstract and conceptual, whereas others, such as efficiency, are concrete and bound to the properties of computer hardware.For some scientists, software development is a branch of mathematics; for some engineers, it is a branch of applied technology.

                      In reality, it is both. The software developer must reconcile the abstract concepts with their concrete implementations, the mathematics of correct computation with the time and space constraints deriving from physical laws and from limitations of current hardware technology. This need to please the angels as well as the beasts may be the central challenge of software engineering.An in-flight computer must be prepared to detect and process a message from the throttle sensor fast enough to take corrective action.

               The concern for efficiency will be there throughout. Whenever the discussion presents an object-oriented solution to some problem, it will make sure that the solution is not just elegant but also efficient; whenever it introduces some new O-O mechanism, be it garbage collection, dynamic binding, genericity or repeated inheritance, it will do so based on the knowledge that the mechanism may be implemented at a reasonable cost in time and in space.Efficiency is only one of the factors of quality; we should not let it rule our engineering lives. But it is a factor, and must be taken into consideration, whether in the construction of a software system or in the design of a programming language. If you dismiss performance, performance will dismiss you

No comments:

Post a Comment