1.1. Python is an enterprise language
1.2. Python is a teaching language
1.4. Design enables better software
Chapter 2. Separation of concerns
2.1.1. Namespaces and the import statement
2.2. The hierarchy of separation in Python
Chapter 3. Abstraction and encapsulation
3.1.2. Abstraction is like an onion
3.4. Programming styles are an abstraction too
3.5. Typing, inheritance, and polymorphism
3.6. Recognizing the wrong abstraction
Chapter 4. Designing for high performance
4.1. Hurtling through time and space
4.2. Performance and data types
4.2.1. Data types for constant time
4.3. Make it work, make it right, make it fast
Chapter 5. Testing your software
5.1. What is software testing?
5.2. Functional testing approaches
5.4. Unit testing with unittest
5.4.1. Test organization with unittest
5.4.2. Running tests with unittest
5.4.3. Writing your first test with unittest
5.6. Beyond functional testing
5.7. Test-driven development: A primer
Chapter 6. Separation of concerns in practice
6.1. A command-line bookmarking application
6.3. An initial code structure, by concern
Chapter 7. Extensibility and flexibility
7.2.1. Letting go: Inversion of control
Chapter 8. The rules (and exceptions) of inheritance
8.1. The inheritance of programming past
8.2. The inheritance of programming present
8.4. Inheritance and composition in Bark
Chapter 9. Keeping things lightweight
9.1. How big should my class/function/module be?
Chapter 10. Achieving loose coupling
11.3.1. Modes of failure in distributed systems
A.1 What version of Python should I use?
A.3 Installing other versions of Python
3.133.128.145