Holes in Your Zapatos

December 09, 2015

Holes in Your Zapatos

Had to take a break for Thanksgiving. Not just for the carbohydrate coma to fade away, but to catch up with my Bloc internship. As much as I like to believe that I am the Mule of programming, it turns out that I got mired in Bloc quicksand late in the initial Foundation exercises, something Hari Seldon himself could not have foreseen.

Dont Like My Lyrics, You Can Press Fast Forward

Having breezed through many initial exercises, I got cocky. I had a decent handle on Ruby. I was doing respectably well over at CodeWars. And I was - if I am honest - spending 25-30 hours a week on a program that was advertised as taking 40.

Understand the Intelligence That Jay-Z Has

My instinct was to assume that it was innate talent, but I think what was actually driving this was that initial store of exposure to programming. I was essentially burning through my savings and keeping a leisurely pace. What I would do in retrospect is commit to 40-50 hours a week from the start and race through the initial stuff if it was easy which allows for a reallocation of time to the harder material that was new or newer to me.

As it was, I assumed I was God's gift to Rails, and traipsed along until we got to the Bloccit project. Now suddenly the exercises that I could previously knock out 3 in a day were taking full days to complete. I hadn't budgeted the time, and worse, I didn't have the mental fortitude at that point once I started slipping behind. I was having irrational flare-ups, thinking about the unfairness of the program, thinking some masochist was behind these assignments that were impossible to finish in the time allotted.

Now I still believe that whoever designed the assignments is a masochist. They are as hard as assignments I recall from college, where you not only apply a concept but are guaranteed to have 2-3 twists in each that will require you to most likely bang your head into the wall figuring out for a bit. I would bet decent money that a lot of people drop the program in the late Foundation checkpoints.

Frustrating as these assignments can be, the rollercoaster of learning to code has a high for every low, and I definitely felt like a boss when I finished them. I could tell I was getting into exciting, sophisticated (for a layman) territory when my wife would pop by to see what I was doing and stopped being able to see what I was even doing. Over a couple months my monitor went from cute little ruby code in an emulator to three terminal split windows open (iTerm > Terminal all day), all barfing up error logs and rails server commands, with Atom front and center, plus 15 tabs open for Rails Guides and Stack Overflow, and my Bloccit project open in a separate browser.

I Got 99 Problems

All that is to say that Bloc got hard, fast, and I hadn't girded myself for the challenge. So as Thanksgiving came around, and I was nearly a week behind pace, and was growing increasingly frustrated with the various assignments, and my family wondered if they would ever see me again, I put the program on pause.

It felt like a failure. I felt like I was letting down my mentor. I felt like a failure. I was embarrassed about how arrogant I was and how far I had fallen. I mentioned all this to my mentor and he laughed and reminded me that I had been working hard, was getting all the concepts, and could use a break. I was on the 40/hr a week pace so basically was taking the program at full throttle, and he has had other students do the same pausing of the program.

So I took two weeks off. By off, I mean, I spent two weeks catching up, but at a more leisurely pace. I succeeded, unfroze my program yesterday, and also got to see friends and family again for a minute. And now it is time to dive back into the fray.

Bounce on the Devil

I learned a ton about myself over this say last 4 weeks.

First off, I appreciate the highs of programming. That rush of solving a tough problem - one I will laugh at in a year once I am more proficient - is intensely rewarding and motivating.

Second, I learned two crucial things about getting stuck. I learned to get up from the machine after 30 minutes. The graph of (probability of solving) on the y-axis over time on the x-axis drops like a kamikaze's altitude at about 30 minutes. By then I am frazzled and non-helpful thoughts are creeping in. Get up. Take a tiny walk. Work on something else. Take a 5 minute break. Try to nail that one legged transition from figure 4 to Warrior 3 on your left leg that has been the bane of your yoga existence.

Once up from the machine, go back to your basic training. Read the error messages. RTFM. Methodically, ruthlessly, comment your code back to a working state and then add the ingredients back one by one. In networking and hardware the first check is always, "Is it plugged in?" Check the dumb stuff first - typos. Consistent variable names. Scope.

Going 55 in a 54

My initial impression that Rails is a Rube Goldberg machine has not persisted. I enjoy working with it in a way that I did not with other frameworks and languages. However, at times, it is so concise that the syntax borders on pithy. I think my greatest challenge is learning how to see what is going on without just 'trusting the force' and learning how to see under the hood a bit.

A newer challenge remains Test Driven Development. The challenge does not lie in my motivation - I have bought into the concept fully. When I know what I am doing in coding the tests, it vastly increases my accuracy. When I don't know what I am doing in making the tests, I have this terrible frustration, knowing that the bug is in the test and not the code. It feels like an awful waste of time and energy to get the test right when the code is fine and just isn't passing this bureaucratic nonsense I have imposed.

Of course, it isn't bureaucratic nonsense, and the only way to get better is to keep at it. But in the meantime, the learning curve is steep and the gratification for getting a test right is lower than the relatively tangible, external-facing benefit of a working website gaining a new feature or capability.