Well, it’s been a long time since I last wrote a post. I knew this would happen, where I would take forever to write, and then life would get in the way (Not that that’s a bad thing). But I’m back, and I have some news.
Since I last wrote, I was able to make a successful Warlight bot in Elixir. I really liked Elixir (it might be my favorite language, but I use Python so much more that it will be tough).
Then at work, we decided to write some AI for boardgames we played, and I had a chance to do more in Elixir. I got to play around with metaprogramming (templated out a game engine), which was one of my goals. Growing up with C++ macros and hating them, I was hesitant, but once I understood that they were AST macros, and not preprocessor text search and replace, something clicked, and I appreciated them.
I have no idea if how I wrote the code was good or not, but I got to learn something, and that’s what matters to me. It matters a lot.
When I was first learning to program, I heard the advice from Pragmatic Programmers, that you should learn a new language once a year. “What silly advice” I thought at the time, “Most of these are the same, and I’m not going to use them, what good is it?” However, as I matured, I realized the end goal wasn’t necessarily to know a new language, but to learn, and expand one’s mind.
I recently got back from a family vacation, visiting my parents. When we get together, my dad, brother and I participate in a family Iron Chef challenge. The rest of the family comes up with a secret ingredient, and gives the chefs a day to plan, prepare, and cook dishes using that ingredient. We’re judged on taste, creativity, use of the ingredient, and plating. We have a blast, as it ends up with a co-op-etition, with us alternating cooking our dish and helping others. None of us are professional chefs, although we do all love cooking.
While we are trying to make the best dish, I like going in with the explicit goal of learning something new. Through the Iron Chefs we’ve done, I’ve learned how to do the following: make cheese (Milk Challenge), work with Pork Belly (Apple challenge) make a mole (Cinnamon Challenge), make a fruit soup (Something blue challenge), and make a ganache (Chocolate challenge). Each time, I’ve learned something new, and I’ve come away a better cook.
I also participate in Hackathons at work. These are one day every two or three months where you can block off time and just code an idea you came up with. We’ve seen awesome things come out of it, things ranging from customer functionality to internal improvements that makes everyone’s lives easier. Every hackathon, I try to make something that is needed for the company, but even more important, I try to learn something new each time. Coffeescript, React, Mongo, Scala, Lua, BDD, and so much more.
I came to realize, that I love Hackathons and Iron Chef challenges for the same reason. I have a chance to push myself, to go out and learn something. And I’ve found that as I keep learning, that’s what makes me a better chef/engineer/whatever. Just like learning striker in soccer has made me a better goalkeeper, or teaching myself the violin has made me a better guitar player, when I learn new languages or technologies or cooking techniques, I improve in more than just technique; I come to understand the entire domain so much better. Learning Python made me a better C++ programmer. And it took me really learning it, really understanding what makes code Pythonic, to get it. Learning Elixir and functional programmer made me a better Python programmer. Learning how to work with different types of food and different tools opens doors for me as a cook.
What is great about this, is that once you get in the mindset of learning, the world opens up. Nothing seems impossible. You start seeing more people shut themselves out of working on great things, because they aren’t learning anymore. They’ve given up the confidence to stand up and say, “It doesn’t matter that I don’t know this. I know that I can learn it and do a good job on it.” And once you give up on that mantra, you start to atrophy.
I look forward to what I learn next. My next board game bot will be written in Rust (to give me a better understanding of safe memory interactions and get introduced to the ownership model that Rust is known for.) After that, who knows, I might try Haskell, F# or Elm, or something completely new. All I know, is that I’m excited to see what I will learn, and even more, what I will become after learning it.