Minimizing complexity in a codebase provides invaluable benefits, especially at scale, including but not limited to: maintainability, ease of understanding, malleability, debuggability, and testability. Such benefits translate not only into real economical advantages, but also increase the mental well-being of any developer.
So, how can "simplicity" be achieved?
Rather than focusing on philosophical concepts, this interactive presentation will give developers pragmatic and actionable guidelines that can be readily applied to reduce complexity in any codebase. Starting from a wide variety of examples (e.g. casting, containers, looping, attributes) a set of precepts will be derived together with the audience. After that, a deep analysis of where those precepts fall short will be given, honing them until reaching the final goal of obtaining actionable guidelines useful in the real world will be reached.
If any of the following questions sound interesting to you, then you will definitely find this talk helpful and enjoyable:
- Should `emplace_back` always be used instead of `push_back`?
- Does `[[nodiscard]]` belong on every pure function returning non-`void`?
- How can one decide between using open-set and closed-set polymorphism?
- Are regular `for` loops the best way of iterating over a range of numbers?
- Do C-style casts still have a place in Modern C++?
- Is `T*` really a valid replacement for `std::optional<T&>`?
- Does simple code imply concise code?
- Can using templates reduce the complexity of a code base?
- When does it make most sense to use type deduction?