개발자는 질문을 어떻게 잘 할까?

Hyemi Noh
8 min readJun 14, 2021

--

갑자기 이런 글을 쓴 이유는 다음과 같다. 지인 중에 사내 플랫폼을 담당하시는 분이 있다. 사내 플랫폼의 유저가 개발자이다보니 하루에도 여러 번 개발자분들의 문의를 받는다. 하지만 종종 별다른 정보 없이 ‘나 에러 메세지 이거 나면서 안 돼…왜 안 돼? 도와줘!’ 이런 종류의 문의를 받다보면 지친다고 한다. 그러면서 제발 문의를 하는 사람들이 stackoverflow의 How do I ask a good question?을 읽어봤으면 좋겠다고 하면서 보여주셨다.

개발을 아주 조금이라도 해봤다면 절대 모를 일 없는 갓스택오버플로우이다. 정말 수 많은 질문과 답변이 오고 가는 곳이다. 스택오버플로우의 Help Center에는 ‘어떻게 좋은 질문을 하는 가’에 대한 가이드가 나와있다. 개발자에게 있어 커뮤니케이션은 중요한데 이걸 하기 위해서는 질문을 하는 게 중요하다고 생각했다. 나열된 항목을 하나씩 살펴보자.

1. 검색하고 조사(research)해라.

계속 당신이 찾고자 하는 걸 따라가라. 비록 어디서도 유용한 답변을 찾지 못할지라도, 도움이 되지 않았던 관련된 질문들에 대한 링크들을 포함하는 것은 다른 사람들이 당신의 질문이 나머지것들과 얼마나 다른지 이해하는 데 도움을 준다.

보통 도움이 안 됐던 것들은 무시하는 경우가 많다. 하지만 막상 질문을 했을 때 도움이 되지 않던 것들을 답변으로 받으면 질문한 사람은 난감하고 답변한 사람의 시간도 낭비하게 된다.

2. 특정 문제를 요약하는 제목을 써라.

제목은 내 질문에 대한 답을 해줄 수 있는 답변자가 처음으로 보는 것이다. 만약 당신의 제목이 흥미롭지 않다면, 그들은 나머지는 읽어보지도 않을 것이다. 그래서 다음을 명심해라.

바쁜 동료에게 말하듯이 해라. 당신의 질문 전체를 한 문장으로 요약해야한다: 누군가 당신의 문제를 알아보고 푸는데 도움을 주도록 어떤 디테일들을 포함할 수 있을까? 당신의 질문을 이미 존재하는 유사한 질문들과 다르게 만드는 어떤 에러 메세지들, 주요한 API들 혹은 정상적이지 않은 상황들을 포함해라.

스펠링, 문법, 구두점(마침표 같은 것)은 중요하다! 다른 사람들이 당신의 질문에서 첫번째로 보는 부분임을 기억해라. 당신은 좋은 인상을 주길 원할 것이다. 만약 당신이 영어로 쓰는 것이 익숙하지 않다면 친구에게 검토해달라고 부탁해라.

만약 당신이 문제를 요약하는 게 힘들다면, 제목을 마지막에 써라. 때때로 질문의 나머지를 쓰는 것이 문제를 묘사하는 것을 더 쉽게 만들 수 있다.

예시:
- 나쁜 예: C# Math가 헷갈림
- 좋은 예: 왜 int를 쓰는 대신 float을 사용하는 것이 인풋이 모두 integer일 때 다른 결과가 나오죠?

- 나쁜예: [php] 세션을 잘 모르겠음
- 좋은 예: 어떻게 PHP에서 session data를 기반으로 유저를 다른 페이지들로 리다이렉트 할 수 있죠?

- 나쁜 예: 안드로이드 if else 문제
- 좋은 예: 왜 str이 “value”로 셋팅돼있을 때 str == “value”가 false로 되나요?

요약하는 건 정말 중요한 것 같다. 사실 나도 이걸 잘 못하는 편이다 😢 일단 상대에게 충분한 시간이 없다고 생각하면 좀 더 효율적으로 전달하려고 더 노력하게 된다.
제목을 마지막에 쓰는 것도 꽤 좋은 방법같다. 사실 무언가에 대한 제목은 github에서 PR이나 이슈를 생성할 때 더 많이 쓰는데, 종종 제목부터 쓰려고 하면 막막할 때가 많기 때문이다. 얼추 내용을 쓰고 그걸 요약하면 좀 더 수월할 것 같다.
사실 문법은 한국어의 경우 그나마 좀 낫지만…영어는 내가 원어민도 아니고 물어볼 현실 친구도 없기 때문에…AI 친구인 파파고에게 도움을 받는 게 최선 같다 ㅎㅎ; 이 부분은 완벽히 지키기가 좀 어려워보인다.
예시를 보면서 느낀 점은 모든 걸 포함할 수 있는 단어를 쓸 수록 잘 요약하는 것과 거리가 멀어진다. ‘헷갈림’, ‘잘 모르겠음', ‘문제' 같은 단어는 최대한 쓰는 걸 피해야겠다.

3. 어떤 코드도 첨부하기 전에 문제를 소개해라.

당신 질문의 본문에서 제목에 명시한 요약에 대해 확장하는 것부터 시작해라. 어떻게 당신이 풀고자하는 문제를 직면했고, 당신 스스로 문제를 해결하는걸 방해하는 어떠한 어려움이라도 설명하라. 당신의 질문의 첫번째 단락은 대부분의 독자들이 볼 두번째이다. 따라서 가능한한 매력적이고(engaging) 유용하게 해라.

만약 입장을 바꿔서 내가 질문을 보는 사람인데 처음부터 아무런 맥락없이 코드부터 있으면 당황스러울 것이다. 최소한 어떤 맥락에서 안 된다는 건지는 나와있고 그 다음에 코드를 첨부해야 한다고 생각한다.

