A blank page can be very intimidating, even for a Test-driven developer. Where do we start? Write a test, right? Not always.more...
Refactoring and SOLID Design for C++ Training
This training course helps you build knowledge, understanding and skill in the engineering practices needed to build great C++ code. You learn how to build flexible and modular software with very few defects, software that can have a long useful life. We teach you how to prevent defects and how to keep code clean over years of evolving needs.
We learn new skills by doing, not just reading, listening, and thinking. Engineers are not so interested in changing how they work if the change does not help solve some identified problem. We’ve found this learning cycle to be invaluable to attendees of our courses.
- Present a problem -- problems motivate change
- Present a potential solution -- the idea that may help
- Demonstrate part of the solution -- remove ambiguity
- Participant does an exercise -- learn by doing
- Experience debrief -- identify and discuss both positive and negative reactions
In this course, we repeat this learning cycle, growing skills with each iteration. Our goal is to build new skills on top of the attendees' existing skills.
- Software Developers
- Technical team leaders
- Managers that want to know more about the technology they manage
- Completed one of our Test-Driven Development training courses
- C++ programming experience
- Refactoring Defined
- Critical to a Healthy Business
- Critical Skills
- Code Smells
- TDD's Positive Influence on Design
- SOLID Design
Module Objective: There are many guiding principles to help with design. Knowing these principles helps you test-drive or refactor your problem design to a better design. This module helps you understand some of the guiding principles that help transform design decisions from personal preferences to specific design decisions based on specific attributes and tradeoffs.
- Rules of Simple Design
- SOLID Design Principles
- Single Responsibility
- Liskov Substitution
- Interface Segregation
- Dependency Inversion
- DRY Principle
- Mind Your Own Business
- Architectural Vision
- The Big Picture
- Vertical Slices
- From Specific to General
- Breaking Dependencies Dynamically
- Function Pointer Fake
- Evolving to a SOLID Design
- Identifying Duplicate Conditional Logic
- Refactoring to a better design
- Design Patterns
- OS Independence
- Wrap up Discussion
- Optional Workshop for your Product Begins for on-site courses.
Module Objective: As requirements and users' needs change, code must change. Design is
so important, we don't just do design once at the beginning of the development effort.
Design is a continuous process. We accept that changing design is dangerous, and the
tests created by the test-driven developer provide a safety-net to lock in code behavior
as your product design evolves.
Refactoring (changing the structure of code, without changing its behavior) is a step in the TDD microcycle used when we need to clean up a mess. We'll also refactor code so that a new feature can be dropped in. This module provides and overview of the mindset and the critical skills needed to evolve designs for a long useful life.
This course will get you and your team well on the way to applying TDD in your C++ development efforts.
Here is a short interview with James about TDD and embedded software from the deliver:Agile conference last spring.more...
James participated on these social media platforms.more...
Do you have some time to do a simple programming problem in C or C++ for my research?more...
My long-time good friend (Uncle) Bob Martin and I have fun programming together firing tracer bullets for distributed water pressure measurement system.more...
Here are a couple reviews of our TDD for Embedded C training.more...