저는 제 자신을 활발한 StackOverflow 사용자라고 생각합니다. 사이트 활동이 하루의 업무량에 크게 좌지우지되긴 하지만요. 2009년에 StackOverflow에 가입하여 이 글을 쓰는 시점(2016년 12월)까지, 저는 12만 4천의 명성치를 얻었고 상위 300명의 사용자 랭킹에 올랐습니다.

가끔씩 다른 프로그래머들이 어떻게 이렇게 활발히 활동할 수 있나요? 혹은 정말 StackOverflow가 좋은건가요 아니면 그냥 눈에 띄고 싶어서 그러는건가요?, 하루에 StackOverflow에서 얼마나 시간을 보내시나요? 같은 질문을 하곤 합니다. 저는 이번 포스트를 통해 다양한 질문들을 모아 대답하고 제가 StackOverflow를 어떻게 사용하는지 설명해보고자 합니다.

정말 가치있는 일인가?

솔직히 말씀드리겠습니다. (거의) 모든 사람은 가치 없는 일에 매달리지 않습니다(nobody does something for nothing). 우리 모두는 어떤 행동이 가장 중요한지 기대치에 따라 결정을 내립니다.

하지만 우리 모두 행동의 가치를 매기는 기준이 다릅니다. 어떤 사람은 돈을 받는게 유일한 보상이라고 여기기도 하고, 반대로 어떤 사람은 다른 이들의 눈에 띄거나 명성을 얻는게 돈을 버는 일보다 가치있다고 여깁니다. 특정인들에게 행복이란 단어는 부와 명예와 같은 의미이고, 나머지 사람들에게는 삶의 방식과 직접적으로 연관된 의미입니다.

이 개념을 프로그래밍의 특정 주제에 적용할 수 있습니다. 바로 오픈 소스입니다. 저는 오픈 소스에 기여하는게 가치 없는 일이고, 그 이유가 돈이 안되어서 라고 말하는 사람들을 많이 보았습니다. 하지만 제게 오픈 소스에 기여하는 이유를 물으신다면, 이 일이 저를 더 나은 프로그래머로 만들어주고 제 경력에 긍정적인 도움이 되기 때문이라고 대답할 겁니다. 제가 오늘 직업을 가지고 있는 이유 중 하나가 오픈 소스에 기여하기 때문이며, 뿐만 아니라 여지껏 대단한 사람들과 함께 놀라운 코딩 여정을 함께할 수 있는 기회도 얻었습니다.

다시 StackOverflow 이야기로 돌아와서, 저는 StackOverflow 안에서 어떤 가치를 발견했기 때문에 참여하기 시작했습니다. 요즘 가입하는 대부분의 신규 사용자들과 달리, 저는 그 때 별다른 도움이 필요치 않았습니다. 사실 가입하고 몇달이 지나서야 처음 질문을 올릴 정도였으니까요.

2009년에 저는 이미 꽤 쓸만한 개발자였습니다만, 제 활동의 대부분은 이탈리아 커뮤니티에 한정되어 있었습니다. 제가 StackOverflow에서 발견한 것은 바로 세계적인 커뮤니티 안에서 경험과 명성을 얻고, 눈에 띌 수 있는 기회였습니다.

이렇게 제가 StackOverflow에 가입한 이유를 설명드렸습니다. 하지만 제가 7년이나 계속 답변들을 달게 된 이유는 더 있습니다.

끊임없는 두뇌 훈련

제가 StackOverflow에 엄청난 양의 시간을 투자한 이유 중 단연 첫 번째는 끊임없는 두뇌 훈련을 위해서입니다.

어떤 사람들은 두뇌 훈련을 위해 십자말풀이를 하거나, 스도쿠를 하기도 합니다. 개인적으로 저는 알고리즘, 데이터 마이닝, 프로그래밍 언어와 같이 각기 다른 분야에 걸쳐있는 작은 프로그래밍 문제들을 해결하면서 두뇌 훈련을 하는게 좋습니다.

그래서 일반적으로 가능한 구현의 변수가 많거나 많은 양의 계층에 걸쳐진 문제같이(예를 들자면 Ruby on Rails와 관련된 질문인데 뷰, 컨트롤러, 데이터베이스의 코드가 다 담겨있는 경우) 큰 규모의 질문은 무시합니다. 대신 작고 잘 정의되어있는 질문은 10분 안에 충분히 답을 할 수 있어서 좋아합니다.

