The Pandemic Made Me Fall In Love with Coding Again
Tags: javascript, codenewbie, webdev
Published: 2020-08-07 02:21:29

Some of us have been baking cake or sourdough bread. Some have been dealing with loss of job, or unfortunately, personal loss. Most have been trying to cope with some levels of anxiety and fear of where we are going. In the midst of it all, I (re)-discovered programming and the web. This is my story, and where I intend to go next.

## The Beginning

The first computer program I saw was in a book. It was a BASIC program that calculated the next new and full moon. Windows 95 had just come out and I had just gotten hold of my first PC --after years of begging my parents and saving money-- and I was finally, _finally_ writing down this code line by line. The book was full of programs that, given your geographical coordinates and day and time, would calculate various astronomical phenomena. At that point, I had been fascinated by astronomy for a while, and I'd had the book for a couple of years, meticulously studying its programs line by line. But I had never gotten to run any of them. Until now! I typed it all in, prepared to execute it, and then _BAM!_ ...Error code 2, which eventually I found out meant "syntax error". Turns out there was a typo in my code. _Welcome to Programming!_ 😁

Once I finally got connected to the internet (thank you U.S Robotic 28800 kbps modem), I quickly discovered _sourceforge_ and _slashdot_ which inevitably introduced me to Linux. My Dad was always into formal education and he didn't see the point of me _"learning"_ by browsing these forums and newsgroups so he enrolled me in a couple of CompTIA certification courses. I remember our Network+ instructor talking about IPv4 addresses running out soon, but not to worry, IPv6 is right around the corner and is coming out any day now! If only he knew.

I found out a local LUG (Linux User Group), started contributing to KDE (doing little bug fixes) and was involved in a team that extended Qt3's i18n to better support RTL languages (I mostly ran some tests, our work eventually was upstreamed in Qt4). I made my own Linux distro (Shabdix, a remastered Knoppix) and gave a talk on Linux as a guest at a local university at the age of 17. I was very clear what I wanted to study at university: CS.

## My University Years, or How I Lost my Passion for Programming

I moved overseas, all by myself and not even 18, to attend a university that I thought would offer me a decent education. The Introduction to CS and Algorithms course was taught in _C_; there was a camp that was advocating moving to Java to teach the course, but no one had heard of Python there even though I had a Python book myself (Python 2.0 was new back then).

For my final graduation project, I teamed up with a friend and we made a "House Finder" website for the university's students, where landlords could upload pictures and details of their properties and students could search and filter them, find suitable ones and book to inspect them. IE6 was the most common browser at that point but IE5 was still around and we were told that we also needed to support Netscape 4. Needless to say, CSS was out of the question and the layout was done with `<table>` tags. On the backend, our languages of choice was PHP but the University's web servers (where the site was going to be hosted) ran Windows Server and IIS, and we were told we had to make our code run there (no such thing as Containers back then outside Solaris). Mambo was _the_ PHP CMS at that point but for various reasons, we ended up using plain PHP4, managing cookies and sessions all by hand. It was crude, it was buggy, it was insecure, but it worked. The website went live as I graduated in early 2006, and Wayback Machine tells me that the University ran it pretty much unchanged for a decade until it was redeveloped in 2016.

It is unfair to say that all of the education I received was bad, there certainly were a couple of good lecturers and I remember really enjoying my introduction to RDBMS courses and having fun normalising databases and writing performant SELECT queries. But most of it _was_ bad. I never got the impression that any of the people who taught me enjoyed coding. And I certainly lost my enthusiasm for this amazing, blossoming medium that was the Web, as every single calcified lecturer talked derisively about JavaScript and how it's not a _real_ programming language. It was drilled into me that I didn't want to just be a _code monkey_; if I wanted to be successful, I needed to climb up the management ladder as soon as possible.

## In the Wilderness

After graduation I took a year off and travelled around Europe. Then I moved countries again, enrolled part time in a _Master of Information Technology_ course that was designed to basically be a bridge for people with CS backgrounds to get into _"higher level"_ positions and was about to enter the jobs market when the GFC hit. In the middle of the stockmarket crash, I managed to find a job as a _Sales Engineer_ for a VOIP company. It was billed to me as a role where I'd get to work with clients to define their requirements, write the spec and work with the Engineering department to implement them. A role I thought was suited to my goal of _moving up the ladder_.

It turned out that the role was a lot more _sales_ than _engineering_, and I detested haggling with people on the phone on price or included functionality. It sucked the life out of me, I'd come home drained. After a year of struggling there, I moved to a real estate consulting company as a _Data Developer_, thinking I might be able to rekindle my earlier love of working with databases; the job turned out to be mostly writing Excel macros. When my contract was not renewed in 2010, I decided to change tact and move away from tech. I dropped out of my postgrad studies and instead trained to become a translator/interpreter.