4. 다른 사람들이 문제를 재현할 수 있도록 해라.

모든 질문들이 코드를 포함한다고 좋은 건 아니다. 만약 당신의 문제가 코드에 있다면 일부는 포함해야한다. 하지만 당신의 전체 프로그램을 복사하지 마라! 회사 코드를 첨부해 당신이 곤란해질 수 있을 뿐만 아니라, 독자들이 문제를 재현하고자 할 때 무시할 필요가 있는 관련 없는 다수의 디테일들도 포함할 수 있다. 여기 가이드 라인이 있다:

- 다른 사람들이 문제를 재현할 만큼의 코드만 포함해라. 이에 대한 도움을 받기 위해서는 How to create a Minimal, Complete, and Verifiable example을 읽어봐라.

- 만약 링크를 걸 수 있는 live 예시를 만들 수 있다면 그렇게 해라. (예를 들면 online IDE를 이용해 바로 돌아갈 수 있도록) 하지만 또한 질문 자체에도 코드를 복사해라. 모두가 외부 사이트에 접근할 수 있는 건 아니고 시간이 지남에 따라 링크가 깨질 수도 있다. 인라인 JavaScript / HTML / CSS 의 live 데모를 만들기 위해 Stack Snippets을 이용해라.

- 코드, 데이터, 에러 메세지의 이미지를 첨부하지마라. 질문에 텍스트를 복사하거나 타자로 쳐라. 텍스트를 통해 정확히 묘사할 수 없는 것들에 이미지를 사용해라. 더 많은 정보는 Why not upload images of code/errors when asking a question? 을 참고해라.

질문을 할 때 상당히 중요한 부분 중 하나는 답변자가 재현이 가능하도록 하는 것이다. 재현이 돼야 이것저것 해보고 이 방법이 된다고 알려줄 수 있기 때문이다. 하지만 인용한 부분에도 나오듯이 그렇다고 왕창 코드를 첨부해버리면 흔히 말하는 TMI가 돼버린다.
나는 종종 텍스트로 할 수 있는 걸 이미지로 첨부하고는 하는데 최대한 그렇게 하지 않도록 노력해야겠다. 재현할 때 힘들뿐만 아니라 텍스트보다 더 화면 크기를 많이 차지해 쓸데없이 길어지기도 한다.

5. 모든 관련있는 태그들을 포함해라.

당신의 질문과 관련이 있는 언어, 라이브러리, 특정 API에 대한 태그를 포함하도록해라. 만약 당신이 태그 필드에서 타자를 친다면 시스템이 당신이 타자를 치고 있는 것과 매치되는 태그들을 제안해줄 것이다. 태그들이 당신이 묻고 있는 질문과 관련이 있는지 확실히 하기 위해 주어진 설명을 읽어봐라! What are tags, and how should I use them? 도 또한 봐라.

태그는 질문들을 분류할 때 유용하게 쓰일 수 있는 도구이다.

6. 포스팅하기 전에 검토를 해라!

질문을 올릴 준비가 됐다고 느꼈을 때, 심호흡을 하고 처음부터 끝까지 읽어봐라. 당신은 이걸 처음 본다고 생각해라: 이게 타당한가? 깨끗한 환경에서 스스로 문제를 재현해보고 당신의 질문에 포함된 정보만을 가지고 그렇게 할 수 있는지 확인해봐라. 당신이 놓친 디테일들을 추가하고 다시 읽어봐라. 이때가 제목이 여전히 문제를 묘사한다고 확실할 수 있는 좋은 타이밍이다.

그래도 나름 이 부분은 괜찮게 지키고 있는 것 같다. 누군가에게 질문을 할 때 쓰자마자 보내기보다는 다 쓰고 나서 쭉 읽어본 다음 수정을 꼭 하는 편이다. 하지만 재현 가능한지 테스트하는 부분은 놓치고 있었다. 재현까지는 못하더라도 최소한 포스팅 전에 처음부터 끝까지 읽어보고 수정하는 과정은 필수라고 생각한다.

7. 질문을 올리고 피드백에 반응해라.

당신이 포스팅을 한 후, 잠시동안 브라우저에서 질문이 열려있도록 해라. 그리고 누군가 코멘트를 다는지 확인해라. 만약 당신이 너무 뻔한 정보를 놓쳤다면, 이것을 포함하기 위해 질문을 고칠 준비가 돼있어야 한다. 만약 누군가 대답을 올렸다면 이걸 시도해보고 피드백을 제공할 준비가 돼있어라.

브라우저에서 닫지 않고 남겨 놓는 것도 나쁘지 않지만 핸드폰에 알림이 오도록 하는 게 최고이다. 만약 누군가 코멘트를 남겼는데 모른 채 몇 시간이 지나버린다면 그 동안 진전이 없을 것이다. 최악은 코멘트로 이미 문제 해결법을 알려줬는데 혼자 끙끙대면서 삽질을 하는 것이다 😢

더 많은 도움은 아래를 확인해보자.

개발자로서 질문을 잘 하는 법을 알아봤다. 어떻게 보면 너무 뻔해 보일 수도 있다. 하지만 곰곰이 잘 생각해보면 은근히 많은 부분들을 놓치고 있을 것이다. 잘 질문할 수록 더 유용한 정보를 얻을 수도 있고 같이 일하는 팀원들 혹은 내 질문을 받아주는 상대한테도 많은 도움이 될 것이라고 생각한다. 앞으로 잘 지킬 수 있도록 노력해봐야겠다 :)

--

--

Hyemi Noh
Hyemi Noh

No responses yet