Important News 22 April 2014: The course has been split into two parts, C++ Grandmaster I and C++ Grandmaster II. C++ Grandmaster I will also include a final written assignment on the C++ language specification. This about page has not been updated with these changes as yet.
Students of this two part online course each single-handedly develop their own original C++ compiler, standard library, and toolchain with the following features:
- Compliant with the latest 2011 standard (C++11)
- Written entirely in C++ with no third-party dependencies
- Code generator targeting Linux x86_64
- Full toolchain including preprocessor, compiler frontend/backend, assembler, linker and all standard library components
- Builds with itself (self-hosting) and passes provided conformance test suite
There are no hard prerequisites, however successful completion is unlikely if the student does not meet the following minimum initial requirements:
- 2+ years experience working on a C++ codebase or similar language (Java, C#, C)
- taken a typical undergraduate Compilers course
- read the dragon book or similar
- developed a compiler for a toy language
- coded and debugged at an assembly level
- basic Unix/Linux experience
Most students commence the course with advanced degrees in computer science, and hold challenging software engineering positions, usually with a focus on systems programming.
As a primary outcome the participant will demonstrate:
- a complete, exhaustive knowledge of the C++ language and C++ standard library
Secondary outcomes are:
- the ability to cope with large-scale software implementation
- an understanding of language design and compiler construction
- a knowledge of Linux kernel-userspace interface and operating system
- Intel 64 assembly programming/debugging and computer architecture experience
Course graduates will receive:
- the title Certified C++ Grandmaster [CPPGM]
- a certificate and letter of recommendation detailing their achievement
- access to a course graduate exclusive professional networking group
The course is broken down into a linear series of programming assignments that build upon one another.
Each assignment has an associated starter kit containing:
- skeleton code
- design and reference documentation
- a test suite
- a support forum
- a compiled reference implementation
To complete an assignment, the participant submits their codebase for automated testing and review.
Upon completion of each assignment, access is granted to the next.
References / Textbook
- Standard for Programming Language C++ (pdf)
- Compilers: Principles, Techniques, and Tools - Aho, Lam, Sethi, Ullman (book)
- Intel 64 and IA-32 Architectures Software Developer Manuals (pdf downloads)
- Linux Kernel Documentation (html)
Frequently Asked Questions
- What is the C++ Grandmaster Certification?
- How much does it cost?
- When does it start?
- How do I enroll?
- Why should I take this course?
- Is there a certificate?
- Will we use C++11 (formerly known as C++0x)?
- Isn't this a huge undertaking, usually done by an entire team of programmers?
- Why Linux x86-64?
- Can I use tool XXX or library XXX?
- May I publish my code on my blog or website?
- How is the course structured?
- Are there deadlines?
- What is the minimum workload to keep up with the deadlines?
- Can I take the course alongside full-time work or study?
- How many people are taking the course?
- How long does the course take?
- What exactly are the programming assignments like?
- Who is the course instructor?
What is the C++ Grandmaster Certification?
The C++ Grandmaster Certification is an online course in which each student single-handedly develops their own complete standalone C++ toolchain - including a preprocessor, compiler frontend/backend, assembler, linker, and full hosted implementation of the C++ standard library.
The toolchain will produce executable applications for a target of (a) the Linux operating system, and (b) the x86-64 (Intel 64 / AMD 64) computer architecture ABI.
The toolchain is developed piece by piece as a series of programming assignments.
In the end, all parts of the toolchain have been written by the student, and as a grand finale, the student builds the toolchain with itself (a self-hosting build) and passes final system testing. Apart from a bootstrapping compiler and a small amount of skeleton code to harness the provided test suites, no third-party tools or libraries are used.
How much does it cost?
The first and current run of the course is free. Tuition costs for the next run, if any, have not been announced.
When does it start?
Enrollments are closed for the current run of the course. When the next run starts has not been announced yet.
How do I enroll?
Why should I take this course?
The main benefit of this course is a complete (and verified) knowledge of the C++ programming language and the C++ standard library. The certification provided by this course is the most rigorous language-specific C++ qualification possible.
Another benefit is the experience of implementing solo quite a large C++ software engineering project from a detailed specification. Notice that you are not only implementing the C++ standard, but are also applying C++ (at scale) to do so.
In addition, you will learn a lot about the Linux operating system, in particular the userspace-kernel interface (syscalls, ABI, execve loader, ELF). This is useful to understand operating systems in general, and also useful for optimizing applications on Linux.
You will also learn x86-64 assembly. This is useful for optimization as well, but mostly it will give you the ability to fearlessly "drop to disassembly" when debugging x86 applications.
Finally, you will acquire a practical view of compiler construction with a real world language targeting a real world platform.
Is there a certificate?
Yes, we provide graduates with both a physical and electronic certificate and a detailed letter of recommendation that you can add to your resume/CV that describes in concrete detail what you have achieved in this course and what it means regarding your capabilities and skillset as a programmer.
You will also earn the title Certified C++ Grandmaster [CPPGM].
Finally, graduates will get access to an exclusive online professional networking group where they can mingle with other gradautes of the course, to socialize, exchange career opportunities or make invitations/introductions.
Will we use C++11 (formerly known as C++0x)?
Yes, the course targets the most recent working draft of the standard at commencement of a run, which for the first run was the post-C++11 N3485. The developed toolchain will support all the latest C++ language and library features, and participants may use any of the latest C++ features (provided they are also supported by the bootstrap toolchain) in its construction. One of the main benefits of the course is learning about the very latest C++ features and how they work in detail.
Isn't this a huge undertaking, usually done by an entire team of programmers?
Yes, earning the title Certified C++ Grandmaster is for most programmers the hardest programming exercise they have completed in their careers. It requires writing well over 100,000 lines of code, implementing about 2000 pages of dense technical specifications and takes over 1000 hours of intense work for that small percentage of world-class programmers that are ready to complete it at all.
Why Linux x86-64?
For simplicity, we wanted the backend to target a single set operating system and architecture. We only considered targets that have an open source operating system, so we could freely step into the kernel as needed. Beyond that, we simply selected the most popular "real world" commodity architecture so the incidental concrete knowledge would have the highest chance of being useful.
Can I use tool XXX or library XXX?
The main test of the certification is that you are able to write all the parts of the toolchain, and have them work together. In the end, the entire codebase must be your own original work. Therefore you may not use any third party tools or libraries, except those explicitly authorized for bootstrapping and testing purposes.
May I publish my code on my blog or website?
As a condition of taking the course or using our course materials, we require that you agree to our Honor Code. Among the conditions are that you will not release your source code without our written permission. The reason for this is to not create a temptation of plagarism. For the integrity of the qualification, it is necessary for us to certify that the code you submit is your own original work. If we allowed students to post their assignment solutions to GitHub it would make this task impossible. There are a number of features expected of a production C++ toolchain beyond standard-compliance, and so your assignment solutions will not have commercial value as-is. Clang/LLVM source is freely available for use in both open source and commercial applications, is highly modular, supports multiple frontend and backend languages with an advanced IMF for optimization, refactoring, debugging, dynamic linking, many extensions. Your assignment solutions will not be competetive with it as-is, or other production toolchains. In the event you want to use the code you write for this course as part of a real world application, we ask you to contact us so that we can decide if it qualifies for permission. You may however freely distribute programs without source code in object form without permission. Also note, we agree to not use your source code for any purpose other than grading and certification without your permission.
How is the course structured?
The process of creating the toolchain is broken down into a series of programming assignments. Each assignment has a starter kit that contains design and reference documentation, skeleton code that is attached to a test harness, a test suite and a compiled reference implementation. It is then your job to implement the described component and add it to your toolchain. Once it passes the test suite locally, you push your assignment solution to the cppgm site through a private git repository each student has provisioned at the start of the course. Automated testing is executed on it; if that passes it goes up for review and some security checks for plagiarism against past submissions and publicly accessible open source compilers. Once these steps are completed successfully your account will be promoted, and you will be given the next assignment.
This process continues until the final assignment. The final assignment involves building all of the components with themselves to produce a standalone self-hosted toolchain, independant of the bootstrap toolchain. Your standalone toolchain is then tested against the a full conformance test suite. Once this final assignment is passed, you have graduated from the course and have become a Certified C++ Grandmaster.
Are there deadlines?
Yes. Each programming assignment has a deadline by which the latest submission is accepted. Students that fail to pass an assignment by a deadline are automatically expelled. A long gap is given between when an assignment is posted and the deadline for that assignment, so the schedule remains flexible.
What is the minimum workload to keep up with the deadlines?
Productivity varies enormously between programmers depending on background and talent, so it is different for everybody. With that caveat in mind: for a good programmer, that meets the listed prerequisites, and is really "ready" for the course, the minimum workload is 10 hours/week.
Can I take this course alongside full-time work or study?
Yes, but it is advisable to get permission to spend at least 1 day/week on the course (as your "20% project"). Together with a little time on the weekend and at night you should be able to keep up.
How many people are taking the course?
For the first run 10,000 programmers enrolled and started on the first assignment. It is expected less than 1% of them will go on to successfully complete the course.
What exactly are the programming assignments like?
You can view Programming Assignment 1 as a preview. You can go ahead and dive in right now and try it out. The different parts of the toolchain and standard library each have their own unique challenges, and PA1 is considered an easy warmup exercise, but it should give you some idea what the course is like.