업데이트: Mozilla가 이 프로젝트에 Open Source Support Award를 수여했다는 소식을 전하게 되어 기뻐요. 여기에서 더 자세히 읽어볼 수 있어요.
이 블로그 글은 Exercism의 Automated Mentoring Support Project가 시작됨을 알리는 글이에요. 이 프로젝트에서 우리는 학습자를 위한 피드백 루프를 개선하고 멘토의 부담을 줄이기 위해, 사용자의 풀이를 프로그램적으로 분석하는 프레임워크를 개발할 예정이에요. 단기적인 목표는 주어진 승인 기준을 충족하는 풀이를 자동으로 승인하고, 자주 나타나는 개선 사항에 대한 피드백을 제공하는 것이에요.
이 글의 목적은 우리가 해결하려는 문제와 앞으로 몇 달 동안 이를 어떻게 다뤄 나갈지에 대한 큰 그림을 설명하는 것이에요. 문제의 배경과 Exercism에서의 자동 분석 역사, 그리고 구현 전략에 대한 더 자세한 내용은 이어지는 글에서 다룰 예정이에요.
자동 멘토 지원이 필요한 이유
Exercism의 가장 큰 걸림돌은 규모를 감당하는 일이에요.
자원봉사 멘토들은 Exercism의 성공에 꼭 필요한 존재예요. 멘토는 학습자의 풀이를 검토하고, 그 풀이가 연습 문제의 성공 기준을 충족하는지 아니면 개선이 필요한지 분석하고, 학습자의 사고 과정을 공감하며 헤아리고, 격려가 되는 유용한 피드백을 제공하고, 그 언어의 관용적인 표현을 코칭하는 일을 맡아요. 지금은 멘토링 수요를 겨우 따라가는 수준이에요. 더 성장하려면 "멘토를 더 늘린다"보다 나은 전략이 필요해요.
Exercism 언어 트랙의 뼈대를 이루는 핵심 연습 문제의 경우, 제출물 중 약 25%는 첫 시도에 완료로 표시될 만큼 충분히 좋다고 추정해요. 또 다른 55%의 제출물은 흔한 유형에 속하는 문제를 가지고 있어서, 피드백 문구를 복사해서 붙여넣는 방식으로 멘토링할 수 있어요. 멘토가 창의적이고 사려 깊게 피드백을 만들어야 하는 풀이는 약 20%에 불과하고요.
멘토의 머리를 진짜로 쓰게 하지 않는 80%의 풀이는, 기꺼이 시간을 내어 남을 돕고자 하는 사람들에게 답답한 시간 낭비일 뿐이고, 그들의 전문성을 충분히 활용하지도 못하게 해요.
마찬가지로, 학습자는 피드백을 받기까지 하루에서 일주일 사이를 기다려야 할 수도 있고, 그동안 트랙에서 다음으로 나아갈 수 없어요. 완벽하게 유효한 25%에 해당하는 풀이를 제출한 사람들에게 이 지연은 유난히 답답한 일이에요. 나머지 사람들에게도 기껏해야 아쉬운 일이고요. 학습자는 이런 지연 때문에 흐름을 잃고 과정 자체에 실망하기도 해요.
풀이를 자동으로 분석해서 승인하거나 알려진 문제에 대해 정형화된 피드백을 제공하는 시스템을 개발하면, "지루한" 부분을 없애 멘토의 업무량을 크게 줄이는 동시에 학습자의 경험을 눈에 띄게 개선할 수 있을 것으로 보고 있어요. 덤으로, 구조와 스타일에 관한 질문에서는 사람들이 더 일관된 피드백을 받게 되어, 명확하게 정해지지 않은 주제에 대해 더 흥미로운 대화를 나눌 수 있게 돼요.
어떻게 작동할까요?
장기적인 목표는 2013년 Exercism이 처음 시작된 이래 제출된 거의 100만 건의 제출물의 추상 구문 트리(AST)를 분석할 수 있는 딥러닝 알고리즘을 개발하는 것이에요. 이런 도구는 멘토들이 남긴 흔한 패턴과 관련 댓글을 찾아낼 수 있을 거예요. 단기적으로는 멘토들이 가장 자주 반복해서 본 오류를 바탕으로 어떤 피드백을 줄 수 있는지 판단하기 위해 정적 분석을 사용하는 것이 목표예요.
이 프로젝트는 대략 다음과 같은 영역으로 나뉘어요:
- 제품 변경: 이 자동 분석이 현재 멘토링 UI와 어떻게 맞물리는지, 이 피드백을 어떻게 전달할지(시스템 메시지, "봇" 등), 그리고 이를 Exercism 웹사이트에 어떻게 구현할지를 정리해야 해요.
- 인프라: 여러 언어에 걸쳐 정적 분석을 효율적으로 실행할 수 있도록 지원하는 인프라를 설계하고 구축할 거예요.
- 정적 분석 프로토타입: Ruby / Two-fer의 좋은 풀이를 자동 승인하는 예시 분석기를 개발하고, 더 많은 커뮤니티 구성원이 기여할 수 있도록 이 과정을 문서로 남길 거예요.
2019년 중반까지 첫 프로토타입을 선보이는 것이 목표예요. 기반이 갖춰지면 Ruby 이외의 언어와 Two Fer 이외의 연습 문제로도 확장할 계획이에요. 프로토타입이 진전을 보일 때까지는 다른 언어와 연습 문제를 웹사이트에 통합할 프레임워크가 갖춰지지 않지만, 좋아하는 언어와 연습 문제를 위한 분석기를 지금부터 작성하고 싶다면 기다릴 이유가 없어요! 이 프로젝트의 GitHub 저장소에 이슈를 열고 어떤 작업에 관심이 있는지 알려주세요.
이미 멘토링을 돕기 위해 정적 분석을 활용해 온 Exercism 커뮤니티의 다른 분들과 함께하게 되어 무척 기뻐요. Go 트랙의 멘토들을 위해 정적 분석 도구를 개발한 tehsphinx와 bitfield 같은 분들이죠. 그 도구가 트랙을 엄청난 밀린 작업에서 Exercism에서 가장 반응이 빠른 언어 트랙 중 하나로 바꾼 모습은 자동 멘토 지원이 얼마나 큰 영향을 줄 수 있는지 보여줘요.
앞으로 몇 주 동안 이 첫 번째 핵심 단계들과 앞으로의 진행 방식에 대해 더 자세히 설명할 예정이에요.
아래 댓글창에서 여러분의 궁금한 점에 답해 드릴게요! :)