Maho Bay, St. Thomas, USVI
The first week or so of my winter break as a high school freshman, I went to the wonderful, isolated, internet-less Maho Bay in St. John Island with my family. Inspired by the unconnectedness or perhaps in a reaction against it, I was bursting with ideas for social networks and mobile apps and website designs and everything else Internet throughout the entire trip. When I returned home and was re-united with my MacBook, I immediately sat down, fired up Vim, and started trying to build something.
Mobile Me’s login page, circa 2010. Instead of “Member Name” and “Password” appearing outside of the respective input boxes, the labels are positioned on top of them.
I can’t remember what the product idea was, exactly, that I was so excited about — but I do remember that, within the first two days of coding, I ran into a problem:
I was a big fan of the placeholder text, later standardized by HTML5, that Apple had pioneered in their login page for MobileMe, and I wanted to have similar functionality in my app’s login page. But I had no idea how to approach the problem. I didn’t even know the terminology for what I was trying to create, so my attempts to search for answers had been futile.
For a professional programmer working on a professional project, a problem like this would be no big deal. The feature would be marked with a high implementation cost in the internal issue tracker, the programmer would probably move on to more pressing issues, and maybe eventually circle back with the help of someone on the team who had experience with creating custom <input />
elements.
And for a student taking a formal web programming course, this problem wouldn’t be too bad, either. It’s tough, so the assignment would probably have included a guided approach. And there’s always office hours if help is needed from, as with the professional, someone who already knows most of the answer.
But I was not a professional programmer or a formal computer science student: I was a fourteen-year-old, self-taught, inexperienced coder working on an independent passion project. I didn’t (yet) have the feature prioritization skills to put the placeholders on hold while I worked on other, higher-bang-for-buck functionality. I didn’t have anyone working on the problem with me. I didn’t know anyone who had done much of anything with <input />
elements, let alone customize them. And so this was the kind of frustrating issue that had the potential to derail my project with large amounts of unnecessary wheel-spinning, and to ultimately make me less likely to keep programming at all.
Problems like these—problems where you have to develop a problem-solving approach in totally unfamiliar digital terrain while simultaneously learning to work around the environment’s bugs, edge-cases and weirdness, and are also lacking the vocabulary to even articulate what you’re doing—are why coding is hard. They’re also why most people tackle both learning to code and building things with code in highly institutional environments where a lot of structural support exists. Without someone experienced as a guide, figuring out these kinds of problems is close to impossible.
A typical phpBB forum (top) and 2010-era StackOverflow (bottom).
Because I was too young for formal classes and definitely far too young for employment when I started learning to code, I resorted to the next-best-thing: repeatedly Googling my problems until possibly coming to a solution. In the beginning, the results for most programming queries were dominated by a couple of old, phpBB-powered of programming communities and the more commercial Experts-Exchange. They worked, more or less: after going through many pages of questions and results (each of which had to be read and tried out to see if it worked), a solution would generally present itself. Of course, sometimes it didn’t. In those cases I often just gave up. “Obvious” questions asked by “n00bs” were ridiculed along with the questioner herself — and God forbid you answered a question incorrectly. The putdowns were funny, but they also made me far too self-conscious and shy to ever try participating myself, lest I be the subject of ridicule.
In 2009, I began tackling more and more ambitious projects and, just in time, Google results began taking me, more and more, to a new forum: StackOverflow. In retrospect, it was the incredible attention that Jeff and Joel dedicated to creating an answer-driven, focused, developer-friendly user experience that made the site great — but all I remember from the time is telling people how cool it was that StackOverflow would almost always have an immediate, working solution to my problem.
In addition to the immediate readiness of answers compared to its forum predecessors, the other big difference between StackOverflow and everything that existed before it was how friendly the community was compared to older forums. Partly because of strict moderation which kept everything focused on civilly and professionally answering questions and partly because of standard UI/UX idioms for dealing with duplicated questions and ranking answers that were helpful for readers and contributors alike, none of the meanness was present on StackOverflow. Even as a fourteen year old, I felt comfortable participating.
Which brings us back to my much-desired input
placeholders from my winter break project. Stumped, I decided to make a last-ditch effort, summoned up some courage, shakily opened up StackOverflow, and asked my first question:
Could anybody tell me how to create something like the hint/labels on Apple’s MobileMe login page (www.me.com) in that the label/hint text just fades when you click on the box and doesn’t go away until the user starts typing?
(And if you could use JQuery to do it, it’d be even better.)
Thank you very much!
(By label/hint text I mean the gray ‘Username’ and ‘Password’ text.)
As you can tell from my phrasing in the question, I was pretty unsure of myself. I had, after all, never asked publicly asked a question on the internet before. But, nine minutes after posting, I got an answer with the then-correct terminology and a link to a jQuery plugin doing exactly what I wanted. StackOverflow had, almost instantly, transformed a coding roadblock so frustrating that I almost gave up into an easily surmountable challenge. It was magic.
I asked another question when, a month later, I came across some bizarre syntax while trying to learn Ruby by reading through the Rails source code. Even though I hadn’t quite understood the context of the code, again within minutes, I got a couple of easy-to-understand answers. Just like before, a major coding roadblock had been transformed into an interesting, stimulating challenge.
This pattern kept repeating. As I tried to understand how the Ruby ecosystem worked without Rails, StackOverflow again came to the rescue. I was pointed in the right direction when I asked about the magic of Rails’ hot-updates. I had professional programmers give me confirmation that a not-quite-right-feeling SQL architecture I had come up with was the right thing to do. Twenty questions about Ruby later, when I started learning about C, StackOverflow helped me again. It helped me to understand the notoriously confusing interaction between JavaScript’s asynchronous callbacks and synchronous state management and how the PHP program lifecycle works. It helped me to understand how Python imports work. And over the course of 236 questions, StackOverflow and its users continued to help me with everything from the Scala type system to mimicking iOS 7’s blurred backgrounds using <canvas />.
Again and again, StackOverflow answered my questions — and, in the process, helped me to keep pushing forward in my journey to learn programming and to build things with code. As I ran into problems and asked questions, I both gained the knowledge to keep progressing in my coding and the practical solutions needed to complete my apps. Looking back, it was just as important in my coding journey that I realized that could post to StackOverflow and get help solving almost any programming challenge: it made all of the tough, frustrating parts of learning to code infinitely more manageable. Who knows if I would have kept trying to code without it?
I suspect that communities like StackOverflow, especially when used in conjunction with traditional textbooks, could help resolve the ongoing problems with using the attempt to directly translate university courses to the more accessible internet as we try as a society to adjust to more dynamic labor markets requiring constant continuing education outside of classrooms. That is, of course, part of the vision of the broader StackExchange network.
But that’s a topic for another time. For now, I’d just like to say thank you, again, to StackOverflow and everyone who contributes to it. It’s hard to overstate how important being able to code has been for me. Coding has consistently made it easier and more rewarding to study economics at Columbia by enabling automation, analysis, and data-gathering. Coding has made it possible for me to produce quick but impactful projects by myself. Coding was instrumental in getting a summer internship at an MBA-dominated venture capital firm as a college sophomore, and it was even more instrumental in allowing me to succeed there. And coding has made it possible for me to be involved with a number of really cool projects tackling challenging problems with some truly inspiring people and amazing technologies. I can’t wait to see where code will take me next.
So once again, thank you, StackOverflow. Thank you for helping me learn how to code, thank you for making my life better.