Who is this course intended for?

The course is aimed at relative newcomers to art, but not for complete newcomers to C++ or Unix. Chapter 6 of the art Workbook, Getting your C++ up to Speed, can be used as a means for potential students to self-determine whether they understand enough C++ for the course. Similarly, Chapter 4 of the art Workbook, Unix Prerequisites, can be used as a means for potential students to self-determine whether they understand enough Unix for the course. Anyone comfortable with most of the information discussed in these chapters will have sufficient C++ and Unix knowledge to benefit from this course.

Suggested reading

The tutorial at <> is useful. The main site also presents a reference manual for the C++ Standard Library that is very good.
Another valuable site is

  • Bjarne Stroustrup, The C++ Programming Language, 4th edition. This is the version of Stroustrup's book updated for the 2011 C++ standard.
  • Herb Sutter and Andrei Alexandrescu, C++ Coding Standards: 101 Rules, Guidelines, and Best Practices, Addison-Wesley, 2005. ISBN 0-321-11358-6.

Basic programming ideas

  1. What is the difference between an interpreted program and a compiled program?
  2. What does a compiler do? What does a linker do?

C++ prerequisites

Students for the course should be comfortable with the ideas and items presented in the following questions. The ability to give a detailed answer to every question is not required. An inability to understand what several of the questions are asking about would indicate the prospective student will not know enough to benefit from the course.

  1. What is a source file? A header? An object file? A library? An executable?
  2. Recognize comments in both // and /* */ form; the second form does not nest.
  3. How does one use std::cout or std::cerr to make printout? How does one use std::cin?
  4. What is a variable? Understand the distinction between an identifier in the code and a region of memory.
  5. Know how to draw of picture of memory.
  6. What is a subprogram (also known as a function or subroutine)?
  7. What are the basic control structures for branching and looping?
  8. What do the following comparisons mean: ==, !=, >, <, <=, >= ?
  9. What are pointers?
  10. What are references?
  11. What is the difference between a pointer and a reference?
  12. What is the difference between a stack variable and a heap variable?
  13. What is a memory leak?
  14. What does it mean to pass an argument: by value, by reference, or by pointer?
  15. What is a data type? What does the type of a variable mean?
  16. What is a struct? What is a class?
  17. Why do we write include guards in header files?
  18. What code goes into a header, and what goes into a source file?
  19. When you change a source file, what needs to be recompiled? When you change a header file, what needs to be recompiled? In each case, what needs to be relinked?
  20. What are the basic features of std::vector and std::string?
  21. What does the following code mean?
    struct Point2D {
        double x;
        double y;

Unix prerequisites

We expect students of the course to be comfortable working at a Unix command prompt. A student who can answer most of the following should be sufficiently prepared. A student who can not answer too many of these questions will struggle with the exercises, which will all make use of command-line tools.

  1. How do you tell what operating system, and what version of that operating system, your computing is running?
  2. What is a shell?
  3. What are sh, bash, csh and tcsh?
  4. How do you learn if your shell is the bash shell? If it is not, how do you start a bash shell?
  5. What is a sub-shell?
  6. What are environment variables and shell variables?
  7. How do you expand a variable?
  8. What part of a shell's environment is inherited by a sub-shell?
  9. What a shell script?
  10. What is the difference between sourcing and executing a shell script?
  11. What are stdout, stdin and stderr?
  12. How do you redirect each of stdout, stdin and stderr?
  13. What does \ do as the last character on a line?
  14. What are the different meanings of '' "" and \ for escaping special characters?
  15. What is the difference between mv and cp? What happens when you use mv across file systems?
  16. When do the following scripts get executed: .login, .profile, .bash_profile, .shrc, .cshrc, .tcshrc, .bashrc?
  17. What is a path? Recognize that the notion generalizes to MANPATH, LD_LIBRARY_PATH etc.

Additional material is in preparation.