| layout | title | permalink |
|---|---|---|
page |
Overview |
/overview/ |
The goal of this seminar is to explore basic programming via discussion and practical experimentation. Students can expect to question, debate, critique and (re)create the basic constructs and patterns they use in programming on a day to day basis. The main language will be C++ due to the variety of constructs that can be written in it and the interesting variations in accepted practice that exist within communities that use it. To help students reach the level of proficiency in C++ required for the course, workshops will be given on some interesting features and common practices in the language.
Learning Goals [full breakdown]
By the end of the seminar, students should be able to:
- Read, write and debug a variety of programs in C++.
- Reason about the performance, usability and maintainability of programming styles in C++.
- Have a basic understanding of template metaprogramming.
- Reason about abstraction using at least the following devices, and assess their situational appropriateness:
- Type erasure
- Inheritance
- Iterators, and by extension ranges
- Resource Acquisition Is Initialization
- Move semantics and move-only types
- Tagged unions
- Operator overloading
Students should also have tried and reflected on their own design/reimagining and implementation of a given abstraction, chosen from (but not limited to):
- strings
- mappings
- graphs
- concurrency primitives (atomics, futures)
- task scheduling and execution
- data serialization/deserialization
- some aspect of the C++ standard library
Here is a preliminary set of assignments with proposed weightings:
- Weekly homework [30%]
- To be completed and handed in at the end of the week, one or two small summative coding problems.
- Final project [70%]
- Students present an exploration of one of the topics listed in the learning goals, complete with two or more implementations of their chosen abstraction and reflections on each. This will be split into at least one milestone with one of the implementations, and a final peer-reviewed presentation at the end of term.
Grading of the project elements will be by presentation to the group. Assessment would be in terms of the completion of the implementations they provide and their ability to reflect on their progress: what did they achieve, what worked, what didn't, why?
Based on both the presentation and code reviews, grading could be done almost entirely by peers, though attention will be required to make sure grading remains as fair and objective as possible.
- The Godbolt compiler (shows you the assembly output by different compilers given your source code)
- Fluent C++