Training

Programming Conversations Lecture Series—Alexander Stepanov

alex-stepanov-programming-conversations.PNGYet again the wonderful ongoing video series from Alexander Stepanov and Paramjit Oberoi (A9 Organization):

Programming Conversations

Programming conversations is intended as an interactive course on programming. We'll try to practice the Socratic method: eventually there will be very little lecturing, and most of the time will be spent in discussions and in writing code together. We plan to cover a wide variety of topics, starting with the nature of programming, and continuing, in no particular order, with benchmarking, algorithms, data structures, caches, instruction level parallelism, generic programming, variable sized types, and Platonic ideas.

Most of the concepts are explained in terms of C++11/STL/Boost.

Source code is available.

 

 

 

 

C++11/14 Standard & Standardization—Peter Sommerlad

Peter Sommerlad on C++11 and C++14 Standard(s) and Standardization:

Peter Sommerlad on C++11 and C++14 Standard(s) and Standardization

Created by Peter Sommerlad March 6, 2014

From the presentation:

Why is C++ in again?

• more computing per Watt!
  • mobile - battery powered
  • servers - cloud computing
  • high-performance computing & GPUs
• better abstractions than C
  • without performance price (e.g. of a VM)
  • embedded (higher-level type safety)
  • security (buffer overruns, pointers)

Slides (PDF)

Learn How To Program… with C++—Kate Gregory

kate-gregory-v2.jpgDo you know a beginner who'd like to learn C++? Or even just learn how to program... using C++?

Recently, C++ author and trainer Kate Gregory made a new 7-hour course available via Pluralsight. And not just any introductory course, but teaching C++ the way it should be taught... not "C and pointers first."

It's highly-rated, as with all of Kate's courses. Know about it and recommend it to newcomers.

Learn How to Program with C++

Instructor: Kate Gregory

If you've never programmed before, and you think you'd like to learn C++, why not learn it first? This course covers what you need to start writing real applications in C++.

What’s new in C++11?—KDAB

KDAB is now offering three-day training courses in C++11.

What’s New in C++11?

This three-day training teaches everything about the new C++ standard, C++11.

Course description

Table of contents (PDF)

C++11 will become more and more important in the C++ ecosystem, eventually becoming the most prevalent version. Every professional developer should invest in learning the new language version and try introducing its benefits into projects. And for good reasons: C++11 brings a large range of new features that makes development safer, faster, easier and more fun. Once you have tried features like lambda functions, range-based for loops, the auto keyword and the new initialization syntax, you won't want to go back. In addition to that, many more advanced features like variadic templates, rvalue reference and of course the new standard library additions like multithreading classes, smart pointers, regular expressions and new containers and algorithms complete the picture.

During the training day at Qt DevDays 2012 in Berlin, KDAB engineer Marc Mutz, presented some the most important C++11 features using parts of the material from this course. This was very well attended, receiving positive feedback.

Our full training lasts for three days and covers a wide range of topics, it goes in-depth and provides time to show C++11 examples as well as allowing participants to go hands-on and trying out C++11 themselves in exercise projects.

See the course description for more details about the content.

To view our schedule and to book your place for our next C++11 trainings go to: www.kdab.com/schedule/

Effective C++11 update—Scott Meyers

This week, Scott Meyers posted a couple of updates on how C++11 is coming to one of the world's most-loved C++ book series -- Effective C++.

 

First, here's Scott's preamble about his approach to Effective C++11:

Effective C++11: Background

I've mentioned in some earlier posts that I plan to start writing a new book, Effective C++11.  The purpose of this post is to tell you a little bit about it. Lest there be confusion, let me emphasize that there is no book yet. If everything falls into place the way I hope it will, there will be a book about 10 months from now. If. I'm not making any promises. [...]

 

As a followup, Scott then posted an early draft list of candidate Items for Effective C++11 as part of this post:

Effective C++11: Content and Status

