An ancient, out-of-shape dinosaur who's been hibernating under a rock the past seven years suddenly awakens from his peaceful slumber and wanders back out into the coding world. Leaving the comfortable confines of his cozy cave, he's both bewildered and fascinated with the new state of the universe he now suddenly finds himself in. Thus, once a week, over the next year, he vows to aimlessly roam the internet and submit PRs to random repositories all around the world in order to reacclimate to modern-day, civil society.
Along the way, I'll blog about my findings and observations here.
This is the Tale of the Open-Source Avenger.
In the 1999 film, Blast from the Past, there's a scene when Brendan Fraser first emerges from a bomb shelter that he's been living in for thirty years. There's some backstory about the Cold War or whatnot and Fraser's been underground with his family for three decades hiding from nuclear annihilation, but as a member of the 30-something gang now, Fraser at last climbs out from the blast shelter and sees the blue sky and modern civilization for the first time in his life. To say the least, he's utterly amazed.
Though not quite as dramatic, that was basically me earlier this year re-entering the webdev world. For some messy health-related reasons I won't bore you with here, I'd basically taken a very long, forced hiatus from the coding world starting the spring of 2014. Before that, I'd studied Computer Science in school and graduated in 2008 (I'm 35. Dinosaur-aged!), got a job as a software dev immediately after, and had worked mostly with thick-client software-- something called .NET and WPF for the frontend, and Java for the backend. The tools and tech we used back in those prehistoric times was stuff like Tortoise SVN, Eclipse, and XAML; likely terms that mean gibberish to most you currently reading this.
Anyway, when I left the workforce in 2014, my personal experience of web development was basically jQuery, Tomcat, and .JSP. In the intervening time since, in my more cogent moments, I’d tried several times to "update my skills to get back into the game" but those attempts always fizzled and never directly went anywhere. Sometime in 2018, I remember stumbling over Michael Hartl's ebook on Ruby on Rails/Active Record/Heroku (entirely online and free at the time!) and did that. (November 2018 was also the first time I discovered GitHub at the ripe age of 32!) In 2019 I learned Django on Python and Postgres. And in 2020, I spent two months learning node.js, Express, and SSE. In every case I'd successfully build a personal hobby project with whatever I was learning. But while it'd feel good acquiring the new knowledge, each achievement also always felt hollow and piecemeal afterwards. 😢 Was I doing things correctly? Is this the most optimal way to do things? Am I missing anything? Also, on the frontend, I was basically still using a lot of templating to build my sites. No components, no frameworks/libraries, nothing. Just CSS and jQuery or vanilla JS.
So. Long story short, this year, starting in 2021, I finally decided to properly get back into the webdev saddle. That is-- to use actual 2021 technologies to build a website.
Whoo boy, how things have changed. (1)
In January and February, I started learning Firebase/Firestore, webpack, TypeScript, and ESLint. And then in March I gave in and (finally) decided to learn React.
So like legions of others, I built Tic-Tac-Toe and followed some tutorials online. But something was still missing-- the same feeling of apprehension and doubt that'd previously plagued me still remained. Building Tic-Tac-Toe and completing some online exercises isn't software development. It's just random coding. It actually took me an embarrassingly long-time to realize something utterly basic:
Learning to write good code means READING good code. Wishing to become a good programmer working solely alone is like an aspiring novelist wanting to go pro without having ever read any books. Or wanting to become a chef without ever having eaten food. Or wanting to become an architect without ever having stepped into a building.
When you're trying to play catch-up, it can be frustrating because, initially, there just seems like an overwhelming crush of material. (And I already consider myself lucky because I already had experience in coding and had actually studied it in school.) But what I needed now to get a job was experience. But normally, experience comes from having a job. (Having actually had a coding job before, I assure you: Most of the learning happened on the job.) So this is problematic.
But luckily, we live in 2021! There's this thing called "open-source!" So here's a shameful confession: For years now, I'd treated GitHub as basically a glorified personal backup server. Not proud of it, but that's the truth. Never cloned anyone else's repos, never submitted any PRs, nothing. My entire working knowledge of git was
push. I was just a man on an island, mooching from all of the free stuff online like a great big vampire leech.
It was time to try contributing to something not my own.
So what follows is my journey into the world of open source. My goal is to roam the internet and pick a random project each week that looks interesting, fork/clone/branch it, complete one of its outstanding issues, and then submit a PR for my contribution, which is hopefully accepted. And along the way, I figured I'd blog about my observations and findings. Since March, I've done three projects so far and it's been a blast! 😄
Contributing to open-source has been one of the most fulfilling forays I've ever done as a software developer. Many of us remember the visceral thrill of seeing our first "Hello World" pop up on screen. Well, there's a next evolution of that: Seeing your first PR accepted.
If you're a newbie, what might surprise you most, is that when you give, you are going to unexpectedly get orders of magnitude more in return. In just the three projects I've submitted PRs to so far, I've learned --entirely incidentally without ever having the intention-- NextJS and Vercel; flake8 linting and Black; Gatsby, GraphQL, and Netlify.
This is just my humble opinion, but I feel that being a good software developer means more than just being able to solve clever leetcode exercises or completing individual weekend-warrior side-projects. It means being able to competently read and modify existing code not your own. It means being able to paradrop into any foreign land at a moment's notice, assess the terrain, reason through the design, understand the data flow, form a battle plan to accomplish some mission, and then not only get the job done, but also deliver the goods, neatly wrapped, explained, and documented. And along the way, if/when there are setbacks --unexpected build/runtime errors, behaviors, etc-- being a good developer means being able to troubleshoot and Google your way out of any situation, under any circumstance. Like the Marines say: "Adapt, improvise, overcome."
Additionally, being a good dev means communicating well. Ensuring you understand the nature of the issue's task at hand and properly detailing your proposed fix to the project maintainer. Getting their approval and incorporating any feedback. And writing good documentation.
So if you're interested, feel free to tag along on this journey! Personally, I have a selfish wish that humanity one day grows more into a civilization where we're passively consuming less (less Netflix! Less YouTube! (2) Less Fortnite!); and actively producing more (more PRs! More blogging! More collaborating and creating!)-- but I understand that people have actual lives. Families, spouses, kids other hobbies, the outdoors, etc. So even if you never plan to submit a PR, you can still follow along vicariously. (And who knows? Maybe one day!) But until that day does come, feel free to join me in being both constantly bewildered and amazed at what human beings in 2021 have accomplished the entire world over. We're a beautiful species living in beautiful times! 🙂
1. By God, if Bill Gates had had access to the "developer ergonomics", dev tooling, and "on-demand-planetary-scale-infrastructure" that we have today, he would've not only colonized Mars by now, but would’ve also solved world hunger as well as cured cancer. The new generation, "the kids" nowadays, have it SO GOOD. Oh my God, you kids have no idea. Absolutely none. The unmitigated pain, misery, and abject suffering that us dinosaurs had to grind our teeth on to accomplish not even a fraction of what any tech savvy tween can do nowadays with just few simple clicks. Configuring MySQL CGI modules in some godforsaken php.ini file just to get a database to locally work. Or just installing everything to PATH in the Before Times before package managers. The Young Blood, bless your hearts, simply have no idea.