From afca7c8363ba840663310321e109628267d77522 Mon Sep 17 00:00:00 2001 From: "Patrick M. Niedzielski" Date: Sat, 13 Jun 2015 04:01:35 +0000 Subject: [PATCH] [lessons] Add introduction writeup This introduction contains only an overview of the course, and does not go into any C++. License: CC-BY4.0 Signed-off-by: Patrick M. Niedzielski --- lessons/01-introduction.md | 96 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 lessons/01-introduction.md diff --git a/lessons/01-introduction.md b/lessons/01-introduction.md new file mode 100644 index 0000000..b4abfa7 --- /dev/null +++ b/lessons/01-introduction.md @@ -0,0 +1,96 @@ +Introduction +============ + +Goals for the Course +-------------------- +After this course, we will have + + - Learned the syntax, semantics of the C++ language + - Learned techniques and idioms used by C++ programmers + - Designed and implemented both small, generic utilities and + medium-sized software projects + - Used and implemented tools to aid in the development process + - Evaluated and implemented proposed changes to the C++ language and + standard library + +These are the concrete goals for this course, but the hope is that you +will get much more out of this course than these bullet points. In +particular, there will be a number of recurring themes that you will +be introduced to—these themes are incredibly cross-cutting and should +influence both the C++ you write, and any programming you do in the +future. You should also learn how to evaluate abstractive +capabilities in programming languages and specific abstractions in +software. + +Materials +--------- +All materials for this course will be available online for free, or +will be provided otherwise. For materials available online, these +will usually be available under a free culture license, so feel free +to use them or distribute them under the terms of those licenses. +Some other materials will be provided under Fair Use; please do not +redistribute these. + +Learning +-------- +This course is designed to be interactive, not lecture-based. This +requires an amount of work on your parts as well as mine. Please take +an active approach to your learning, and make it worth it both for +yourselves and me. I expect that each of you will progress at +different rates, which is fine. + +Projects +-------- +As we go through the course, we will be implementing two projects: a +`util` project that each of you will implement, and an individual +project that will be assigned/negotiated for each of you. These +projects are designed to introduce you to using C++ in a medium-sized +project, and to learn first-hand how the features of C++ work together +to allow you to write safe, maintainable, and extensible software. + +The `util` project will contain small, self-contained functions and +vocabulary types that you will find useful again and again. Some of +these utilities will already exist in the standard library; we will +either be implementing them exactly as specified in the Standard or +with modifications. This will give you fuller understanding how how +the abstractions may be implemented, as well as understanding their +performance characteristics. Some of the simple utilities will be +simple to implement, and some will be difficult. These utilities will +be useful in your other project. + +The individual project will be a medium-sized C++ project to be +written by each student. In this project, we will not just be +focusing on C++, but also on the engineering process and utilizing the +tools you have at your disposal effectively. I hope this will +encourage you to do this in all future projects, in C++ or not. + +Along these same lines, as the course progresses, we will be +practicing code review. *This is where you will learn the most.* +Turning in assignments is not a “fire-and-forget” process, but rather +a multi-step, interactive process. You will take part in the +evaluation of your and your peers' code, and you will be expected to +address and/or fix the comments you receive. We will also go back to +old code and refactor it or re-evaluate the same solution with new +knowledge. It is in your best interest to make your code clear and +well-documented, both for yourself and your peers. Note also that for +your individual project, your peers will not be as familiar with the +problem domain as you will become; take this into account. + +Collaboration +------------- +Software is not written in a vacuum. You are encouraged to talk to +other students in the course and look at their code. Your goal in +this course is to learn—more important than getting the the “right” +solution is understanding the solution, being able to explain it, and +being able to defend the implementation. + +Please, please, please get in touch with me and other students and +discuss your solutions, even if you feel you understand the material. + +Miscellany +---------- +Please make sure you've accepted the invitation to the GitHub +organization I've made. + +The first lesson will come tomorrow, and we will be setting up your +Linux development environment.