Question: I want to get into C++ team at work. Their job is to write CGIs in C++ (mainly but not limited to). I know basic C++. Reading the list at [C++ book guide](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) question on SO, I've got three books from a friend (I actually had the first one).

1. The C++ Programming Language - Bjarne Stroustrup - for reference
2. C++ Templates The Complete Guide - David Vandevoorde / Nicolai M. Josuttis
3. Modern C++ Design - Andrei Alexandrescu

---

1. I would like to know if there are any projects or ideas you can tell me that I can implement so that I get better at it.
2. The setup I need. I have a Macbook and a personal crappy Ubuntu dev server machine. I can bootcamp to install any OS if need be.
3. Can you please also give me some suggestions on how to begin writing CGI (or any tutorial)?

Answer: 
The best way to become better at C++ is... writing C++ code. Start with a simple raytracer without any external dependencies (just write output to a PPM file).

1. I think this is an interesting enough problem and will let you get started with the language core,
2. The lack of dependencies will reduce distractions with potentially complex third-party library idioms which you can't appreciate yet and annoying things like libraries and linking. Plus, you will have less C++ quirks blow up in your face.

Build on that after you have more experience. Go back, refactor your code, add more complex features, third-party libraries (e.g. write a JPEG output, start using bits of boost, like smart pointers).

Rinse, repeat.
in my opinion if you make some small project using

* <http://www.boost.org/doc/libs/1_41_0/doc/html/thread.html>
* <http://www.boost.org/doc/libs/1_43_0/libs/spirit/phoenix/doc/html/index.html>
* <http://www.boost.org/doc/libs/1_43_0/libs/numeric/ublas/doc/index.htm>
* <http://www.boost.org/doc/libs/1_42_0/doc/html/proto.html>

you can get into the advanced C++ topics like expression templates.
the project even does not have to do anything useful, as long as you are able to put pieces together to produce some output.

if you know some C++, you can have a lot of fun pushing language to limits with phoenix alone. 

as far as ideas, CGI is likely to be heavy in mathematics, try for example writing parallel integration algorithm using expression templates.

for example, you can create syntax like this:

```
integrate(x*x + sin(x), 0, 100, threads(4));

```