From d37c367f917c5e77f0596e4cccc79e1b0a45f527 Mon Sep 17 00:00:00 2001 From: Kristoffel Pirard Date: Sun, 26 Jul 2020 13:38:52 +0200 Subject: [PATCH] Create 'about' document --- README.md | 5 +++ about.md | 113 +++++++++++++++++++++++++++++++++++++++++++++++ failing-test.png | Bin 0 -> 34298 bytes 3 files changed, 118 insertions(+) create mode 100644 about.md create mode 100644 failing-test.png diff --git a/README.md b/README.md index 5446004..f097676 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,11 @@ Exercises to train your C++11/14/17 (and then some). [![Build status](https://xtofl.visualstudio.com/cpp11exercises/_apis/build/status/cpp11exercises-CI)](https://xtofl.visualstudio.com/cpp11exercises/_build/latest?definitionId=2) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/e1556f3ddf3645fe98d1fb06bf011b1c)](https://app.codacy.com/app/kristoffel-pirard/cpp11training?utm_source=github.com&utm_medium=referral&utm_content=xtofl/cpp11training&utm_campaign=Badge_Grade_Dashboard) +## About + +This repo is intended as a resource to use during C++ trainings. If you're curious about how it came +to be, take a look at [about.md](about.md). + ## Getting started ### Linux diff --git a/about.md b/about.md new file mode 100644 index 0000000..ea66aff --- /dev/null +++ b/about.md @@ -0,0 +1,113 @@ +# Exercises for the masses + +## History + +Working in C++ around the year 2010 was very exciting. The language was about +to receive some vast new impulses, promising better semantics, performance, … + +In 2016, I was lucky enough to work in an environment that lived on the edge: +constantly following the latest (Microsoft) compiler versions, and writing C++ +programs according to the latest and greatest idioms. + +All of this happiness had to be shared. That’s why my employer, Sioux Embedded +Systems, asked if anyone would be able to create a C++11/14 ramp-up course for +my colleagues. Of course I bit. + +The budget: 5 days of preparation - a challenge for me. It seemed a vast +undertaking, given the fact that I hadn’t been giving training, nothing ‘free’ +could be found. So I decided I would borrow free and open source presentations, +and create exercises myself. But how? + +As it happened, there also was a gap in the knowledge of unit testing +frameworks. So why not kill two birds with one stone? Fond of TDD, I had grown +quite familiar with the googletest framework. So I decided to create a bunch of +failing unit tests that had to be ‘fixed’ using C++11/14 features. + +Since I was to take all my course material from the internet, I thought it only +fitting to give back. So I started creating the course in the open on +https://github.com/xtofl/cpp11training/. + +## Overview + +### Repo structure + +* Presentations are stored in the `slides/` directory. There's also a + [readme](slides/README.md) to explain its contents. +* Exercises are stored per topic under the `src/` folder; within each topic, + exercise source files are numbered. +* Each topic file contains a number of `TEST` cases. Each of these cases represents + an exercise. In the comments, I try to explain what you're supposed to do (TODO), + what you're supposed to learn from this exercise (GOAL), and may add some HINTs. + +### Exercise Example + +For instance, one of the first exercises you'll encounter is about using the +range-based-for feature introduced in C++11. + +```c++ +TEST(range_based_for, DISABLED_we_can_iterate_over_a_collection) +{ + int result = 0; + // TODO: extend the Range class so that it acts as a + // real 'range' and can be used in a range based for loop. + // + // GOAL: understand the working of range-based for loop, and + // adapt existing classes to it + // + // HINT: This is a harder problem: you need to provide + // a free begin(const Range&) and end(const Range&) function + // that returns an iterator-like object. + // +#ifdef solv + for (const auto &element : Range{ 1, 11 }) + { + result += element; + } +#endif + EXPECT_EQ(55, result); +} +``` + +As you'll see, the test will +be compiled, but the `DISABLED_` prefix in its name will prevent gtest from +executing it. Removing the prefix 'activates' the test and makes it run, +but fail: + +![failing-test.png](failing-test.png) + +Another example: one to learn using the `transform` algorithm: + +```c++ +TEST(apply_transform, DISABLED_join_two_input_ranges) +{ + const std::vector keys{ {"two", "five", "ten", "forty"} }; + const std::vector values{ {2, 5, 10, 40} }; + + std::vector numbers; + // TODO: transform keys and values into + // this python-key-value syntax + // GOAL: see that `transform` can accept two ranges + // and 'zip' them together + ASSERT_EQ(keys.size(), numbers.size()); + EXPECT_EQ("two: 2", numbers[0]); + EXPECT_EQ("five: 5", numbers[1]); + EXPECT_EQ("ten: 10", numbers[2]); + EXPECT_EQ("forty: 40", numbers[3]); +} +``` + +## Future + +Meanwhile we're 2020, and I have given this training about 5 times. Everytime, +the overall response is positive about offering running code in the form of +isolated unit tests. The fun part for me is that whenever someone finds a +mistake, I can kindly ask them to fix it and create a merge request. + +And it has proven to be needed. What is also needed: some of the exercises are +a little 'far fetched', and may be replaced by more down to earth subjects. +Although on every occasion I am able to improve the guidelines, add some +exercises and the lot, this body of exercises still needs a lot of guidance. + +I'm hoping that some day, this effort will be picked up and improved by 'the +masses'. For I'm convinced that good and affordable programming education is +an important ingredient for an inclusive world. \ No newline at end of file diff --git a/failing-test.png b/failing-test.png new file mode 100644 index 0000000000000000000000000000000000000000..ad45b4d32d363ae93a87c40852ded3cde40a7c16 GIT binary patch literal 34298 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 literal 0 HcmV?d00001