This idea was germinated from a talk with my wife about why I enjoyed playing the Magic: the Gathering card game. I explained that Magic was a lot like programming for me. Each card follows (or sometimes breaks) certain rules within a larger set of systems. These systems generally interlock like gears in a machine to create the game’s overall flow. Many cards contain basic logic (if this happens, then as a result that happens) and some decks are designed around having these logic effects cascade from one card to the next.
When I talk about programming, I’m not really talking about building the next Facebook or Flappy Bird. More that learning to be mindful and aware of the world and systems around you can be extremely helpful, especially when creating things.
A recent example of this is from a music project I was working on. I had a key change in the middle of the song, but I wasn’t happy with the song’s order. I knew that changing the song’s order would also change the listener’s perception of the root tone, meaning all my key changes will sound awful. I was able to realize all this before making any changes and I knew how to fix the problem before it even arose.
This flow of logic is very similar to programming. Knowing how a set of rules works (in this case, music theory and listener expectations), and being able to predict and overcome weak points in the system help greatly when working on a complex project.
Another example can be made for doing visual arts. Sometimes, you have all the elements of an image and the overall feel, but things just don’t fit together in a way that looks good. It is helpful to switch on the logical side of your brain and figure out the systems in play (rule of thirds? symmetry and balance? harmony and contrast?).
Again, this can relate to having certain things you want to accomplish in a program, but they are at odds with each other. Say you want to make a text box display something the user types, but you don’t know how much text exactly will be in there. If there is too much text, will it wrap? Will it just cut off? How will it interact with other elements in the application’s interface? One simple change can cascade over and create other problems with seemingly unrelated systems.
The best way to describe this would be having an holistic awareness. The ability to maintain all these systems in your head and understand how changing one thing would affect other things. I’ve found that programming and development deals very closely to being aware of the entire system rather than just small pieces.
So where can you go to learn? I’ve heard good things about Codecademy (this isn’t a sponsored link, it’s just what I’ve heard). I think even learning to make a basic web page is a great example of this. You’re working with code to create something visual. Plus, it is empowering and fun to write something in a text editor and have it display something that looks entirely different in a web browser.
Even if you don’t invent the next Twitter, learning to program helps improve the fundamental way you think about and overcome problems. Having the ability to understand the deeper layer of systems that you face every day (at school, at your job, at home) might offer new windows of opportunity to improve, fix, or optimize what you do in your day to day life.