Now, this is a story all about how

I learned C++ - I know it's upside down.

And I'd like to take a minute

Just sit right there

I'll tell you how Dr. Downing taught C++.

C++ ain't a great language.

I'll give it that. But I wrote a few thousand lines of it this semester, around 3 to be exact. In the past I've written well over ten kilolines in that unfortunate language.

So I came to this class with a working knowledge of C++. This class taught me the details. So that's one thing.

It's not worth taking a class to learn a language, though. C++ compilers are freely available, and any programmer worth his or her weight in salt [1] can pick up how to use the STL, references, templated classes, and iterators.

And anyway, anything you learn today will be either obsoleted by industry or forgotten by you by the time you get a stable job.

This class also makes reference to unit tests, code coverage tests, and CI. These are all things you can pick up on the job or on your own time. But this is similar to above - not worth taking the whole semester class for a single lecture about these concepts. Sneak in the back of the classroom, the times and rooms are listed in UT's course schedule.

But what this class taught me were grownup words, like static binding or dynamic binding or replacement overriding or reflection.

So many fancy words!

But now I can apply what I learned here to my favorite language, Go! (not to be confused with the Go! language. That was a syntactic exclamation point, not part of the name.)

I digress.

If you do take this class, know a little bit about C++. Know how to write a basic program using classes and the STL. Have experience using a source control system (like git or hg, not like folders named project, project1, project2, project_old, etc.), or else you'll learn it all wrong in this class (you commit source files, not compiled results, don't let anyone tell you otherwise).

That said, this class is pretty much a C++-specific class. If you really want to learn object-oriented-programming theory, take a different class. But it is possible to take this class and learn more than C++ workarounds.

Dr. Downing asked if I thought the class was worth the time. I think so. I'm not convinced it would be worth the advertised 24 hours per week, though. I probably spent about 3 hours a week on lectures and 6 hours a week on the projects, on average. Maybe another 2-3 hours a week writing these blog posts, but that's probably more time than anyone else spends on their blog posts (though some of them are certainly very well written).

Disclaimer: I tend to work on the fast side of the average, so your results may vary.

This class is absolutely worth it if you put in the time. What do I mean? I dunno. If you sleep through lectures and don't spend every waking moment thinking about the ramifications of what Professor said about how C++ implements dynamic binding, then you're missing something crucial. Time and time again I have heard that low-level stuff isn't worth knowing if you deal with the high-level stuff. But if you don't understand how C++ keeps a field in the class which points to a vtable, how will you understand dynamic binding? If you don't understand that, what hope is there for when things go terribly wrong?

This class is worth your time, but it conceals that very well. The projects are very practical, objective, and result-based. The tests have you write code to perform relatively mundane tasks.

A passing observer may say, by golly! This is just a language class! How useless!

A student who puts a little time into the class beyond the strict base requirements may say, by golly! This is a concepts class!

Po-TAY-to. To-MAH-to.

If you prefer a graphical interpretation of the class, this is a graph of the number of words in my various blog posts over time, categorized by how I felt:

Helpful screenshot

Tip of the Week: Don't drink and drive.

[1] Under a penny, at $50 per ton. I guess the phrase comes from ancient times, when salt was very expensive: I once met a professor who studied ancient economy through salt prices in ancient Greece.

This is an image of me doing what I do when I'm not at a computer.