app dev

Certainty is a fickle friend

Later on my life, when I look back on this time of starting my job, I imagine I’ll remember a long period of mental haze.  Every day, the rug gets pulled out from under me in a new way, forcing me to adapt my working style to a new variable.  When I think I’ve found the last thing that could break, I inevitably discover a new ‘weakest link’, thus blowing all my earlier assumptions out of the water.

Before I got into software, I worked as a program manager at a mentoring program.  Part of my job was training team members into their roles.  Most of my team members were doing their first job out of college, so I got to play expert, not only teaching them best practices about mentorship, but also how to organize and schedule themselves.  I knew things, and I relished the opportunity to share them with colleagues.  I was a super-hero of information synthesis!

Those days are gone.  Now I only fantasize about knowing things as I dive headfirst into a bottomless pit of bug-wrangling uncertainty.

First it was string disappointment.  Of all of the JavaScript data types, I felt I could most depend on strings, because they were just chstick-man-with-capearacters between quotes.  Then I started writing keyboard shortcuts for a web app, and the browser threw an error because “a” != “a”.  WTF?!!  I had no idea where to go from there, until my colleague suggested that i might be dealing with unloggable unicode characters, wicked invisible entities that live to screw your validations over.  I left that experience feeling that my trust in strings had been misplaced indeed.

Next, my libraries let me down.  Although I painstakingly followed the exact directions of a d3 library, nothing happened on the canvas.  No error thrown either.  Just a whole lot of nothing.  I debugged, tried variations, checked the github issues to see if anyone else had this problem.  Then finally, on inspecting an object, I found that one of the methods in the library’s initialize instructions didn’t actually exist.  Library FAIL.

Finally, Chrome let me down.  After I pushed a big commit, I felt like an engineering superheo until my colleagues informed me that the commit had broken their apps in Chrome.  There was  no small amount of embarrassment on my part as I perused the code, trying to figure out how the changes I made could possibly be causing these errors.

As it turns out, Chrome had saved a JSON draft in local storage that was not compatible with my changes.  A quick localStorage.clear() was all we needed.  (Shouldn’t local storage be cleared automatically when one pulls from a github repo?)  From a new JavaScripter’s perspective, it seems that no good deed goes unpunished: tiny half-assed changes have tiny repercussions, but hard work results in big changes that lead to big, embarrassing errors.

But I’ve got to keep trucking.  I may not be a superhero of information-synthesis anymore, but I have Tom-Haverford-inspired hopes of donning a new cape: the superhero of information-FAILURE-synthesis.  Knowing why something is failing is the first step toward better understanding, which beats blind certainty by a long shot.

Fail early, fail often, fail purposefully: that’s the developer’s credo.

Advertisements

New Year, Fresh Start

It’s a new year, and I’m beginning my first full-time development job.  Today I pushed my first code to productgirl jumpingion.  I could not be more thrilled!

2014 was a big year.  I quit my job, went back to school at Fullstack Academy, learned how to do big-kid javascript, built 13 full-stack applications, and learned how to work with many emerging technologies, from d3 to tessel to CSS animations.

As I approach my new job, I want to make sure that 2015 is an even bigger year.  My current goal is not to get broader by learning a bunch of new languages, but instead to solidify my understanding of what I’m doing now — front-end JavaScript, CSS3, HTML5, and their associated libraries.  I propose the following set of goals:

General

Increase proficiency with git, completing all 50 levels on githug

Continue to push at least 2 commits to github per week (personal projects)

Become a regular contributor to one open-source repo

Present at 2 Meetups or conferences

JavaScript

Create a new d3 web app based on a current news event or issue

Read EcmaScript 6 — all of it

Learn reactJS

Learn coffeescript (necessary for my current role)

Learn to work with a templating language other than swig, such as handlebarsJS

Solidify knowledge of promises and use them in a project

Be able to implement all JavaScript array methods without having to look up documentation online

Learn how to write and run effective unit, integration, and e2e tests in jasmine and mocha

Fun

Play around with 6 emerging technologies or libraries, including CSS animations, polymer, handlebars

Test out and review 10 of the hottest mobile apps this year

Create a personal project using PhotoShop and Illustrator, so that I’m able to use basic features effectively in both programs (necessary for job, useful in the future)

______

I’ve included several public-facing goals that are not directly related to learning, such as presenting at meetups and contributing regularly to an open source project.  These help me stay accountable to my learning by creating pressure to be able to explain what I’m learning, subjecting my understanding to scrutiny.

The fun goals in the list help me stay up on the latest technologies outside my specific realm, but they’re all things that I’d enjoy doing anyway.

What did you set out to accomplish in your first year?