Last updated: | Permalink
Other Resources
There are many articles, blogs, books and podcasts that are very interesting for more reading on the topics discussed in class. We’ll update this list as the semester goes, and if you have suggestions of materials to share, please let us know and we’ll add it to the list.
Research mechanics
- “How to Read an engineering research paper” by William Griswold
Contributing to open source projects
- “How to create and review a GitHub pull request” by Mike Ernstt
- How to write a good bug report: Oracle , Mozilla , Ximian , Tatham , Raymond , Software Testing Help (all via Mike Ernst’s advice page)
General SE Knowledge
- “Software Engineering at Google” provides an excellent primer on the practices and processes of software engineering at Google
Podcasts
The Software Engineering Radio podcast (also available wherever you get your podcasts) aims to produce educational material for professional softare developers, and includes conversations between experts and researchers on various software engineering topics. Here are a few of our favorites that are most relevant to topics that we cover in this class:
- Donny Nadolny on Debugging Distributed Systems, with Robert Blumen, 2017
- Jafar Soltani on Continuous Delivery for Multiplayer Games, with Nate Black, 2018
- Chris Richardson on Microservice Patterns, with Robert Blumen, 2019
- Margaret Burnett on Gender, Cognitive Styles and Usability Bugs, with Felienne Hermans, 2019
- Michaela Greiler on Code Reviews, with Felienne Hermans, 2020
- Ipek Ozkaya on Managing Technical Debt, 2021
Code style
- Research paper: To camelcase or under_score, Dave Binkley et al
- Book (free via library): “Refactoring: Improving the Design of Existing Code” By Martin Fowler
The definitive list of “code smells” that should be avoiding in programming, matched up with “refactoring” techniques to improve that code
Debugging
- Book (free via library): “Effective Debugging: 66 Specific Ways to Debug Software and Systems” by Diomidis Spinellis
A helpful guidebook for debugging, laying out different strategies that are effective for testing different kinds of debugging hypotheses.
Architecture and Design
- “Thinking Like a Software Architect” by Christian Kästner
- “Fundamentals of Software Architecture” By Mark Richards and Neal Ford
- Book (free via library): “Design Patterns Explained: A New Perspective on Object-Oriented Design” by Alan Shalloway and James Trott
In-depth coverage of design patterns, considering why they are important in software development, how to apply them, and descriptions of some common patterns.
Infrastructure + Operations
- Book (free via library) “Site Reliability Engineering” By Betsy Beyer, Chris Jones, Niall Richard Murphy, Jennifer Petoff
Site Reliability Engineering is a topic very related to software engineering: while software engineers might focus primarily on the design and development of software systems, SRE’s are engineers who focus on the deployment, monitoring and maintenance of that software. This book documents the SRE practices at Google.
Technical Debt
- Book (free via library): “Managing Technical Debt: Reducing Friction in Software Development” by Philippe Kruchten, Robert Nord and Ipek Ozkaya
Program Understanding
- Book: “The Programmer’s Brain” by Felienne Hermans
A survey of research on programming and cognition, covering topics such as how to read code more effectively and how to write code that is easier to read and share.
Evaluations
- The ACM SIGPLAN’s “Empirical Evaluation Guidelines”
- “A Practical Guide for Using Statistical Tests to Assess Randomized Algorithms in Software Engineering” by Andrea Arcuri and Lionel Briand