[...] At last year's C++ and Beyond, I gave a talk entitled "Initial Thoughts on Effective C++11." It had my usual guideline format. I also gave a talk on "Secrets of the C++11 Threading API," which consisted of observations about C++11's threading support. The material in those talks, combined with the feedback I got from giving them and mixed in with my experience explaining the idea of universal references, ultimately yielded the initial list of candiate Items for EC++11. The current snapshot of my vision for Effective C++11 is: [...]

At least a million developers are looking forward to your book, Scott!

No pressure.

C++ Training at All Levels—Leor Zolman

On-Site C++ Training at All Levels

by industry veteran Leor Zolman

 

Note: For a limited time, any 4- or 5-day training includes the C++11 Overview.

 

Our C++ and C seminars have been designed by some of the best-known, most effective C++ educators practicing today. In addition to materials created by Leor our C++ training repertoire features courses licensed from and supported by industry leaders Dan Saks and Stephen C. Dewhurst.

A Whirlwind Overview of C++11 (1/2-day, author: Leor Zolman)

Advanced C++  (Author: Stephen C. Dewhurst)

Effective C++ (3-, 4- and 5-day versions of courseware by Scott Meyers based on his books)

An Effective Introduction to the Standard Template Library (STL) (Author: Scott Meyers)

C++ for Non-C Programmers (Author: Leor Zolman)

C++ and Object-Oriented Programming (a.k.a. C++ for C Programmers). (Author: Dan Saks)

A sample unit of any course is available upon request.

Contact us today for more information or to schedule an on-site training at your location!

C++11: The New Standard—Dave Abrahams

C++11 -- The New Standard

Dave Abrahams, BoostPro Computing

Contact info@boostpro.com for further details

 

In this class we’ll be using real C++11 compilers to explore the new standard, including these specific topics:

Classes: override and final, =default and =delete, in-class member initializers, delegating and inheriting constructors
Move Semantics: copy elision, rvalue references, and perfect forwarding
Concurrency: high- and low-level lock-based components. Atomics and the C++ memory model.
General: range-based for loops, nullptr, uniform initialization, string encodings, unicode, and auto
Functional: Lambda expressions, std::bind, std::function, user-defined literals, and constexpr
Exceptions: noexcept, nesting, copying, and re-throwing, system_error and friends
Containers: arrays, tuples, initializer_lists, emplacement, scoped allocators, and hash tables
Basic Types: standard-layout types, extended integer types, generalized unions, alignments, and scoped enums
Smart Pointers: unique_ptr, shared_ptr, weak_ptr, make_shared, allocate_shared
Templates: extended SFINAE, working with decltype and declval, and variadic templates

Because the earlier C++03 standard is familiar, and will still be relevant for many years, we offer special attention to future-proofing and to the emulation of C++11 features in C++03 using 3rd-party libraries such as Boost.

Who It’s For: experienced C++ programmers who want to be ready for C++11.

Format: Each day is divided roughly into four blocks, each consisting of an hour of lecture and thirty minutes of hands-on exercises. Ideally presented as a 5-day course, it is scalable to 3 days customized to your team’s needs.

Download a complete brochure (PDF) or contact info@boostpro.com for details.

 

Higher Level C++ with the Boost Libraries—Dave Abrahams

Higher-Level C++ with the Boost Libraries

Dave Abrahams, BoostPro Computing

Contact info@boostpro.com for further details

The Boost library collection has become the de-facto standard toolkit for serious C++ development projects.

What You'll Get: new tools, revolutionary ideas, and a foundation upon which to continue expanding their knowledge.

Who It’s For: C++ developers who want to accelerate their work using high-quality infrastructure.

Format: Each day is divided roughly into four blocks, each consisting of an hour of lecture and thirty minutes of hands-on exercises. Ideally presented as a 5-day course, it is scalable to 3 days based on your team’s needs.

Structure: the scope of Boost is broad, so it is important to cover a subset of the collection that is both useful and relevant to your team. We will customize a selection of course modules that address your group’s needs, experience, and short- and long-term needs.

Suggested Course Modules

