A reader on Bluesky asked about the table of contents for the book. While it’s still somewhat to be determined, here is a rough table of contents for upcoming chapters. If you have feedback about which particular sections are of greatest interest, please let me know!
2. Essential Tools and Techniques
2.1 The tools and why we use them
2.2 Why Python?
2.3 Version control
2.4 The command line
2.5 Virtual environments
2.6 Integrated Development Environments (IDEs)
2.7 Large language models
2.8 Suggested resources
3. Principles of Software Engineering
3.1 Agile development processes
3.2 Designing software through user stories
3.3 Refactoring code
3.4 Test-driven development
3.5 Clean coding
3.6 Modularity
3.7 Defensive coding
3.8 Portable coding
3.9 Managing technical debt
4. Project Structure and Management
4.1 Project organization
4.2 Python modules
4.3 Python packages
4.4 Package management and virtual environments
4.5 Computational notebooks: The good, the bad, and the ugly
4.6 Containers
4.7 Logging
5. Coding with AI
5.1 Using AI coding assistants
5.2 Cautions regarding large language models
5.3 AI assistant workflows
5.4 Language model prompting
5.5 Leveraging LLM coding for reproducibility
5.6 AI agents for software development
6. Software Testing
6.1 Why use software tests?
6.2 Types of tests
6.3 The structure of a good test
6.4 Testing frameworks
6.5 Testing and AI-assisted coding
6.6 Test fixtures
6.7 Mocking
6.8 Parametrized tests
6.9 Property-based testing
6.10 Automated testing and continuous integration
6.11 Speeding up tests
7. Validating Scientific Analyses
7.1 Using simulated data to validate analyses
8. Optimizing Performance
8.1 Avoiding premature optimization
8.2 Profiling
8.3 Optimizing memory usage
9. Data Organization and Management
9.1 Data organization
9.2 Data structures
9.3 Data formats and file types
10. Workflow Management
10.1 Simple workflow management with Makefiles
10.2 Workflow management systems for complex workflows
10.3 Building a workflow management system from scratch
11. High-Performance Computing
11.1 Using supercomputers
11.2 Cloud computing
11.3 GPU computing
12. Sharing Research Objects
12.1 The FAIR principles for sharing
12.2 Sharing code
12.3 Sharing data
12.4 Sharing research workflows
Thanks you for this Russ, eager to read the book. Of particular interest for me are chapters 3 and 4; mainly in terms of seeing examples of bad code transformed to good and learning the principles that govern solid programming. Thanks for your work on this!
On a completely personal note, I’d be curious to hear your reflections on the way that Jax from Google is designed in terms of how it encourages robust programming practices. Starting with Jax for me was extremely challenging, but learning the requirement on functional purity was very valuable from the point of view of development general programming skills