Skip to content

Commit

Permalink
[lessons] Add introduction writeup
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
pniedzielski committed Jun 13, 2015
1 parent c33ec45 commit afca7c8
Showing 1 changed file with 96 additions and 0 deletions.
96 changes: 96 additions & 0 deletions lessons/01-introduction.md
Original file line number Diff line number Diff line change
@@ -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.

0 comments on commit afca7c8

Please sign in to comment.