Learning to Learn Again

Taking comfort in the familiar can be especially alluring in the fast-paced programming landscape. It took me a long while to recognise how important (crucial, even) a discipline it is to practice continued learning and further technical understanding and practical experience consistently.

I didn’t fully appreciate this until I was 3-4 years into my career as a developer. My comfort in repeatedly delivering WordPress and LAMP solutions to satisfied clients allowed my hunger for learning to stagnate.

Only once I began freelancing in earnest I recognised how rapidly commercial development demands evolve. WordPress, Drupal and Joomla were in decline as the rise in demand for JavaScript frameworks steadily inclined.

I was surprised to see how quickly my chosen niche of frontend development had evolved to embrace React (and later Vue) libraries, while maturing frameworks like Meteor and Angular encouraged new ways to build and scale. It was obvious producing responsive HTML and CSS templates wasn’t going to cut it any more and that it was time to roll up my sleeves again.

In early 2017 I adopted React as my framework of choice, as residual community frustration at the Angular 2 rewrite remained, while Vue hadn’t yet achieved the same maturity. Little did I know just what frontend development had evolved into.

“Learning is not attained by chance. It must be sought for with ardor and attended with diligence.”

Abigail Adams

First, I had to get up to speed with the Node.js ecosystem, and how to use npm for dependency management. Then I had to come to terms that I really didn’t know JavaScript as well as I should, and that I had a whole new standard to catch up with (ECMAScript 2015), overwriting years of jQuery muscle memory.

While I appreciated I was not building atop of the strongest foundations, I had a clear ambition and persisted through the initial growing pains.

At the time of learning, Create React App was considered bloated and excessive. Accepting this, I spent many a frustrated hour struggling to interpret, author and extend webpack config files. Seemingly simple requirements like getting SVG images to load or leveraging Sass syntax cost me hours upon hours.

Basic projects bloated with tens of thousands of dependency files. Every package revealed a new API that required substantial studying (or mindless trial-and-error). React Router v4 stripped legacy StackOverflow questions of any relevance. State management was an alien concept.

At a granular level, simple singular tasks could generate incomprehensible blockages, garbles of new vocabulary and rabbit holes of GitHub issues. Top level foundation assumptions such as separation of concerns were challenged as HTML is written in JS with CSS applied inline.

It even took me an embarrassingly long time to understand that comments needed to be wrapped in curly braces to take effect…

Education is not the filling of a pail, but the lighting of a fire.

W.B. Yeats

Looking back, the challenges were considerable, given my lack of core understanding and naive, unstructured approach to the prospect. Disciplines once familiar became estranged, forcing much unlearning and relearning.

Although under-appreciated at the time, I gained lasting value from that period. I strengthening many core development soft-skills, including interpreting official documentation, tracking community issues, rapidly prototyping prospective solutions and properly managing version control.

Reflecting on this portion of my journey affords me a new appreciate the sum of all those individual challenges, struggles and minor victories.

πάντα χωρεῖ καὶ οὐδὲν μένει


Today I find myself embracing the new and unfamiliar with much proactive enthusiasm. The JS ecosystem continues to evolve rapidly and I try to engage with interesting new tools, paradigms and best practices. A core reason of starting this blog is to document my ongoing learning and capture lessons that would otherwise go unrecorded (or stagnate in an almost-finished state).