The modules below represent some suggested groupings of similar/related libraries, based on size, domain, and utility. Some libraries don’t fit neatly into one particular module, and the list of Boost libraries is constantly growing, so be sure to let us know if you want something you can't find here.

  • The Boost Core: presents a broad array of generally-useful libraries and introduces “vocabulary components and idioms” that are used throughout other libraries in Boost and in the C++11 standard. Recommended for all presentations of this course.
  • The Boost Graph Library: concepts, algorithms, data structures, theory and practice.
  • Computational Geometry with Boost: covers Boost.Geometry and Boost.Polygon.
  • Networking and Async Services: showcases Boost.ASIO and gets inside the “network programming head-space,” showing design patterns that can make this kind of code tight, maintainable, and efficient.
  • Boost Concurrency and HPC: covers both the issues inherent in concurrent systems and a suite of libraries in Boost that can help you solve them.
  • Algebraic Data Types: describes a highly-generic and introspectable way of working with data using the Boost Tuple, Variant, Optional, and Fusion libraries.
  • Image Processing: covers the powerful Boost.GIL library
  • Testing and Correctness: discover the Boost tools for writing rock solid code. Shows how to manage uncertainty and makes it possible to code with confidence.
  • Boost for Numerical Computing: covers the Boost.Math, Boost.Interval, Boost.Random, Boost.Accumulators and more, including several important offerings outside the Boost collection.
  • Functional Programming: aimed at C++03 programmers (who don’t have true lambda expressions) and at C++11 programmers desiring more power to create and manipulate functions.
  • Thinking Hybrid with Boost.Python: covers everything needed to flow smoothly between Python and C++, small- and large-scale development, extending Python, and embedding it in C++ programs.
  • Text Processing with Boost: develop fluency with the vocabulary of Boost's many text processing libraries and learn how to apply them effectively.
  • Metaprogramming Concepts and Frameworks: 
A compressed, high-intensity subset of our 5-day metaprogramming course, covering Boost.MPL, Boost.Fusion, and Boost.Proto, among others.

An Overview of the New C++ (C++11)—Scott Meyers

An Overview of the New C++ (C++11)

Scott Meyers

Specification of the new version of C++ (“C++11”) is finally complete, and many compilers already offer a wealth of features from the revised language. And such features! auto-declared variables reduce typing drudgery and syntactic noise; Unicode, threading support, and alignment control address important functionality gaps; and rvalue references and variadic templates facilitate the creation of more efficient, more flexible libraries. The standard library gains resource-managing smart pointers, new containers, additional algorithms, support for regular expressions, and more. Altogether, C++11 offers much more than “old” C++. This intensively technical seminar introduces the most important new features in C++11 and explains how to get the most out of them.

Course Highlights

Participants will gain:

  • Knowledge of the most important C++11 features and how they help produce better programs.
  • Insights into how new features solve important problems.
  • Understanding of which features are useful primarily to library writers, which to class authors, and which to virtually all C++ developers.
  • Availability information regarding which features are available on which platforms.

Who Should Attend

Designers and developers who are using, considering using, or wish to know about the expanded capabilities of C++11. Attendees should be experienced with C++ and comfortable with its primary features (e.g., classes, templates, inheritance, STL, etc.). Familiarity with threading concepts (e.g., threads and mutexes) is helpful, but is not essential.

Format

Lecture and question/answer. There are no hands-on exercises, but participants are welcome – encouraged! – to bring computers to experiment with the material as it is presented.

Length

Three full days (six to seven lecture hours per day).

Detailed Topic Outline

The History and Vocabulary of C++ Evolution

Sample Program: C++98 vs. C++11

Features for Everybody:

  • auto for Type Declarations
  • Range-Based for Loops
  • >>” as Nested Template Closer
  • nullptr
  • Enhanced enums
  • Unicode characters and strings
  • Raw string literals
  • Uniform initialization syntax
  • Initializer lists
  • Lambda Expressions
  • Template Aliases
  • Threading Support
  • New Container Features
  • Smart Pointers (shared_ptr, weak_ptr, unique_ptr)
  • Hash Tables
  • Singly-Linked Lists
  • Fixed-Size Arrays
  • Tuples
  • Regular Expressions
  • Generalized Functors(function)
  • Generalized Binder (bind)
  • New Algorithms
  • Other New Library Functionality

