What’s in a question?
Quite a lot, as it turns out. So much, in fact, that in 2008, Jeff Atwood and Joel Spolsky founded coding question-and-answer platform, Stack Overflow. In early July this year, the platform was acquired by Tencent’s major shareholder, Prosus, for a cool US$1.8 billion.
Stack Overflow is currently the single most popular resource for ace and novice coders alike. Simply ask a programming-related question and someone on the platform is bound to provide you with an answer.
But fair warning, there is a social contract of sorts that underpins the entire platform. It is quite simply this: “Ask good questions.” Even so, it is a deceptively challenging thing to get right.
Users who contribute positively and answer questions are ranked according to reputation points and various “badges”. They might even be granted edit and moderation privileges. Over time, these achievements accord the user a kind of status on the platform.
Jon Skeet sits atop the pile and has done so for more than a few years. A 14-year veteran programmer at Google’s UK offices, he is the world’s highest rated user on Stack Overflow.
Run a quick online search of the most influential programmers of all time; Skeet invariably shows up on those lists, alongside the likes of Linus Torvalds (creator of the Linux operating system), John Carmack (a pioneer in PC gaming and developer of the “Doom” franchise) and Anders Hjelberg (creator of the C# programming language).
At the time of writing, Skeet’s profile had racked up 1,269,528 points, putting him in the top 0.01% of users. He broke the million-point mark in January 2018.
Skeet counts himself as one of the earlier users of Stack Overflow, though he only joined a little after the platform exited beta testing in late 2008. “It’s one badge that I don’t have,” he tells Digital Edge in an exclusive interview.
He is a prolific writer in his own right, in addition to being a regular responder on Stack Overflow. Skeet has provided more than 35,000 answers over his nearly 13 years on the platform. That works out to a blistering 229 answers per month on average. According to the platform, his contributions have reached more than 335 million people to date.
These figures do not take into account the fact that he had already been an active contributor to the online coding community years before Stack Overflow made its debut.
“I was at one of my first coding jobs when various software engineers much more senior than myself introduced me to the Java Programmer News Group, and a little bit later, the C# News Group.
“They were canny enough to realise that they didn’t quite have the time to explicitly train me, but nonetheless wanted me to learn and contribute to the growing programming community. I was really dedicated to those news groups, which lasted me through a few jobs over the years.
“But once Stack Overflow launched in 2008, I hardly ever went back to the news groups. I immediately realised it had all the benefits of news groups with its clear formatting, really good user experience in general, as well as the ability to preview what my code would look like,” Skeet says. “Also, the question-and-answer nature of the platform fit my writing style perfectly.”
He has managed to contribute all this, and without pay, while parenting three children with his wife, Holly, a children’s book writer.
His feverish activity on Stack Overflow over the years got him noticed. In 2016, the digital education platform FreeCodeCamp ordained Skeet the “Chuck Norris of Programming”, forever cementing his status as a meme icon of sorts in the industry.
It is likely that FreeCodeCamp granted Skeet this designation purely in good-natured jest, but Digital Edge is unable to verify that at this point. It is quite possible the platform was at least a little serious.
“It’s obviously just an imaginary persona for the internet, which is quite fun to have a laugh about. But it shouldn’t be too closely associated with me.
“I certainly join in with the joke of it all, but I wouldn’t want people to either come away with an inflated sense of my expertise, or indeed, believe that I somehow believe in any of this,” says Skeet.
Skeet was all of seven when he started coding at home. This was in early 1980s UK, and people were only just being introduced to these “computer” machines.
“The family got a ZX Spectrum 48k back in 1982. Initially, I used it to play computer games, as did most people who had the unit. But I got around to reading the Spectrum’s instruction manual and ended up writing code for what I would laughingly refer to as a ‘game’.
“An ‘alien’ would show up at a random row on the screen, and then you as the player would manoeuvre your ‘spaceship’ up or down until you were on the same row and fire on the enemy.
“It was completely simplistic. The enemy wouldn’t move around. And once you ‘killed’ it, another enemy would spawn elsewhere on the screen. But you controlled that little spaceship, and the computer responded to your inputs. It felt like a huge deal to me at the time.”
But the programming task he is most proud of — probably over his entire career — is writing a Logo interpreter for the family Spectrum.
Logo is an early programming language from the 1960s, known for its use of so-called “turtle graphics”. The language teaches students to visualise and predict the turtle’s motion from the perspective of the turtle.
Logo was a key feature of the early BBC Micro computers that were supplied to the British education system. Back then, the British Broadcasting Corporation (BBC) decided that it would hire Acorn Computers to build these machines for the local school system.
“Anyone my age would have had at least some experience on those old BBC Micros in school. It had the Logo programming installed. And here, students would input commands that moved this turtle around on screen.
“It allowed you to draw shapes by ‘instructing’ the turtle to move over a particular distance or turn at certain angles. I recall thinking at the time that it was such a shame we didn’t have this programming language on the Spectrum at home.”
That was when the idea came to him.
Skeet was either 10 or 11 when he decided to reproduce the entire Logo programming language for the Spectrum computer at home.
In a way, Skeet was bound to succeed at this task simply because at the time, he was blissfully unaware of the scale of the challenge. He had basically undertaken to port an entirely new language onto a machine that had never used it before.
“Looking back, I’m glad I didn’t know any better, because somehow, I managed to do it. I don’t know how many hours of my life it took, but it was a fantastically formative experience. I ended up with a reasonably complete implementation of Logo on the Spectrum,” he says.
It required him to have a good understanding of trigonometry — a key topic in geometry. “This is how I’m able to pretty accurately age myself at the time I did this. I learnt trigonometry from this huge, early edition Spectrum instruction manual, which came with the machine. This was well before we had covered trigonometry in school.”
Like father, like son
He may have started young, but he was by no means on his own. Skeet credits his father’s endlessly curious nature for his technical abilities today.
His father — then the health director of a local healthcare administration authority — found himself in need of a healthcare registration system so that professionals could quickly pull up notes on patients.
Like his son, Skeet Sr was seemingly oblivious to the scale of the challenge, but he ended up creating just such a database. And the language he used? The Massachusetts General Hospital Utility Multi-Programming System, or MUMPS, for short. Incidentally, his father’s formal training at the time was in zoology.
“My dad had done this entire thing, in the sort of way that I somehow coded Logo for our home Spectrum. Like me, dad was blissfully unaware that this wasn’t a thing you should do; people don’t just go around building an entire health registry system from scratch. Dad ended up speaking about it at conferences later on in his career.
“Like me, dad at the time was entirely self-taught, so I dread to think what the code must have read like,” he quips.
Truly his father’s son, Skeet would go on to apply his budding coding knowledge in real-world applications. He was in his teens at this point and preparing to sit for his GCSEs (the British equivalent of the SPM).
“As part of a GCSE project for my computing subject, I ended up coding an administrative system to manage the Worcester Half Marathon. I studied in Worcester, and it just so happened our school managed the annual local half marathon community run. People would send their applications to us.
“I don’t know what they did in the years before or since I left, but in the couple of years I was there, I wrote the system that both managed the registration process and captured participants’ finish times. I built, iterated and maintained this system for the few years that I was in school, before graduating.
“It was quite surreal to me because I would be sitting in English class, and then a school secretary would come knocking and asking for me, because they needed help with the system. So, I was effectively the school’s on-call IT support as well.
“Looking back, I am amazed they trusted me with this entire thing. It was immensely enjoyable, and I am so grateful to the school, because if the system failed at any point, it would have been really embarrassing for them.
“I suppose I’m really glad for the trust, and also, that no one was on hand to review my code, because it wasn’t particularly good code,” he jokes.
Skeet has come a long way since his schoolboy coding escapades. These days, he has slightly bigger roles and responsibilities. He codes with C# at Google, although he did use Java for a time.
Skeet has a longstanding affinity for C#, a language that was initially pioneered by a small team of highly dedicated programmers at Microsoft.
“It’s interesting, if one reads the early beta specifications for C#, it describes itself as a cross between C++ and Visual Basic (or VB, another programming language). The document does not mention Java anywhere when really, it’s just so obvious to anyone that’s ever-used C#, that it is heavily influenced by Java.
“In many ways, C# and its platform, the .NET Framework, is a better version of Java. Java in the early days went down a more community-focused development [route] and as a result, ended up stagnating somewhat, despite a roughly seven-year head start on C#.
“C# on the other hand, had a very small language design committee, which over the years, strategically pulled views and opinions from the industry about potential features and add-ons.”
Elitism in coding?
But he has little patience for elitism in the community, a problem he says is all too common.
“People have their own views on whether or not a particular problem-solving process you’re undertaking is considered ‘programming’. In my view, the most commonly used programming language, as it were, is probably Microsoft Excel.
“Sure, they are used by millions of people who may never describe themselves as programmers, but what do they do on Excel?
“They write ‘code’ in the form of spreadsheet formulae that take an input, manipulate it into the correct output, possibly triggering some other related function in the process. Well, to my mind, that’s programming,” says Skeet.
But some sneer at these people, saying they are just business analysts or managers. “Suppose you’re a manager in a small business, and you don’t have a HR system to manage your employees. Instead, you prepare an automated spreadsheet that employees can update as and when they take time off.
“The spreadsheet independently updates how many days they’ve taken off, how many vacation days they have left, and so on. What you’ve done is build an event-driven, highly reactive, and very functional bit of programming. You may not be a professional software engineer, but you are absolutely programming in this instance.”
Asking a good question on Stack Overflow
1 Imagine you’re trying to answer the question
Once you’ve finished writing your question, read it through, and ask yourself a few questions:
• Does it make sense?
• Is it obvious what you’re asking about?
• Is it easy to understand?
• Are there any obvious areas you’d need to ask about?
2 What’s in a title?
Craft a short, descriptive title which captures the theme of the question, without actually being a question. Questions in the title aren’t dealbreakers as such, but it needs to be very specific. Titles such as “Why doesn’t this work?” or “Please help?” won’t get you very far.
3 Context, context, context
In most cases, users who try to answer your question will need to know what language and platform you’re using. Describe the fixes you’ve already tried and the results, if any. The basics should typically be communicated via tags, but it may be useful to provide some additional information:
• Language version (such as C# 4.0)
• Platform version (such as .NET 3.5)
• Operating system, if you think it might be relevant
• Any other relevant software information (such as database type and version, the integrated development environment (IDE) you’re using)
• Any unusual constraints that might prevent you from employing some of the more obvious fixes
4 Make your problem statement obvious to the reader
If at all possible, write a sort of “executive summary” at the start of your question, followed by a more detailed description. Don’t just state that something didn’t work. Tell the reader how it failed. If it returned an exception, what was the exception?
5 Sample code and data
If you want the reader to go through your code, it should:
Be standalone. Don’t try to talk to a database unless you’re asking a database-related question.
Be complete; if there are missing imports or directives, it gets annoying for the reader
Make sure to compile your code unless a compilation error is the reason for the question. Also, provide the real code, rather than a generic approximation. That way, the reader can run your code and see the exact same problems that you do.
Try not to bring up user interface (UI) unless your code is specifically about UI.
Demonstrate the problem. You should tell the reader that you expected the result to be X, but instead, got Y.
Be concise with your code. Don’t make the reader go through hundreds of lines of code to find the problem. At that point, you’re making the reader do work that really, should have been your responsibility.
6 Spelling, grammar and formatting
Not everyone speaks English as a first language, and that’s OK. However, if you’re trying to communicate on an English-language forum like Stack Overflow, you owe it to yourself and the reader to at least make an effort to write in reasonably correct English.
You don’t need to draft a literary masterpiece, but you should try to adhere to simple rules around punctuation, use of paragraphs, grammar, sentence structure, and typing out words in full (as opposed to writing, IMO, gr8, bcoz and so on).
7 Make a good impression on the community
There are a few simple things you can do to get the community “on your side”, and therefore, more likely to give you a useful answer:
• Register as a user and give yourself a respectable username. It does not need to be your real name, but profiles like “Top Coder” or “Coding Guru” will look silly when you’re asking a question that others find quite simple.
• Keep and eye on your question and respond accordingly. There may be requests for clarification and, naturally, answers.
• Don’t add your own answer unless it really is the answer. Very often, users add extra details in an “answer” when what they should have done was just edit their question.
• Be polite. No one is getting paid to answer your question. People are giving up their time to help you, so be appreciative of that.
• If you find an answer to be particularly helpful, or which solves your problem, accept it by clicking on the tick mark next to it. This gives extra credit to the person who provided that answer, as well as gives more information to future readers.
Source: Jon Skeet’s Coding Blog; codeblog.jonskeet.uk