Informatics: Silver Bullet (Quiz 2)
no magnitude improvement because of:
The essential difficulties CCCI
Essential Difficulties
a characteristic of software - difficulties inherent in the nature of software - datasets, relationships among them, algorithms etc - Inherent properties of modern software systems: complexity, comformity, changability, invisibility
Accidental difficulties
a problem in today's production methods - difficulties related to the actual production process
Software is inherently difficult
even if we remove all accidental difficulties, still at its essence software development is difficult - removing accidental difficulties will not affect software's inherent difficult properties CCCI
Consequences of Changeability
- more press on software to get changed - software gets changed frequently and deviates from original design - re-usability less successful because of so much change
High-level languages
- most powerful breakthrough for software development - programmers don't have to develop for individual machines - powerful stroke for productivity, reliability, and simplicity - removes low level complexities
Difficulties in Essence of Software: Changeability
- must model changing real world - increase functionality (update) - run on new hardware - new applications, users, machines, standards, laws, etc - all successful software gets changed - easier to change then hardware - people underestimate difficulties of change
Difficulties in Essence of Software: Complexity
- no 2 parts alike - huge number of states - can't know whole domain process or system - can't abstract away complexity because it is essential
Consequences of Complexity
- not easily understood or learned - technical problems - management problems - communication overhead
False silver bullets
- object oriented programming (helps in design but does not solve design complexity problem) - AI - automatic programming, code generation (hard to imagine a general solution) - graphically programming (no hope, software is difficult to visualize) - programming verification (a lot of work, hard to have program meet consistent specification) - Better workstations
Ways to deal with Invisibility
- use of multiple models, for many views of system
Potential Silver Bullets
- Buy vs Build (buy software instead of create it) - requirement refinement, rapid prototyping (have to show product to customer to get complete specification) - incremental development (grow systems dont build them) - great designers
Difficulties in Essence of Software: Conformity
- Software must conform to human institutions and systems - must interface with existing systems - software very easily changeable, so must conform - conform to operating environment, hardware - interface with existing system
High level programming language
- accidental difficulty of low level programming language (assembly) - high level language helps to get rid of the accidental difficulty brought by the inadequacy of the low level language
Time-sharing
- better programmers and programming languages - don't have to accommodate for machine language anymore - system response time faster
Ways to deal with Complexity
- breakdown system into manageable chunks - breakdown development process into phases, tasks, subtasks - team programming
Difficulties in Essence of Software: Invisibility
- cannot visualize all aspects at once - difficulty understanding - difficult communication - no obvious representation - very complex/hidden - only can really see the external input/output view
Ways to deal with Changeability and Conformity
- change management - configuration management
Essence and Accidents
- essence is what the software does - accidents are the technology by which the software (was developed) / (does the essence)
Past breakthroughs for accidental difficulties
- high level languages - time-sharing - integrated programming environments, libraries, unified file formats, pipes, filters