Preface Acknowledgements 1 Introduction 1.1 History of Computing 1.1.1 Information Theory 1.1.2 Turing Machine 1.1.3 Von Neumann Machine 1.2 Software Development 1.2.1 Complexity 1.2.2 Is Software Development Science or Art, Engineering or Craft? 1.2.3 The Search for Silver Bullet 1.2.4 The Art of War 1.2.5 Build or Buy? 1.2.6 The Art of Software Development 1.3 Case Study: SimpleCRM Application 2 Principles 2.1 KISS Principle 2.1.1 Partition 2.1.2 Abstraction 2.1.3 Generalization 2.2 Knowledge Factory 2.2.1 Data, Information and Knowledge 2.2.2 Knowledge Factory 2.3 Prototype 2.3.1 User Interface Prototyping 2.3.2 Application Prototyping 2.3.3 Data Prototyping 2.4 Technology, Process and People 2.4.1 Technology 2.4.2 Process 2.4.3 People 2.5 Summary 3 Requirements 3.1 Requirements Elicitation 3.1.1 Joint Application Development (JAD) 3.1.2 Other Elicitation Techniques 3.2 Requirements Definition 3.2.1 Use Case 3.2.2 Business Rule 3.2.3 User's Role and Permission 3.3 Requirements Validation 4 Analyses 4.1 Functional Specification 4.2 Non-Functional Specification 4.3 Security Access Control 4.3.1 Authentication 4.3.2 Authorization 5 Design 5.1 High-Level Design (Architectural) 5.2 Design Process 5.3 Low-Level Design (Detailed) 5.3.1 UI Design 5.3.2 Data Access Design 5.3.3 Domain Design 6 Construction 6.1 User Interface 6.2 Data Access 6.2.1 Object-Relational Mapping 6.2.2 Distributed Transaction Service 6.3 Domain 7 Conclusion 7.1 Books 7.2 Pet Projects 7.3 Future 7.3.1 Intentional Software 7.3.2 Transparent Computing 7.3.3 Can the end users write software themselves? Glossary References Index