Remember legos? Those were (still are?) awesome right? Well, as I’m sure I’m not the first to notice this, but learning to program with Bloc is a lot like learning to build awesome things with lego blocks. They keep things really neat and organized and you only have to solve specific problems, but as it goes on they open up possibilities and let you build whatever you like. It’s rather exhilarating, but also quite challenging.
First, you are given all kinds of pieces that you get familiar with by putting them together and pulling them apart. They even show you chunks of pre-built items you can finish assembling by just snapping a few pieces together. That’s foundation. Then you’re off to building sets made by the manufacturer, but with step by step instructions along the way. Those are projects. Finally, its all up to you: you have the bucket and the pieces, and you can build whatever you like. Capstone project time.
The result is typically greater freedom and greater joy, as you get to bring your very own idea to life. The challenge of course comes along with that freedom. Just having an idea that is worth the time to pursue in the first place can be rather difficult. Once past the ideation phase, suddenly where there was only one or a few ways to solve a pre-defined lego set, there are now multiple possibilities to build your own creation. Its curious how that choice brings difficulty but also excitement. Which is the best way? Can these pieces go together like this, or like that? That piece is usually used for this, but what if I repurposed it for that? And what about sorting through all these lego pieces in my pile, how will I find the right piece? What if I miss it? Maybe what I need all along is something I’ve never seen before anyway?
Well I find building my very own first app is somewhat like that. I’ve learned about basic concepts like primitives and objects as well as libraries and how to use them with API’s. I’ve seen chunks of code work together with methods and properties in classes communicating through perhaps NSNotificationCenter or another way. I’ve been shown step by step how to combine all these things to create a desired output and ultimately an actual real app. Now however, a running app is not enough, the problem solving is not broken up, and I have to make an idea into a reality.
It’s rather exciting but sometimes overwhelming. Trying to remember all these new concepts and then apply them in the best way when there are several possible ways is quite complex. I’m loving the challenge but certainly finding it, well, challenging. And, it is cool to see the nuanced art form that comes from good programming. While many similar apps and similar lego space ships will be built, none of them will be put together the same way. As builders, we get to imprint our own techniques to not only make our idea real, but also build it well.