Kayaking and Coding, they are similar
Yes, I am talking about whitewater kayaking and code slinging. Yes, they are quite similar. What is Joel talking about you say?
As both a rookie kayaker and a rookie code slinger, you spend most of your time frustrated, hating life and wondering how the experts make it look so easy. Every now and again you get a fleeting glimpse of success. It is however, very short lived as you spend 10 times as much time following cursing, frustrated and trying to figure out what just happened.
In whitewater kayaking, most of this frustration is closely associated with learning how to and practicing enough to possess a reliable roll on whitewater. For those of you not as familiar with whitewater kayaking, the roll is the technique used to go from being upside down to right side up. The alternative is to have to let go of your paddle, yank off that neoprene skirt attaching you to the boat, and push out of the boat.
Once out of the boat you now get to enjoy attempting to figure out how to get you, your boat (now full of water), and your paddle assembled on shore so you can dump the water out of your boat, get back in, reattach the sprayskirt and continue downstream...where you likely will do the same thing all over again in less than 10 minutes. Being a rookie kayaker sucks...bad.
Learning how to code...at least you can breathe the entire time. For me, I learned how to code in Python through a combination of tutorials, help documentation, and a whole heckuva lot of trial and error liberally sprinkled with creative profanity. Thankfully I was in the Navy, so I already know how to cuss like a sailor.
Most of this time as a coding padowan is spent trying to figure out why the heck your code does not work like the tutorial video. Once it does work like the tutorial video, you try to change one thing. It breaks. You do not know why and further, you cannot even figure out how to get it back to where it was working. Being a rookie coder sucks...bad.
In both instances, persistence pays dividends. Hang on to the fleeting glimpses of success and if you can find a mentor, capture them and repay with multiples of six packs. A good mentor, in both instances, can dramatically shorten your learning curve and get you to the beginner-intermediate stage, where the fun actually begins.
The first time you actually roll back up after unintentionally being flipped upside down in whitewater, the first thing you want to do is scream and jump for joy. Typically a giddy jig while still in the boat suffices. Trust me, I have seen it quite a few times. From here the entire riparian world of moving water begins to become a playground.
Every time you get in the boat, you get to learn something new. You can go with new people on new rivers. If you really catch the bug, your idea of a vacation transforms from being lazy on the beach for seven days to power driving halfway across the country in a van with five friends and their wet rank gear and their even more rank bodies in search of whitewater. The transformation is not conscious really.
It is more like an addiction. Once hooked, there is no looking back and you never see the world the same way again. Vehicle choices are determined by boat carrying capacity and if you can sleep in it. Jobs are chosen based on flexible work hours to be able to duck out and paddle when it rains. Purchases are measured in boat units, what percentage of a new boat something costs.
Coding is really not all that different. The first time you figure out how to get something working on your own, something not in a tutorial, but something you had an idea for, put together, fought through a few confounding moments and finally got working...this is when you know you might just be onto something. Increasingly, every time you find yourself doing something two or three times, you stop and just code the stupid thing instead. After all, with the time you save through automating the task, you can go kayaking.
It is not long before every repetitive, boring and mundane task becomes an opportunity to find a time solution to through code. Increasingly you find yourself wondering if there is a way to programmatically access data from a website, if the website has an API. If the site does not have an API, you are irritated and frustrated with the site. The list goes on and on. Developers are a critical lot, but they do build some really cool stuff.
This week I started to turn the corner in learning my second programming language, JavaScript. Finally, after trying to figure out bits and pieces here and there as I had time, an idea made it from inception to at least a working model. Getting this glimpse, it felt like nailing a roll in hard whitewater for the first time. In fact, when I finally got it working my comment when committing to the GitHub repository was, "It is actually working!"
Interestingly enough the really simple web application I built helps to go kayaking. It creates a hydrograph using Flot and maps the USGS gauge location using Leaflet. True, for anybody who is a professional code slinger, this would be an afternoon diversion. For me it was the result of toying with ideas and new knowledge intermittently for about six months...and it finally works. Now I can check levels using my new web application...and go kayaking, or in my case C1.
If you are curious, here is the working version: http://knu2xs.github.io/whitewater/