I’ve always been fascinated with distributed systems. It’s awesome that although we haven’t seen much in terms of increase of processing power, but instead we are moving to multi-core commodity hardware and scaling horizontally across it. When I just started professionally programming, distributed systems just meant you had a handful of programs keeping in concert with each other of sockets, each doing different pieces of the solution. It was a simpler time.
Now, you’re talking about a much more massive scale. I contribute IoT and cloud services like AWS or GCP with the rise of accessibility for making distributed programs easy. There’s also a slew of tools that are awesome and specifically designed for managing distributed systems. Kafka for your messaging, Zookeeper for service management, Spark for Data Science, the list goes on. Even my favorite language, Elixir, is built with distributed systems in mind. But there’s a catch
What I don’t like
I’ve missed the boat on a lot of these technologies. That’s okay, because I can learn most things that come my way. I normally like to play around with technologies, evaluate pros and cons, and experiment. What I don’t like about this wave of distributed architectures is the play-around factor is low. Sure, I can spin up a bunch of nodes in AWS and try it out, but I feel like these situations are too simple, too trivial, too contrived. I can’t come up with a spare-time project that meaningfully exercises these technologies to their fullest.
This feels similar to a troubling trend I’ve noticed in the software industry. I think about a pre-teen getting interested in coding and seeing this big wall in front of them. The generation before me was able to tinker around with command line only programs and know that they were building the same things they were using day to day. My generation grew up with easy to write websites. In both of these cases were noteworthy because you could build something and SHOW it to someone and it be impressive. Now, if you want to show something cool to wow your friends, I feel like you have to be building phone apps, or working with really easy-to-get started frameworks. Scratch and AppInventor are awesome, but I feel like it only takes you so far.
It seems like the gap between learning programming basics and building things you want to show your friends is widening. This is a double-edged sword. On one hand, we are continuing to build amazing tools to make hard tasks easy. But on the other hand, it seems targeted towards the mid-level to senior experience for some of these (understandably tough) tasks. This could all be wrong, as its just a perspective. But I feel like we need to make sure we are continuing to build ways for the younger among us to explore and interact with programming, to be captivated with how we once were.
I’m hoping that things like Raspberry Pi and some of these learning robotics kits fill that void to get kids interested in programming, or we do a better job teaching this new distributed knowledge in colleges, so we have the knowledge earlier on. It’s only going to become more prevalent as compute resources keep getting cheaper. As for me, I’m still searching for that next project that will let me really understand our present-day distributed computing.
Project Notes
My Alexa-Controlled Remote Control has stalled, as my sound system (and HDMI input) is not working with irrecord and irsend from LIRC. I’m going to probably work on the web API and Alexa, but I’m a bit discouraged at the moment. It’s okay, since I’ve been super busy at work.
I’m also officially a co-organizer of HSV.py. I’m excited to be a part of it, and hope we can keep it going.
Lastly, I think I’m going to submit two talks for DevSpaceConf (CFP is tomorrow). One on C++17, and one on building an internal community for the workplace. More on both as I flesh them out.