This semester I’ve been taking some great classes but one has stood out to me. It’s ITP 499, Professional C++. In the words of our TA, it’s a class that teaches us how to be “super baller at C++”. And that’s the truth. It’s an advanced C++ class that talks about the features of C++ that are unique to the language. C++ is infamous for it’s intricacies that allow you to squeeze the most out of its performance and I have learned a lot of them. For example, we learned about Template Metaprogramming, which is a Turing complete programming language inside of C++ using C++’s templates. It’s one of the strangest and more interesting concepts I’ve encountered in my programming so far and has definitely helped me understanding C++ templating, which is one of the more unique features of the language. What templates do is allows you to write functions and classes without specifying the data types, but instead telling the compiler “figure it out at compile time”. Then the compiler does it’s magic.
The homework assignments for this class have also been the best ones I have had in any class at USC so far. The first assignment was writing a file compressor using the RLE algorithm. It could compress files and directories as well as decompress them.
Our second assignment was writing a program that would perform a dictionary attack on a list of thousands of passwords using the SHA1 hashing algorithm and then brute force any passwords that weren’t broken by the dictionary attack.
Finally, I just finished an assignment where we wrote a graphical paint program using the Windows Template Library. This was my favorite assignment because it’s cool to make real applications that don’t use the command line. It was also fun working with the logic of using the graphics library and figuring out the mathematics behind the drawings as well as saving/loading png files. I even implemented an undo/redo function!
Professional C++ has definitely lived up to its name and has made me feel like a much more professional coder. I even have learned about the new features added in C++11 (memory-managed pointers!).