forked from nskicpp/writeups
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
1 parent
c33ec45
commit afca7c8
Showing
1 changed file
with
96 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |