I consider myself an active StackOverflow user, despite my activity tends to vary depending on my daily workload. I joined StackOverflow in 2009 and, at the time of writing (December 2016), I have a reputation of 124k and I'm ranked in the top 300 users.
Every once in a while programmers ask me questions such as How can you be so active?, Do you really like StackOverflow or are you just doing it to get more visibility?, How much time do you spend on SO per day?. I decided to collect these answers in a post and try to explain how I use StackOverflow.
Is it really worth it?
Let's be honest: (almost) nobody does something for nothing. We all make decisions based on expectations, depending on what actions matters the most to us.
However, not all of us measure the value of an action in the same way. For some of us the only way to get rewarded is to earn money, whereas for other people visibility or success is worth more than money. For certain people welfare is synonymous of wealth and money, for others is instead more directly connected to the style of life.
This concept equally applies to another topic very close to programming: open source. I've spoken with a number of people that thought is not worth to work on open source projects because it doesn't pay your bills. However, if you'd ask me, I'll tell you that working on open source projects is what made me a better programmer and it positively contributed to my professional career. Working in open source is probably one of the reasons why I am employed today, and I had the chance to work with great people and being involved in amazing coding adventures.
But let's go back to StackOverflow. I joined StackOverflow because I saw some value in it. Unlike most of new users that join today, I didn't need any help at that time. In fact, I asked my first question several months after I originally signed up.
In 2009 I was already a quite prolific developer, but my activity was mostly confined to the Italian community. The value I saw in StackOverflow was the opportunity to gain experience, reputation, and visibility in the international community.
That's why I joined StackOverflow. However, there's more than one reason that kept me answering questions for almost 7 years.
Keep my mind trained
Keeping my mind trained is definitely the first reason why I've spent a significant amount of time on StackOverflow.
Some people keep their mind trained by solving crossword puzzle, other people prefer Sudoku. Personally, I like to keep my mind trained by solving small programming related problems in different topics such as algorithms, data mining, and programming languages.
For this reason, I generally tend to ignore large questions, that have a lot of possible implementation variables or involve a lot of layers (like Ruby on Rails related questions that contain code from views, controllers and database). Instead, I like small, well defined questions where I can reasonably find an answer in 10 minutes or less.
Improve debugging skills
The ability to properly debug a piece of software is one of the most valuable skill for a software engineer.
If debugging your code can be hard, debugging someone else code is even harder, especially if you don't have physically access to it. The interaction is far more complicated, and you need to guess and ask the minimum amount of appropriate questions to quickly get the information you need.
StackOverflow questions represent an infinite amount of issues to debug. Even picking the right question to spend your time with is a skill that you will learn to master.
Sometimes, I even push myself further by trying to debug questions about libraries I don't use, or I don't know. That encourages me to keep reading other developers' code. Quick funny story: it happened a couple of time in the past that I was searching for a solution to a problem affecting a particular library I was using, I landed on a StackOverflow question that precisely described my problem, and it was answered with the correct solution. So far, nothing strange, except that the person that provided the solution… was me!
Learn a new language and test your progress
I love learning new programming languages or technologies. I definitely don't use StackOverflow for this task, but instead I rely on books or online resources. However, I found that StackOverflow is a great way to test your progress.
Being able to answer someone else questions on a topic you've started to learn a few weeks before is an incredible rewarding feeling.
Answering questions on StackOverflow and getting them accepted is not a trivial task these days, given the large amount of expert users connected every day. Simple questions tend to be answered very quickly in less than a few minutes, sometimes even before you have the time to finish reading it. More complex questions, instead, take more time but these are definitely not the kind of questions you target when you are learning a new topic.
Therefore, being able to pick a question and properly answer it, with the correct solution and in a reasonable amount of time, is a good way to test your progress while learning a new topic.
I personally identified three phases in the learning process:
- in the first phase, while I'm actively learning, I tend to read simple question and figure out the response without actually trying to answer it.
- in the second phase, when I have a reasonable knowledge base, I start to try to answer some simple questions, either by linking them to the correct solution if already exists, or posting an answer if I'm confident it's the appropriate one. I'm not looking for gaining easy +1, therefore I don't answer the question unless I'm truly confident it's an appropriate solution. The second phase is generally the longest one, and it leads to a gradual transition to the third phase.
- the third phase is when you've reached a fairly considerable knowledge of the topic and you are potentially able to answer or debug most of the questions that are opened on that subject. Of course, reaching this phase takes a lot of time and it may not necessarily be your goal for each possible subject in computer programming.
Generally, the second phase is what you should aim towards: being able to successfully understand and answer a reasonable percentage of questions on a specific topic, although in most cases you'll come to the right solution at a slower speed than the most skilled developers. It's fine, the ability to reduce the response time generally comes with more experience, and it may or may not be a goal.
Every once in a while, someone opens a question that is somehow related to DNSimple. In most cases, these questions are about connecting software together or domain registration, where DNSimple is one of the ingredients of the recipe.
Whenever possible, and unless a better answer is already present, I like to jump into the conversation and try to provide an answer. If I don't have the necessary knowledge to answer, I generally ping some other DNSimple team member internally and work with him/her to prepare an appropriate solution to post.
I the last years we've heard a lot about the important of building an online reputation. This is one of the most common selling points that SEM agencies use to motivate companies to invest in online activities.
Online reputation is equally important for people, especially if your primary area of activity is somehow connected to computers, programming or other subjects with a direct connection to internet.
StackOverflow is a great way to build an online reputation using the approach show, don't tell. By properly answering questions on StackOverflow you demonstrate your experience, instead of pretending to have one (or telling other people that you're good at doing something). Of course, it also works on the other way: because questions and answers are public and won't be deleted even after years, you also expose your weaknesses, both in terms of technical and communication skills.
In the past I've spoken with people who had at least a couple of StackOverflow profiles: a primary one that they used for interactions that could positively influence their online reputation, and a secondary one they used to ask questions that they considered too dumb.
Remember, there is no stupid question. Even when the question is simple, what's really important is how you ask it (and weather you properly searched for an appropriate solution, or tried to find one). I personally don't have any problems to ask questions that show the lack of knowledge on certain topics. Most of my questions on dba or vim sites are clearly showing that I'm not an expert on those fields, but they also prove my desider to learn and improve.
If online reputation is directly connected to improving your profile, online visibility is instead directly connected with the amount of exposure you have online.
For a programmer, GitHub is one of the best places to foster online reputation (as you can provide a link to you open source work when applying for an interview) and online visibility. However, compared to GitHub, StackOverflow is generally more visible on search engines. I don't know about a single programmer that, at least once in his career, had a problem and found a solution on StackOverflow using a search engine.
Because of its very high ranking on search engines, having a popular profile on StackOverflow may positively impact your online visibility either directly as a ranking mechanism, or indirectly because of (popular) questions that you answered and that are actively visible in the search engine result pages.
School of English
I'm not a native English speaker. Writing in English is still hard for me, much harder than writing in Italian, much harder than reading anything in English written by someone else.
StackOverflow represents an excellent opportunity to train my English writing skills because anyone can edit my answers and fix a typo. StackOverflow keeps an history of all the changes, and I can always review other people contributions to my posts. This is an excellent way for me to learn from my errors.
Answering questions on StackOverflow is generally a pleasant experience for me, as it has a positive impact on my personal skills and attitude. However, in order to avoid turning the positive experience into a stressful dependence, I don't consider it as a duty or obligation.
I don't set minimum number of hours, or days. I don't set a minimum amount of daily reputation. I don't feel bad if I skip some days in the "last seen" calendar.
I try to balance my daily activities with the online presence on StackOverflow. I generally limit it to 30 minutes or 1h per day, and in most cases while waiting for the test suite to finish, or the deploy to complete.
To me, contributing to StackOverflow pays back because it helps me to keep my mind trained, it leverages my skills as a software engineer, with the positive side effect of improving my online visibility and reputation. All these reasons justify the time I invested answering questions in the last 7 years.