About‎ > ‎

Table of Contents (v2.0b5, 20-Jan-2021)

1 Introduction to Software as a Service, Agile Development, and Cloud Computing
   1.1 Introduction
   1.2 Software Development Processes: Plan and Document
   1.3 Software Development Processes: The Agile Manifesto
   1.4 Software Quality Assurance: Testing
   1.5 Productivity: Conciseness, Synthesis, Reuse, and Tools
   1.6 SaaS and Service Oriented Architecture
   1.7 Deploying SaaS: Cloud Computing
   1.8 Deploying SaaS: Browsers and Mobile
   1.9 Beautiful vs. Legacy Code
   1.10 Guided Tour and How To Use This Book
   1.11 Fallacies and Pitfalls
   1.12 Concluding Remarks: Software Engineering Is More Than Programming
 2 How to Learn a New Language
   2.1 Prelude: Learning to Learn Languages and Frameworks
   2.2 Pair Programming
   2.3 Introducing Ruby, an Object-Oriented Language
   2.4 Ruby Idioms: Poetry Mode, Blocks, Duck Typing
   2.5 CHIPS: Ruby Intro
   2.6 Gems and Bundler: Library Management in Ruby
   2.7 Fallacies and Pitfalls
   2.8 Concluding Remarks: How (Not) To Learn a Language By Googling
 3 SaaS Application Architecture: Microservices, APIs, and REST
   3.1 The Web's Client--Server Architecture
   3.2 SaaS Communication Uses HTTP Routes
   3.3 CHIPS: HTTP and URIs
   3.4 From Web Sites to Microservices: Service-Oriented Architecture
   3.5 RESTful APIs: Everything is a Resource
   3.6 RESTful URIs, API Calls, and JSON
   3.7 CHIPS: Create and Deploy a Simple SaaS App
   3.8 Fallacies and Pitfalls
   3.9 Concluding Remarks: Continuity From CGI to SOA
 4 SaaS Framework: Rails as a Model--View--Controller Framework
   4.1 The Model--View--Controller (MVC) Architecture
   4.2 Rails Models: Databases and Active Record
   4.3 CHIPS: ActiveRecord Basics
   4.4 Routes, Controllers, and Views
   4.5 CHIPS: Rails Routes
   4.6 Forms
   4.7 CHIPS: Hangperson on Rails
   4.8 Debugging: When Things Go Wrong
   4.9 CHIPS: Hello Rails
   4.10 Fallacies and Pitfalls
   4.11 Concluding Remarks: Rails as a Service Framework
 5 SaaS Framework: Advanced Programming Abstractions for SaaS
   5.1 DRYing Out MVC: Partials, Validations and Filters
   5.2 Single Sign-On and Third-Party Authentication
   5.3 CHIPS: Rails Intro
   5.4 Associations and Foreign Keys
   5.5 Through-Associations
   5.6 RESTful Routes for Associations
   5.7 CHIPS: Associations
   5.8 Other Types of Code
   5.9 Fallacies and Pitfalls
   5.10 Concluding Remarks: Languages, Productivity, and Beauty
 6 Mobile and Desktop SaaS Clients: JavaScript Introduction
   6.1 JavaScript: The Big Picture
   6.2 Introducing ECMAScript
   6.3 Classes, Functions and Constructors
   6.4 The Document Object Model (DOM) and jQuery
   6.5 The DOM and Accessibility
   6.6 Events and Callbacks
   6.7 AJAX: Asynchronous JavaScript And XML
   6.8 Testing JavaScript and AJAX
   6.9 CHIPS: AJAX Enhancements to RottenPotatoes
   6.10 Single-Page Apps and JSON APIs
   6.11 Fallacies and Pitfalls
   6.12 Concluding Remarks: JavaScript Past, Present and Future
 7 Requirements: BDD and User Stories
   7.1 Behavior-Driven Design and User Stories
   7.2 SMART User Stories
   7.3 Lo-Fi User Interface Sketches and Storyboards
   7.4 Points and Velocity
   7.5 Agile Cost Estimation
   7.6 Cucumber: From User Stories to Acceptance Tests
   7.7 CHIPS: Intro to BDD and Cucumber
   7.8 Explicit vs.\ Implicit and Imperative vs. Declarative Scenarios
   7.9 The Plan-And-Document Perspective on Documentation
   7.10 Fallacies and Pitfalls
   7.11 Concluding Remarks: Pros and Cons of BDD
 8 Testing: Test-Driven Development
   8.1 FIRST, TDD, and Red--Green--Refactor
   8.2 Anatomy of a Test Case: Arrange, Act, Assert
   8.3 Isolating Code: Doubles and Seams
   8.4 Stubbing the Internet
   8.5 CHIPS: Intro to RSpec on Rails
   8.6 Fixtures and Factories
   8.7 Coverage Concepts and Types of Tests
   8.8 Other Testing Approaches and Terminology
   8.9 CHIPS: The Acceptance Test/Unit Test Cycle
   8.10 The Plan-And-Document Perspective on Testing
   8.11 Fallacies and Pitfalls
   8.12 Concluding Remarks: TDD vs. Conventional Debugging
 9 Software Maintenance: Enhancing Legacy Software Using Refactoring and Agile Methods
   9.1 What Makes Code ``Legacy'' and How Can Agile Help?
   9.2 Exploring a Legacy Codebase
   9.3 Establishing Ground Truth With Characterization Tests
   9.4 Comments and Commits: Documenting Code
   9.5 Metrics, Code Smells, and SOFA
   9.6 Method-Level Refactoring: Replacing Dependencies With Seams
   9.7 The Plan-And-Document Perspective on Working With Legacy Code
   9.8 Fallacies and Pitfalls
   9.9 Concluding Remarks: Continuous Refactoring
10 Agile Teams
   10.1 It Takes a Team: Two-Pizza and Scrum
   10.2 Using Branches Effectively
   10.3 Pull Requests and Code Reviews
   10.4 Delivering the Backlog Using Continuous Integration
   10.5 CHIPS: Agile Iterations
   10.6 Reporting and Fixing Bugs: The Five R's
   10.7 The Plan-And-Document Perspective on Managing Teams
   10.8 Fallacies and Pitfalls
   10.9 Concluding Remarks: From Solo Developer to Teams of Teams
11 Design Patterns for SaaS Apps
   11.1 Patterns, Antipatterns, and SOLID Class Architecture
   11.2 Just Enough UML
   11.3 Single Responsibility Principle
   11.4 Open/Closed Principle
   11.5 Liskov Substitution Principle
   11.6 Dependency Injection Principle
   11.7 Demeter Principle
   11.8 The Plan-And-Document Perspective on Design Patterns
   11.9 Fallacies and Pitfalls
   11.10 Concluding Remarks: Frameworks Capture Design Patterns
12 Dev/Ops
   12.1 From Development to Deployment
   12.2 Three-Tier Architecture
   12.3 Responsiveness, Service Level Objectives, and Apdex
   12.4 Releases and Feature Flags
   12.5 Monitoring and Finding Bottlenecks
   12.6 Improving Rendering and Database Performance With Caching
   12.7 Avoiding Abusive Database Queries
   12.8 CHIPS: Exploiting Caching and Indices
   12.9 Security: Defending Customer Data in Your App
   12.10 The Plan-And-Document Perspective on Operations
   12.11 Fallacies and Pitfalls
   12.12 Concluding Remarks: Beyond PaaS Basics
13 Afterword
   13.1 Looking Backwards
   13.2 Looking Forwards
   13.3 Essential Readings
   13.4 Last Words