I’m writing my first ever book calling Keeping Software Soft.
I just published 3 new chapters:
- Technical Debt
- Software Craftsmanship, Professionalism, and Personal Development
- What Programmers Want and What Your Manager Should Understand
The book is about 85% complete, there are a few more chapters to write and I might replace some of them with other topics.
Once the final few chapters are written the entire manuscript will be proofread and modified by myself before further final proofing by others.
Once the final version is complete it will be available via Leanpub, Amazon kindle, and iBooks. It is hoped than the final version will be complete by mid-year.
I’d like to say a personal thankyou to all the earlier supporters who have been buying the in-progress versions.
The table of contents as it currently stands (subject to further change) (with apologies for formatting) is:
- Introduction
- Why Keep Software Soft?
- Why Read This Book?
- About The Author
- Lean Publishing and this Book
- Part 1: The Code
- The SOLID Principles of OO Design
- The Single Responsibility Principle (SRP)
- The Open Closed Principle (OCP)
- The Liskov Substitution Principle (LSP)
- The Interface Segregation Principle (ISP)
- Dependency Inversion Principle (DIP)
- Other Important Principles
- Keep It Simple Stupid (KISS)
- Don’t Repeat Yourself (DRY)
- You Aren’t Gonna Need It (YAGNI)
- Cohesion
- Coupling
- Law of Demeter (LoD)
- Composition and Inheritance (not yet written)
- Dependency Inversion Revisited
- Dependency Injection Containers
- An Example of Dependency Injection with Ninject
- Other Containers
- Why Use a Dependency Injection Container?
- Some Useful Design Patterns
- Gateway
- Decorator
- Strategy
- Factory
- Chain of Responsibility
- A Selection of Architectural Styles (not yet written)
- Readability - Writing Code for Humans, Not Compilers
- Comments
- Naming Booleans
- Method Length
- Remove Unused Code
- Nesting
- Naming Variables and Parameters
- White Space
- Regions
- Magic Strings and Constants
- Part 2: Testing
- An Introduction to Unit Testing With xUnit.net
- Qualities of Good Unit Tests
- Test Frameworks
- About xUnit.net
- Using xUnit.net
- Data Driven Tests
- Test Driven Development
- Overview
- Example
- Practicing TDD
- Why TDD?
- Faking It (Testing Code in Isolation)
- Mock, Stub, Fake, Dummy, Test Double
- An Example of Faking
- Auto Mocking
- Introducing Auto Mocking
- More About AutoFixture
- AutoFixture and xUnit.net Custom Attributes
- Introduction to JavaScript Unit Testing
- Introducing QUnit
- Creating and Running QUnit Tests in Visual Studio 2012
- Creating and Running QUnit Tests in HTML
- An Introduction to Automated Functional UI Tests for Web Applications
- Record-Playback Versus Coded Automation
- An Example of Coded AFUITs Using WatiN
- The Demo Application
- Creating the First Tests
- Refactoring the Tests
- Some Other Tools
- Introduction to Continuous Integration with TeamCity (not yet written)
- A Holistic View of Testing
- Types of Testing
- The Testing Pyramid
- What and Where to Test
- Testing Legacy Applications
- Part 3: People and Process
- An Introduction to Agile Software Development
- Overview
- Agile Software Development in Practice
- Overarching Principles
- Pair Programming and Code Reviews
- Formal Code Reviews
- Pair Programming
- Time Management and Motivation
- Time Management
- Prioritisation With MoSCoW
- Prioritisation with Covey Quadrants
- Maintaining Energy with the Pomodoro Technique
- Maintaining Motivation with the Power of Three
- Technical Debt
- Examples of Technical Debt
- Causes of Technical Debt
- Awareness of Creating Technical Debt
- Recording and Prioritising Technical Debt
- The Effect of Technical Debt on People and Organisations
- On Knowing Things Earlier (not yet written)
- Software Craftsmanship, Professionalism, and Personal Development
- Software Craftsmanship
- Beyond Craftsmanship - Into Professionalism
- Personal Development
- What Programmers Want and What Your Manager Should Understand
- What Programmers Want Survey
- Challenging Work, Creative Solutions, Making a Difference
- Tools and Environment
- The Joel Test
- Appendices
- Appendix A: Manifesto for Agile Software Development
- Appendix B: Principles behind the Agile Manifesto
- Appendix C: Testing Framework Attributes
- Appendix D: Design Pattern List
- Creational Patterns
- Structural Patterns
- Behavioural Patterns
- Appendix E: Manifesto for Software Craftsmanship
SHARE: