Links
Project Infrastructure
googletest
spdlog
Modern C++ JSON
cmake
git
GitHub Actions
SFU CS GitHub
clang-tidy
clang sanitizers
Sphinx
Documentation on the Web
Google C++ Tip of the Week
CPlusPlus.com
Modern C++ Core Guidelines
C++ Hints
C++ Resource Management
<algorithm>
googletest Primer
CMake Tutorial
The GitLab Flow
Trunk Based Development
Git in six hundred words
GitLab CI Documentation
What to look for in a Code Review
You Are Not Done Yet
Game Programming Patterns
[
On Amazon
]
Mastering Programming
A New Grad's Guide to Coding as a Team
Videos
Development
Lessons in Sustainability
Explaining Agile
Not Just Code Monkeys
Seven Unbreakable Rules of Software Leadership
How Teamwork, Leadership and Culture Drive Results
(GDC 2016)
Hammock Driven Development
[
transcript
]
Simple Made Easy
[
transcript
]
Construx Software
Case Studies in Software Engineering Judgment
Workflows of Refactoring
Managing Technical Debt
Brownfield to Green
A Philosophy of Software Design
C++ (Mostly from
CppCon
)
Modern C++: What You Need to Know
Intro to the C++ Object Model
Writing Good C++14… By Default
Back to the Basics! Essentials of Modern C++ Style
C++ Seasoning
Modernizing C++ Legacy Code
Making C++ Code Beautiful
Effective Modern C++
Making Simple Things Simple
Exception Safe Code
(
Part Two
) (
Part Three
)
C++11 Library Design
Live Coding
Handmade Hero
- Live programming a game
Jonathan Blow and JAI
Books
Patterns of Software
How to Design Programs
A Philosophy of Software Design
Papers
Design & Development
On the criteria to be used in decomposing systems into modules
When and Why Your Code Starts to Smell Bad
Hotspot Patterns: The formal definition and automatic detection of architecture smells
A field study of API learning obstacles
Revisiting Information Hiding: Reflections on Classical and Nonclassical Modularity
A large-scale empirical study of practitioners’ use of object-oriented concepts
On the Congruence of Modularity and Code Coupling
The structure and value of modularity in software design
A Field Study of Technical Debt
Clones: what is that smell?
Out of the Tar Pit
Programming with Abstract Data Types
A design methodology for reliable software systems
Software Development Waste
Program development by stepwise refinement
Human Factors & Workflow
Team Geek: A Software Developer's Guide to Working Well with Others
Why Good Developers Write Bad Code
What Makes a Great Software Engineer?
Leadership Gap in Agile Teams: How Teams and Scrum Masters Mature
Information Needs in Collocated Software Development Teams
Coordination Breakdowns and Their Impact on Development Productivity and Software Failures
Have Agile Techniques been the Silver Bullet for Software Development at Microsoft
How Much Up-front? A Grounded Theory of Agile Architecture
Work Practices and Challenges in Pull-Based Development: The Integrator’s Perspective
The Business Case for Systems Engineering
Towards a theory of software development expertise
Code Reviews
Characteristics of Useful Code Reviews: An Empirical Study at Microsoft
Convergent software peer review practices
Expectations, outcomes, and challenges of modern code review
Logging
Where Do Developers Log?
Industry Practices and Event Logging: Assessment of a Critical Software Development Process
Diagrams
Let's go to the whiteboard: how and why software developers use drawings
UML in practice
On the use of software design models in software development practice
Assertions
Assessing the Relationship between Software Assertions and Code Quality
Assert use in GitHub Projects
Fixing Bugs
The Design Space of Bug Fixes and How Developers Navigate It
The Design of Bug Fixes
CMPT 373
Schedule
Participation
Project
Reading
Exercises
Links