Jason is a C++ programmer, speaker, and trainer with almost 20 years of professional experience. He has won awards for his conference sessions, published 5-star reviewed video training series with O’Reilly Media, and is a Microsoft MVP for his contribution to the C++ community.
Jason hosts C++ Weekly, a YouTube channel for C++ developers, and has published several C++ books and C++ related puzzle books.
{ }
scopes; ||
, &&
logical operators and ++
, --
, +=
type operationsFor any students hoping to get a head start on the class it is recommended to read Jason’s C++ Best Practices book (available in print and ebook versions.
Jason’s style of highly interactive teaching in a small group environment ensures that each attendee has the opportunity to participate and ask questions.
His training focuses on teaching how to write code that:
Jason provides unique, highly interactive, on-site, customized training events for organizations.
Jason charges per student per day, plus applicable travel expenses for training. To ensure the best experience for everyone, classes should be between 12 and 30 students. Because Jason uses a per-student per-day fee structure, there is no additional cost to the organization if they choose to split students into smaller classes.
Two or three days is the recommended length of a class, but one to five is possible, depending on the situation.
To schedule a training event with Jason:
If you are interested in a remote interaction with Jason, you can contact him about remote code reviews.
Offering a variety of classes, Jason is able to tune a curriculum to the specific needs of your organization.
Below are a few suggested curriculae for various types of organizations.
1-4 days:
constexpr
2 day class:
3 day class:
4 day class:
2 day class:
3 day class:
4 day class:
2 day class:
3 day class:
4 day class:
Based on the Best Practices that Jason has been developing since 2014 with his cppbestpractices.com website and “Learning C++ Best Practices” video series published with O’Reilly, this series teaches the student how to write code that is more maintainable, simpler, and faster. This course is designed for users that already have a basic working knowledge of C++.
Best Practices assumes the organization is using C++11+ already, or has knowledge of C++11.
Goal:
After this class the student will be able to recognize that code such as this:
size_t count_a(void *buf) {
size_t count;
char *typed_buf;
count = 0;
typed_buf = (char *)buf;
for (int i = 0; i < typed_buf[i] != '\0'; ++i) {
if (typed_buf[i] == 'a') {
++count;
}
}
return count;
}
Can be transformed into code like this:
size_t count_a(const std::vector<char> &t_vec)
{
return std::count(std::begin(t_vec), std::end(t_vec), 'a');
}
We will cover:
decltype(auto)
on coding standardsBest Practices 2 picks up with the first Best Practices class leaves off, with a deeper focus on issues that affect library developers and other shared code in the organization.
It is particularly important that this code be efficient at both compile time and run time. It is equally important that the code be proven and maintainable.
Goal
The student will understand details such as why variadic recursive template instantiations should be avoided and what the alternatives are.
We will cover:
constexpr
, final
and noexcept
constexpr
auto
return typesC++ is sometimes thought to be an overly complex language that carries with it the baggage of decades of backwards compatibility with itself and with C. So why do we use it? What advantages does C++ offer that makes it so compelling?
In this seminar we will discuss why C++ should be considered for the next project you are working on.
Goal
The attendee will gain and understanding of what makes C++ unique.
In this course we will help the programmer experienced in other languages develop a basic working understanding of C++
Goal
The student who completes this class will be able to read and maintain an existing C++ code base and get started on new C++ projects.
We will cover
C++11, 14 and 17 have added new constucts to the language that may make the experienced C++ programmer question how much overhead is added when utilizing these features and how trustworthy they are.
We will explain:
std::array
Gain new control of your code through a clear understanding of inheritance and polymorphism in C++. You will learn the basics, the gotchas, the implementation and optimization of polymorphism and inheritance.
We will:
C++ has something very few other languages have: a well defined object life cycle. Understanding this key aspect of C++ is critical to writing clean, maintainable, and efficient C++.
We will cover:
C++ has an over arching design goal of providing abstractions that have zero or negative overhead compared to hand-rolled abstractions. In this class we will examine the zero cost abstractions that C++ provides and how to leverage them for high level and high performance code.
Goal
In this class the attendee will learn to trust the abstractions that C++ provides and how to utilize them.
We will cover:
constexpr
By now we all know now that constexpr
can be used to generate virtually anything at compile time. But what does this mean for our normal day to day C++ work? How, why, and most importantly where do we use constexpr
to get the most out of it in our quest for clean efficient C++?
Goal
The attendee will be able to identify code that can be executed at compile time and learn how to implement such code regardless of C++ standard used.
Introduction
Preparing for constexpr
constexpr
mindsetUsing constexpr
Conclusion
constexpr
supportconstexpr
for C++20