-
Notifications
You must be signed in to change notification settings - Fork 0
Home
This Wiki starts by describing App3Dev. To get started more directly refer to this Quick Start Guide
You are invited to read through this wiki, and to build and run the code using visual studo community edition. The wiki can be scan read sequentially, and then used as a reference to illuminate the program code and its design. Look at the code and structure and the visual studio project setup as an example. Explore the dynamics (i.e. step through the tests using the debugger etc.) and experience what its like to be a c++ developer. Let me know what you think at jack.heeley.on.github@gmail.com
The word quality here is used in the sense that the material presented here conforms reasonably well for training purposes with published best practice. It should be said that this doesn't mean that this code is necessarily better than anybody else's work, or bug free, or the ideal way to write c++. That being said it aims to be robust and reusable, and I hope it can help individuals and teams to start up quickly, and to head in the right direction. You are welcome to use it as a fully worked example, and are invited to reuse it in parts in your own projects. Just refer to disclaimers and terms in the license.
'modern c++' in this context means this code recognizes the great steps that C++ has made recently as an evolving programming language. This example avoids earlier C++ approaches where they have been improved upon, uses some C++20 constructs, and demonstrates some current best practice. By 'best pactice' I mean that I have selected and consulted the following sources for expert guidance, and have relied on my own experience to assess and apply it:
- Visual C++ in Visual Studio 2022, Microsoft online help
- Effective Modern C++, Scott Meyers
- Effective STL, Scott Meyers
- C++core guidelines, Bjarne Stroustrup, Herb Sutter
I make no further claims about the code. My hope is that clear, browsable self-contained and complete examples of current advice (paradigms and idioms) are more helpful in this form, than as fragmented uncompiled extracts in books, or examples embedded in more complex scenarios. The App3Dev code, and explanations in this wiki can save you time getting up to speed if you find that you are a bit behind the recent developments in C++.
The Wiki pages aim to shine light on the design rationale of App3Dev and to share with you the issues faced and the reasons why I chose the particular responses that you see implemented here. Because this is training support, both the issues I choose to discuss, and the reasoning I choose to highlight, are my own subjective choices, but they arise from career long experience of tackling very typical weaknesses frequently encountered in real projects.
Whatever you background, this solution brings together all the elements you need to get a quick start on a professional C++ assignment using Visual Studio 2022.
This is a training aid. What you get out of it matches what you put in. Study, and critically assess what you see.
The Wiki works though a set of subjects that indicate how to produce more hygenic and more shareable solutions, that encourage and support effective teamwork and re-use. This is a very practical measure to optimise life-cycle costs. It does this by indicating how to exploit the best of available programming tools, and the most effective version of C++, to build predictable quality solutions.
This Wiki builds up to (and provides supporting argument for) a list of dos and don'ts provided as a conclusion. This penultimate page can act as an enabler, so that a team or organization is able to discuss and agree their own quality factors more effectively (in context, using this project code and wiki as a reference).
The frequent absence of an agreed, consistent and collective approach to C++ development in development teams is a leading cause of quality failure, and a genuine source of friction in some teams. What sometimes seems to be a congenital inability or unwillingness of developers to agree on virtually anything is no excuse to accept failure here. We should recognize that intelligent human beings don't respond well to constraints being imposed, and that specific technical measures are bound to be contentious and difficult material. This work is intended as a mitigation of this difficulty.
My hope is that teams or organizations or technical quality managers will read and cherry-pick the dos and don'ts to arrive at a consensus view and define and adopt their own quality checklist in this way. This rarely arises spontaneously as it is difficult, and is almost never fully formed at the outset of a project when it is most valuable. An enactable quality checklist ought to be far more attainable with clear explanation of rationale (this wiki) and a reference project that gives examples to clarify meaning and demonstrate effect. The item "Do revise this checklist regularly", supports early adoption of this quality guidance while your project refines its quality response.
Once done, teams can apply their own guidance by doing peer-reviews at frequent intervals, or as mandatory step in their core development process (e.g. at check-in time). This will promote a sense of professionalism, collective interest, and team pride. That in itself will drive quality up and costs down. It leads to more predictable progress, by managing otherwise hidden levels of technical debt.
Be aware that you should not expect to see examples of every new feature of the C++ language here, or indeed the visual studio tooling. For that, consult the literature!
I wish to prominently acknowledge spimpl.h which I have included here (unchanged and including license and copyright statements of the author, Andrey Upadyshev) This is distributed under GPL 1.0.