Distributed Thinking
The class I took this last semester, Distributed Computing from Georgia Institute of Technology, was challenging. I suspect all distributed computing courses are of similar difficulty. I learned an unexpected skill that I assume will be a powerful asset in the future—the ability to reason through complex distributed algorithms.
In the past, I would start by reasoning through problems and quickly give way to experimenting to see what worked. This method does not work well with distributed systems because what works one moment will not work the next - unless the code is correct, which will not happen through experimenting. I could experiment all day and not get consistent results (I tried).
I was forced to stop and think through all the moving parts, which included multiple servers and multiple clients, all communicating through messages that could be delayed or lost and would not be in any sensible order. Algorithms look different when I can keep the entire process in my head and mentally work through the scenarios to find, fix, and avoid bugs.
As is often the case, a class introducing a topic is truly just an introduction. I'm left with a vague idea of what is out there and how it is tested. This class showed me that there is an entire world of distributed problems that reading a couple dozen papers does not cover. However, the unrelated skills I developed may be more helpful than understanding a few distributed algorithms (or at least I think I understand them).