디버깅 기술 향상

적절하게 소프트웨어의 일부를 디버그하는 능력은 소프트웨어 엔지니어에게 아주 가치있는 기술 중 하나입니다.

만약 자신의 코드를 디버깅하는게 힘들다면, 다른 사람의 코드를 디버깅하는 일은 더욱 힘들겁니다. 게다가 실제로 만날 수도 없는 상태이다보니, 의사소통이 훨씬 더 복잡해집니다. 여러분은 디버깅에 필요한 정보를 빨리 얻기 위해 최대한 적절한 질문을 떠올려야 합니다.

StackOverflow의 질문들은 ‘언제나 디버깅할 거리는 무수히 많다’는 점을 보여줍니다. 시간을 들여 답변하기에 적절한 질문을 고르는 기술도 익히게 됩니다.

때로는 제가 쓰지 않는 라이브러리나 제가 모르는 내용을 디버깅하는 질문에 뛰어들기도 합니다. 이를 통해 저는 계속 다른 사람의 코드를 읽는 훈련을 했습니다. 웃긴 이야기를 하나 해 드리겠습니다. 제가 사용하고 있는 특정 라이브러리에 관한 해결책을 찾고 있을 때, 저는 제가 겪었던 문제와 정확히 똑같은 질문을 StackOverflow에서 찾았고 그 질문은 제대로 답변도 달려있었습니다. 별 이상한 점은 없었습니다. 그 답변을 달았던 사람이 저였다는걸 깨닫기 전까지는 말이죠! 비슷한 일이 몇번 있었습니다.

새로운 언어를 배우고 자신의 진도를 확인하기

저는 새로운 프로그래밍 언어나 기술을 배우기 좋아합니다. 이때는 절대로 StackOverflow를 사용하지 않고, 책이나 온라인 자료에 의지합니다. 하지만 StackOverflow는 자신의 진도를 테스트하는데 아주 좋은 수단이라는 사실을 깨달았습니다.

불과 몇주 전에 자신이 배우기 시작한 분야에 다른 사람이 질문을 올렸는데, 그 질문에 답변을 할 수 있다면 엄청나게 뿌듯한 기분이 듭니다.

요즘에는 StackOverflow에 올라온 질문에 답변을 달고, 그 답변이 채택되는 일이 그렇게 간단하지 않습니다. 엄청난 수의 전문가들이 매일 접속해있으니까요. 간단한 질문은 빠르면 몇 분 이내에 답변이 달리기도 하고, 심지어 여러분이 문제를 다 읽기도 전에 답변이 달릴 때도 있습니다. 대신 더 복잡한 질문은 시간이 걸리겠지만, 새로운 주제를 배우고 있는 상태에서 건드리기엔 너무 어렵습니다.

따라서 적절한 질문을 선택한 뒤, 합리적인 시간 안에 올바른 해결책을 제시하는 일은 새로운 주제를 배우면서 진도를 테스트하는 좋은 방법입니다.

저는 개인적으로 세 단계의 학습 과정을 가지고 있습니다.

  1. 첫 번째 단계로 열심히 학습하는 동안 간단한 질문들을 읽고 답변을 떠올리지만, 실제로는 답변하지 않습니다.
  2. 두 번째로 충분한 지식 기반을 쌓았을 때, 좀 쉬운 질문에만 답변을 쓰려고 하거나 이미 알맞은 해결책이 존재한다면 링크를 제공하기도 합니다. 제가 정말 이 답이 맞다고 자신있게 생각한다면 직접 답변을 달기도 합니다. 저는 손쉽게 +1을 얻고자 하는게 아니기 때문에 진짜 적절한 해결책이라는 자신이 없다면 답변을 달지 않습니다. 보통 두 번째 단계가 가장 긴 단계인데, 이후 세 번째 단계로 자연스레 이어지게 됩니다.
  3. 세 번째는 해당 주제에 상당한 양의 지식을 갖게 되고, 관련된 대부분의 질문에 대답을 하거나 디버깅할 수 있는 단계입니다. 물론 이 단계에 이르기까지 많은 시간이 들 뿐 아니라, 모든 프로그래밍 관련 주제에서 이 단계까지 다다를 필요는 없을 겁니다.

