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 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.
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.
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.
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 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!
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 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.