I've worked as an interpreter for nearly a decade, a career that has been rewarding in many regards: getting to help people at times of difficulty by enabling them to navigate their way through the health system or the legal system in a foreign country. But being that intimately involved with clients also exerts a mental toll, and if I'm honest, considering that I now have a family to support, the pay is not great.

## Rediscovering an Old Love

In all these years, I had never completely severed ties with the tech world: I moved from _slashdot_ to _digg_ and then to _reddit_, I kept up my subscription to [lwn.net](https://lwn.net) and kept up with what was happening in the Linux world. I saw the rise (and fall?) of _Ruby on Rails_ and kept hearing about _react_ and all these fancy JS frameworks. I saw the battle between _git_, _bzr_ and _hg_ and how git became the one VCS to rule them all. I saw the Linux world _reluctantly_ swallow _systemd_ and the rise of, first _xen_, then _kvm_, then _docker_ and now _kubernetes_. I watched these all, with interest, from afar.

When the Pandemic hit in April and we went into lockdown, a lot of people suddenly realised that they needed to move their businesses online. Our local toy library, which lends toys to neighbourhood children, needed a website where they could catalogue their toy collection and members could book toys and have them delivered to their home. Our local cafe decided to pivot to become a grocery delivery service and needed something more manageable than taking orders manually on Facebook messenger. These were all my local small businesses and not-for-profits, and I wanted them to survive to see the other side of the pandemic. I needed to step in and help, and that meant coding.

At this point my coding skills were very rusty (to put it mildly), and so despite all my misgivings, I went to WordPress as my solution. Eventually after a lot of trial and error, it (kind of) worked. I managed to put together a couple of websites using various cobbled-together plugins and a little bit of hacking the theme file (turns out PHP 7 is quite different, and much nicer than PHP 4). The results were hack-ish at best, but it lit a fire inside me. I now wanted to learn to do this properly. I wanted to make website that were accessible, that get perfect lighthouse scores, that score well in SEO, that are fast and performant. WordPress was not the solution, so I knew I needed to re-learn web development.

Turns out, web development is very different in 2020 than it was in 2005!

## Learning Web Development in 2020

Around mid 2020, with most of my interpreting work having dried up, I decided to use the time (and my savings) to explore my old passions and teach myself modern web programming, or frontend development as it's now called.

If I'm honest, I've basically had to start from scratch. Semantic HTML, CSS Flexbox and Grid, babel, webpack, node.js and npm modules... none of these existed in 2005. Yes I knew how to write a `for` loop and what HTTP status codes meant, but that's pretty much the extent to which my previous development knowledge carried over to the modern world. To my surprise, I've discovered that JS is not that puny hack-ish language that everyone made fun of (perhaps it never was?). It's now fast, it can accomodate any paradigm of coding, from OOP to Functional Programming, and it has an amazing set of tooling and libraries built around it. I've barely scratched the surface, but I've fallen head over heels in love with JS in 2020 (and the C programmer in me, with an affinity for _types_, is very much looking forward to learning TypeScript).

I first went through a self-taught, self-paced curriculum at [The Odin Project](https://www.theodinproject.com). I'm about a third of the way through this course, which I've found to be great if slightly dated (most of the references are from around 2014 or so, and it's crazy how quickly the web changes). This led me to discover [FreeCodeCamp](https://www.freecodecamp.org). At the moment I've completed their Responsive Web Design and JS Algorithms and Data Structures courses. Currently I'm enrolled at [Frondend Masters](https://frontendmasters.com) where I've completed their Beginner courses and have just started the JavaScript: The Hard Parts, V2 course by Will Sentance. I'm also doing the JavaScript exercises at [Exercism](https://exercism.io).

## Where I'm going from here

I have no set idea of where this journey will lead me. Right now I'm really just enjoying coding and learning frontend technologies, so I've decided to dedicate the rest of 2020 to learning as much as I can, and building a couple of sample projects. When the year is out, and hopefully the pandemic is under control, I will see whether I want to continue this in some fashion or whether I'll go back to interpreting and translating.

This blog post has turned out to be a lot longer than I initially intended, but I've heard a lot of people extolling the virtues of learning in public, so from here on, I intend to let my naturally private guard down and let the world in on my journey. This post should be the longest that will be written here for a _very_ long time as I intend the rest of this blog to be mostly code samples and describing what I have learnt during the day/week. This post can safely be ignored, but if anyone in the future is curious to come and see where I started, hopefully this sets the scene.