일반적으로 두 번째 단계를 목표로 하셔야 합니다. 특정 주제에 관한 질문을 이해하고 괜찮은 수준의 답변을 할 수 있을 정도가 되어야 합니다. 비록 대부분의 경우 여러분이 올바른 해결책을 떠올리기까지 걸리는 시간이 다른 숙련된 개발자들에 비해 느리다고 하더라도 괜찮습니다. 답변을 다는 시간을 줄이는 능력은 더 많은 경험에서 우러나오기 마련인데, 반드시 시간 줄이기를 목표로 삼을 필요는 없습니다.

사용자 지원

가끔 누군가가 DNSimple(작성자가 몸 담고 있는 서비스)과 관련된 질문을 올릴 때도 있습니다. 대부분의 질문은 자신의 소프트웨어를 연결하거나 도메인을 등록하는 등 DNSimple이 하나의 구성요소인 경우가 많습니다.

질문에 이미 제시된 답변이 없는 경우 저는 가능한 한 대화에 끼어들어 답을 제공하려 합니다. 만약 필요한 지식을 모르고 있다면 다른 DNSimple 팀원을 불러 그 사람과 함께 알맞은 해결책을 작성해봅니다.

저는 StackOverflow에서 dnsimple 태그를 구독해두었습니다. 그리고 때로는 ServerFaultWebmasters Stack Exchange에서 dnsimple 키워드를 찾아보기도 합니다.

온라인 평판

작년에 저는 온라인 평판을 쌓는 것이 중요하다는 이야기를 많이 들었습니다. 이게 SEM(Search Engine Marketing) 회사들이 다른 회사들더러 온라인 활동에 투자하도록 꼬드기는 가장 일반적인 방법 중 하나입니다.

온라인 평판은 마찬가지로 사람에게도 중요합니다. 특히 여러분의 주 활동 영역이 어떻게든 컴퓨터나 프로그래밍, 혹은 인터넷이랑 직접적인 연관이 있는 분야라면 말입니다.

StackOverflow는 말하지 말고 행동으로 보이라 는 접근 방식으로 온라인 평판을 쌓는 아주 좋은 방법입니다. StackOverflow에 있는 질문에 적절히 답을 하면서 여러분은 자신의 경험을 내보일 수 있습니다. 경험이 있는 척 하거나 다른 사람에게 무엇을 잘 한다고 말만 하고 다니는 것보다 훨씬 직접적입니다. 물론 다른 결과가 나올 수도 있습니다. 질문과 답변은 공개되어있고 몇 년 뒤에도 지워지지 않기 때문에, 자신의 기술 혹은 소통 능력의 약점을 드러낼 수 있기 때문입니다.

예전부터 저는 최소한 두 가지 유형의 StackOverflow 프로필을 가지고 있는 사람들과 이야기해왔습니다. 첫 번째는 자신들의 온라인 평판에 긍정적인 영향을 미치는 방식으로 소통을 해온 사람들이고, 두 번째는 자신이 너무 멍청하다고 자책하며 질문을 올리는 사람들이었습니다.

기억하세요. 바보같은 질문은 없습니다. 아무리 질문이 쉽다 하더라도 정말 중요한 것은 질문하는 방식(그리고 여러분이 적절한 답을 찾아보거나 최소한 노력이라도 했는지) 입니다. 저는 특정 분야에 제가 지식이 부족하다는 이야기를 하면서 질문하는데 아무런 거리낌이 없습니다. 제가 DBAVim 사이트에 올린 질문들은 대부분 제 자신이 해당 분야의 전문가가 아니지만, 더 배우고 발전하고자 하는 의지를 보이고 있습니다.

온라인 노출도

온라인 평판이 여러분의 프로필을 발전시키는데 직접적으로 연관되어 있다면, 온라인 노출도는 여러분이 온라인에서 보여지는 횟수를 뜻합니다.

Github는 프로그래머에게 온라인 평판(인터뷰에 지원할 때 자신의 오픈 소스 기여를 링크로 제공할 수 있기 때문에)과 온라인 노출도를 기르는 최적의 장소입니다. 하지만 Github와 비교하면 StackOverflow는 일반적으로 검색 엔진에서 많이 보이게 됩니다. 저는 여지껏 검색 엔진을 이용해서 StackOverflow에 있는 문제와 해결책을 찾는 데 어려움을 겪었다는 프로그래머를 본 적이 없습니다.