Features Primarily for Class Authors: ◦Move Support, Rvalue References, and Perfect Forwarding

  • default Member Functions
  • delete Functions
  • Default Member Initialization
  • Delegating Constructors
  • Inheriting Constructors

Features Primarily for Library Authors: ◦Static Assertions

  • explicit Conversion Functions
  • Variadic Templates
  • decltype
  • Alignment control (i.e., alignof, alignas, etc.)

Yet More Features (Overview)

Removed and Deprecated Features (Overview)

Sources for Further Information

Fastware for C++—Scott Meyers

Fastware for C++

Scott Meyers

Fastware is software that's fast — that gets the job done quickly. Low latency is the name of the game, and achieving it calls for insights from software engineering, computer science, and the effective use of C++. This presentation addresses crucial issues in each of these areas, covering topics as diverse as CPU caches, speed-sensitive use of the STL, data structures supporting concurrency, profile-guided optimization, and more.

Much of the material in "Fastware for C++" is unique to this seminar, i.e., unavailable in Scott's publications or his other training courses. However, as the successor to Scott's acclaimed "High-Performance C++ Programming" seminar, "Fastware for C++" also includes updated discussions of topics from that course as well as from Scott's books, Effective C++, More Effective C++, and Effective STL.

Course Highlights

Participants will gain:

  • Recognition of the importance and implications of treating performance as a correctness criterion.
  • Understanding of how effective use of third-party APIs can improve system performance.
  • Knowledge of specific C++ practices that improve the speed of both the language and the STL.
  • Familiarity with concurrent data structures and algorithms poised to become de facto standards.

Who Should Attend

Systems designers, programmers, and technical managers involved in the design, implementation, and maintenance of performance-sensitive libraries and applications using C++. Participants should already know the basic features of C++ (e.g., classes, inheritance, virtual functions, templates), but expertise is not required. Knowledge of common threading constructs (e.g., threads, mutexes, condition variables, etc.) is helpful. People who have learned C++ recently, as well as people who have been programming in C++ for many years, will come away from this seminar with useful, practical, proven information.

Format

Lecture and question/answer. There are no hands-on exercises, but participants are welcome — encouraged! — to bring computers to experiment with the material as it is presented.

Length

Two full days (six to seven lecture hours per day).

Detailed Topic Outline

Treating speed as a correctness criterion.

  • Why "first make it right, then make it fast" is misguided.
  • Latency, initial and total.
  • Other performance measures.
  • Designing for speed.

Optimizing systems versus optimizing programs. ◦Most system components are "foreign."

  • Exercising indirect control over "foreign" components.
  • Examples.

CPU Caches and why they're important. ◦Data caches, instruction caches, TLBs.

  • Cache hierarchies, cache lines, prefetching, and traversal orders.
  • Cache coherency and false sharing.
  • Cache associativity.
  • Guidelines for effective cache usage.

Optimizing C++ usage: ◦Move semantics.

  • Avoiding unnecessary object creations.
  • When custom heap management can make sense.

Optimizing STL usage: ◦reserve and shrink_to_fit.

  • Range member functions.
  • Using function objects instead of function pointers.
  • Using sorted vectors instead of associative containers.
  • A comparison of STL sorting-related algorithms.

An overview of concurrent data structures. ◦Meaning of "concurrent data structure."

  • Use cases.
  • Common offerings in TBB and PPL.
  • Writing your own.

An overview of concurrent STL-like algorithms. ◦Thread management and exception-related issues.

  • Common offerings in TBB and PPL.
  • OpenMP.
  • Other TBB and PPL offerings.

Exploiting "free" concurrency.

  • Meaning of "free."
  • Multiple-approach problem solving.
  • Speculative execution.

Making use of PGO (profile-guided optimization) and WPO (whole-program optimization).

Resources for further information.

For more information on this course, contact Scott directly.