No Silver Bullet - Essence and Accident in Software Engineering By: R. Adam Mead
Software Construction Essential Tasks n Exploiting the mass market to avoid constructing what can be bought. n Using rapid prototyping as part of a planned iteration in establishing software requirements. n Growing Software organically, adding more and more function to systems as they are run, used and tested. n Identifying and developing the great conceptual designers of the rising generation.
Does It Have to Be Hard? - Essential Difficulties n Observe that it is not software process that are so slow it is that hardware progress are so fast. n The essence of a software entity is a construct of interlocking concepts: data sets, relationships among data items, algorithms, and invocations of functions.
Complexity n Software is more complex for their size then an others human construction. n Many problems of developing software products derive from this essential complexity and its nonlinear increases with size. n The increase in size makes communication among team members hard. n Problem are: product flaws, cost overruns, schedule delays. n Are not only technical problems, management problems too.
Conformity n Conformity comes from the fact that all new software must conform to the way things where done in the past, because it is hard to change everyone. n Main reason software must conform is that it is new on the scene.
Changeability n Being able to change something after it has been constructed is a new concept. n Software must be able to change, and the complexity of the systems becomes harder to follow. n All successful software gets changed. n Successful software also survives beyond the normal life of the machine vehicle for which it is first written for.
Invisibility n Software has no 3-D way on which it can be laid out. n Software does not have one map or graph, it will have multiple maps and graphs. n Software has data flow charts, time sequence graphs, and other types of things. n Communication becomes hard because each person my see it a different way.
Past Breakthroughs Solved Accidental Difficulties n High-Level Languages n Time-Sharing
High-level Languages n The most powerful thing to happen to software development ever. n It allows that some types on data structures, operation, classes etc, to be used by any machine. n Programmers don’t have to develop software for individual machines.
Time-Sharing n Most observers credit the time-sharing improvement to better programmers, and better programming languages. n Programs run faster because of the high-level languages. n Do not have to accommodate for machine language anymore.
Hopes for the Silver n Object-oriented programming n Artificial Intelligence n Expert Systems n Automatic programming n Graphics programming