StackOverflow는 검색 엔진에서 높은 우선순위를 가지고 있기 때문에, StackOverflow에서 명성을 얻는 일은 아마 여러분의 온라인 노출도에 직접적, 간접적으로 영향을 주게 됩니다. 직접적으로는 StackOverflow의 랭킹이 올라가고, 간접적으로 여러분이 답변을 달았던 질문이 검색 엔진의 결과 페이지에 나타나기 때문입니다.

영어 배움터

저는 영어 원어민이 아닙니다. 영어로 글을 쓰는 일은 저에게 여전히 어렵고, 이탈리아어로 쓰는 일보다 훨씬 어려우며, 다른 사람이 영어로 쓴 글을 읽는 일보다 더욱 어렵습니다.

StackOverflow는 제 영어 쓰기 실력을 기르는데 아주 좋은 기회를 제공해줍니다. 누구나 제 답변을 수정하거나 오타를 교정할 수 있기 때문입니다. StackOverflow는 모든 변경 사항의 이력을 가지고 보존하기 떄문에, 저는 언제나 제 글에 다른 사람들이 도움을 준 부분을 살펴볼 수 있습니다. 실수로부터 배우는 일은 저에게 아주 좋은 방법입니다.

결론

StackOverflow에 있는 질문에 답변을 작성하는 것은 일반적으로 저에게 기쁜 경험입니다. 저의 태도와 개인적인 역량에 긍정적인 영향을 주기 때문입니다. 하지만 긍정적인 경험이 짜증나는 일이 되도록 하지 않기 위해 이 일을 의무로 여기지 않고 있습니다.

저는 최소 몇시간 혹은 최소 몇일에 한번 답변을 해야한다거나, 하루에 얼마만큼의 명성을 쌓아야 한다고 목표치를 정해놓지 않았습니다. 마지막으로 로그인한 시간이 좀 지났다 하더라도 찝찝한 기분이 들지도 않습니다.

저는 하루 일과와 StackOverflow에 머물러 있는 시간의 균형을 유지하려고 노력합니다. 주로 테스트나 배포가 끝나길 기다리는 동안 하루에 30분에서 한 시간정도만 머물러 있습니다.

StackOverflow에 기여하는 일은 두뇌를 단련하고, 소프트웨어 엔지니어로서 자신의 기술을 끌어올리며, 저의 온라인 평판과 노출도를 항샹시키는 긍정적인 부가 효과도 있습니다. 이 모든 이유가 제가 7년 동안 질문에 답하기 위해 투자한 시간을 정당화합니다.


번역 후기

글 내용이 꽤 길어서 힘들었지만 유익한 내용이었습니다. 저를 비롯한 많은 개발자들이 StackOverflow에서 이미 답변된 질문 위주로 검색을 하고, 답을 얻어서 문제를 해결할 생각은 하겠지만 직접 질문을 올리거나 답변을 작성할 생각은 별로 해 본적이 없을겁니다. 영어라는 장벽 때문이겠지요. 거기다 ‘바빠 죽겠는데 이런데 글 쓰고 앉아있을 시간이 어디 있겠느냐’ 같은 생각도 할 수 있겠네요.

이 글을 읽고 나니 StackOverflow를 적극적으로 사용하는 일은 Github으로 참여하는 오픈 소스 생태계와 비슷한 점이 많다고 느꼈습니다. 보통은 자신의 코드가 직접적으로 남는 Github쪽을 선호하겠지만, 오히려 무리해서 ‘일일 커밋‘을 하기보단 차근차근 StackOverflow에 적극적으로 참여하는 것도 개발자의 실력을 갈고닦는데 큰 도움이 되겠습니다.

그리고 다른 어느 부분보다 글의 결론 부분이 와 닿았습니다. 우리는 보통 각자의 생업이 있고, 아무리 좋은 의도를 가진 행동도 의무가 되어야 할 필요는 없다고 생각합니다. 스타워즈의 요다 선생이 “Do. Or do not. There is no try.” 라고 말씀하셨지만, 이번 경우에는 정 반대로 생각해보면 마음이 한결 편해집니다. “아예 안하는 것 보다는 시도라도 해 보는게 낫지 않을까”