Loading…

Ben Popper is the Worst Coder In The World - by Ben Popper

A black belt is just a white belt who never quits. How bad could I possibly be at this stuff?

Article hero image

I’ve spent the better part of the last decade immersed in the world of technology. I could give a lengthy lecture on the history of LIDAR and the future of self-driving cars. I could explain what’s so fascinating about artificial intelligence that can beat humans in poker and why we shouldn’t be afraid of robot overlords just yet. I’ve got a cocktail party’s worth of witty things to say about the potential for brain-computer interfaces and our very cybernetic future. Despite all my years as a journalist covering technology, however, the closest I got to working on the code that makes all this amazing innovation possible was putzing around with some HTML when trying to tweak the layout on an article I was writing. Since joining Stack Overflow, I’ve decided it’s time for that to change. We have a great program here where any employee can sign up for coding lessons facilitated by our engineering staff. If I’m going to try to learn a challenging new skill in my mid-30s, I want to be sure that all my embarrassing mistakes are broadcast to as wide an audience as possible.

Week 1 - FreeCodeCamp - Basic HTML and CSS

I breezed through the first half dozen lessons, but I didn’t feel any sense of pride about it. Changing the color or size of a font? Adding images and links? This is stuff I have been doing for years inside various content management systems. Sure, I’m writing a few commands to make it happen instead of pushing a few buttons in a GUI. But this doesn’t feel like actual capital C "CODING!" I’m not gonna build anything useful here that I couldn’t whip up in a Google Doc. But then I got to the buttons. Just that tiny sprinkle of interactivity made it all feel very different. A few buttons, a few images, and you could build yourself a Facemash. A little viral traction, and I could raise my first round of VC funding. Right? RIGHT? A text field and a submit button. Strangers would be arriving from every corner of the internet to share their deepest desires with me soon. My celebratory mood passed quickly. Sure, I could copy and paste some code, tweak a few nouns, and have a button pop up. But what if I needed to setup my own server to host the website? What if I actually wanted store data from users somewhere and not have it stolen? Or run analysis on that data to understand what my users loved or hated about the product I had built? Stepping up to the first ridge on this mountain only made it clear how far I was from the summit. I thought back to my favorite aphorism from jiu jitsu training: A black belt is a white belt who never quits. I’ve woken up with my head in a stranger’s lap, covered in drool, unsure exactly what room I’m in or what day it is. If I can get choked unconscious and come back to training the next day, how bad could this coding stuff be? That night I went home and tried to continue the lessons, but I didn’t have a laptop. I had an iPad with a bluetooth keyboard, a recipe for true misery. FreeCodeCamp should have a large, prominent warning reminding folks that trying to code on an iPad is a dumb idea. But at the moment, I was determined not to quit. My job was to declare the doctype. Which means the “document type.” They’re always concatenating things in codeland. This required a <...!” I dutifully entered these characters. I ran the code and failed the test. I tried it again. I tried it six different ways. I tried to copy and paste the sample a few lines higher in my IDE. Nothing worked. I spent half an hour stuck in this loop. Eventually, I did what any human being does in a time of crisis and threw myself at the mercy of a higher power. I googled the question. There, nestled in the featured snippets, was an answer from Stack Overflow. It said I should use <...! I copied the characters from this new location. I pasted them. It worked. 15 minutes later, I started laughing like a madman. My wife gave me a quizzical look. I understood now. I could become one of them. It took me about another week to realize the difference was that my iPad automatically rendered curly quotes, while the code editor required straight quotation marks in order to give me a passing grade on my test. Over the next few days, as I continued through the HTML and CSS lesson, I kept coming back to that nagging insecurity. I didn’t want to be some pixel pusher moving boxes around a webpage with nouns and adjectives. Where was the math and the algorithms, functions and for-loops? How long until I could leave the sandbox and play with the big kid toys?

I snuck a peek into the JavaScript section, which comes after CSS in the curriculum. There was the good stuff. Strings and things that would rewire my brain up nicely. The next day I was working to finalize The Overflow newsletter. It was a big project that we had been working on behind the scenes for months and I wanted it to be great. The only problem was, at the last minute, my colleague who was supposed to move everything from my Google Doc into the HTML template wasn’t available to help. And so I had to roll up my sleeves and get my hands dirty. It was one of the moments where you understand, with deep humility, the value of learning the basics. In Jiu Jitsu, I’m always yearning to try out the latest reverse, inverted spider guard techniques, even if they are beyond my current abilities and flexibility. But when things get tough in a sparring session, it’s the simple stuff, the bits stored in my muscle memory, that always show up to save me.

I looked through the HTML template for the newsletter and realized, I know what this is. I can do this. It wasn’t pride I felt at that moment, but relief. There are lots of codes you can learn in life, and lots of systems you can master. I’m still a long way from feeling like a software developer, but it’s always nice to realize there is a new arena in which you are beginning to be self-sufficient. The Stack Overflow blog could use a nice renovation. There are designers and developers on the team who have the skills to do it far better than I can. But after they’ve done the heavy lifting, when the foundation is in place and the lattice work is laid, maybe I’ll sneak in and tweak the padding in a few places, align things just a little more to my taste. Now, where should I add some buttons?

Login with your stackoverflow.com account to take part in the discussion.