Learn how to write code that everybody thinks is great. This book covers topics relevant to writing great code at a personal level: craftsmanship, art, and pride in your workmanship. This third volume in the Write Great Code series addresses the issues of creating readable and maintainable code that will generate awe from fellow programmers. Volumes I & II of the Write Great Code series address an important attribute that is often ignored in modern software development: efficiency. But no matter how efficient your code is, if it isn't readable and maintainable by others, then it's not great code. Great code must have a great design and must adhere to good coding standards. In this book, you'll learn things like coding styles, commenting, code layout, and other crucial coding tasks that are necessary to make your code truly great. Cover Page Title Page Copyright Page About the Author About the Technical Reviewer BRIEF CONTENTS CONTENTS IN DETAIL ACKNOWLEDGMENTS INTRODUCTION Assumptions and Prerequisites What Is Great Code? Programmer Classifications So You Want to Be a Great Programmer A Final Note on Ethics and Character For More Information PART I: PERSONAL SOFTWARE ENGINEERING 1 SOFTWARE DEVELOPMENT METAPHORS 1.1 What Is Software? 1.2 Parallels to Other Fields 1.3 Software Engineering 1.4 Software Craftsmanship 1.5 The Path to Writing Great Code 1.6 For More Information 2 PRODUCTIVITY 2.1 What Is Productivity? 2.2 Programmer Productivity vs. Team Productivity 2.3 Man-Hours and Real Time 2.4 Conceptual and Scope Complexity 2.5 Predicting Productivity 2.6 Metrics and Why We Need Them 2.7 How Do We Beat 10 Lines per Day? 2.8 Estimating Development Time 2.9 Crisis Mode Project Management 2.10 How to Be More Productive 2.11 For More Information 3 SOFTWARE DEVELOPMENT MODELS 3.1 The Software Development Life Cycle 3.2 The Software Development Model 3.3 Software Development Methodologies 3.4 Models and Methodologies for the Great Programmer 3.5 For More Information PART II: UML 4 AN INTRODUCTION TO UML AND USE CASES 4.1 The UML Standard 4.2 The UML Use Case Model 4.3 The UML System Boundary Diagrams 4.4 Beyond Use Cases 4.5 For More Information 5 UML ACTIVITY DIAGRAMS 5.1 UML Activity State Symbols 5.2 Extending UML Activity Diagrams 5.3 For More Information 6 UML CLASS DIAGRAMS 6.1 Object-Oriented Analysis and Design in UML 6.2 Visibility in a Class Diagram 6.3 Class Attributes 6.4 Class Operations 6.5 UML Class Relationships 6.6 Objects 6.7 For More Information 7 UML INTERACTION DIAGRAMS 7.1 Sequence Diagrams 7.2 Collaboration Diagrams 7.3 For More Information 8 MISCELLANEOUS UML DIAGRAMS 8.1 Component Diagrams 8.2 Package Diagrams 8.3 Deployment Diagrams 8.4 Composite Structure Diagrams 8.5 Statechart Diagrams 8.6 More UML 8.7 For More Information PART III: DOCUMENTATION 9 SYSTEM DOCUMENTATION 9.1 System Documentation Types 9.2 Traceability 9.3 Validation, Verification, and Reviews 9.4 Reducing Development Costs Using Documentation 9.5 For More Information 10 REQUIREMENTS DOCUMENTATION 10.1 Requirement Origins and Traceability 10.2 Design Goals 10.3 The System Requirements Specification Document 10.4 The Software Requirements Specification Document 10.5 Creating Requirements 10.6 Use Cases 10.7 Creating DAQ Software Requirements from the Use Cases 10.8 (Selected) DAQ Software Requirements (from SRS) 10.9 Updating the Traceability Matrix with Requirement Information 10.10 For More Information 11 SOFTWARE DESIGN DESCRIPTION DOCUMENTATION 11.1 IEEE Std 1016-1998 vs. IEEE Std 1016-2009 11.2 IEEE 1016-2009 Conceptual Model 11.3 SDD Required Contents 11.4 SDD Traceability and Tags 11.5 A Suggested SDD Outline 11.6 A Sample SDD 11.7 Updating the Traceability Matrix with Design Information 11.8 Creating a Software Design 11.9 For More Information 12 SOFTWARE TEST DOCUMENTATION 12.1 The Software Test Documents in Std 829 12.2 Test Plans 12.3 Software Review List Documentation 12.4 Software Test Case Documentation 12.5 Software Test Procedure Documentation 12.6 Level Test Logs 12.7 Anomaly Reports 12.8 Test Reports 12.9 Do You Really Need All of This? 12.10 For More Information AFTERWORD: DESIGNING GREAT CODE GLOSSARY INDEX Footnotes Engineering Software , the third volume in the landmark Write Great Code series by Randall Hyde, helps you create readable and maintainable code that will generate awe from fellow programmers. The field of software engineering may value team productivity over individual growth, but legendary computer scientist Randall Hyde wants to make promising programmers into masters of their craft. To that end, Engineering Software --the latest volume in Hyde's highly regarded Write Great Code series--offers his signature in-depth coverage of everything from development methodologies and strategic productivity to object-oriented design requirements and system documentation. You'll learn: This advanced apprenticeship in the skills, attitudes, and ethics of quality software development reveals the right way to apply engineering principles to programming. Hyde will teach you the rules, and show you when to break them. Along the way, he offers illuminating insights into best practices while empowering you to invent new ones. Brimming with resources and packed with examples, Engineering Software is your go-to guide for writing code that will set you apart from your peers. Oday's programming languages offer productivity and portability, but also make it easy to write sloppy code that isn't optimized for a compiler. Thinking Low-Level, Writing High-Level will teach you to craft source code that results in good machine code once it's run through a compiler. You'll learn: " ow to analyze the output of a compiler to verify that your code generates good machine code " he types of machine code statements that compilers generate for common control structures, so you can choose the best statements when writing HLL code " nough assembly language to read compiler output " ow compilers convert various constant and variable objects into machine data With an understanding of how compilers work, you'll be able to write source code that they can translate into elegant machine code. NEW TO THIS EDITION, COVERAGE OF: " rogramming languages like Swift and Java " ode generation on modern 64-bit CPUs " RM processors on mobile phones and tablets " tack-based architectures like the Java Virtual Machine " odern language systems like the Microsoft Common Language Runtime "Understanding the Machine, the first volume explains the underlying mechanics of how a computer works. The first volume dives into machine organization without the extra overhead of learning assembly language programming. Thinking Low-Level, Writing High-Level, the second volume in covers high-level programming languages (such as Swift and Java) as well as code generation on 64-bit CPUsARM, the Java Virtual Machine, and the Microsoft Common Runtime. Written for high-level language programmers, the series fills in the low-level details of machine organization that are often left out of computer science and engineering courses."-- Publisher description The field of software engineering may value team productivity over individual growth, but legendary computer scientist Randall Hyde wants to make promising programmers into masters of their craft. To that end, "Engineering software" the latest volume in Hyde's highly regarded "Write great code series"-- offers his signature in-depth coverage of everything from development methodologies and strategic productivity to object-oriented design requirements and system documentation