Exercism 커뮤니티가 마주한 문제 중 하나는 서로 다른 다양한 연습 문제에 대한 많은 풀이를 제출한 많은 사람에게 의미 있는 피드백을 어떻게 제공할지 하는 점이에요. 이 잠재적으로 거대한 작업의 범위를 줄이는 데 도움이 되고자, 풀이는 "표현"으로 정규화돼요. 예를 들어 Ruby 트랙의 TwoFer 연습 문제에 최근 제출된 500건 중 약 380건은 고유한 것으로 간주돼요(코드 서식이나 주석처럼 사소한 요소를 기준으로 정규화한다면 말이에요). 여기서 함수나 변수 이름 같은 것까지 정규화해서 더 나아가면 그 수는 더 작아져서, 고유한 접근 방식이 250가지밖에 되지 않을 수도 있어요. Exercism 커뮤니티가 이 250가지 접근 방식에 어느 정도 피드백을 제공할 수 있다면, 앞으로 TwoFer에 제출되는 모든 풀이의 약 99%에 대해 유효한 피드백을 미리 준비해 둘 수 있기를 바라요. 개념 연습 문제에서는 풀이의 공간이 훨씬 더 작아질 거예요. 개념 연습 문제는 특정한 방식으로 풀리도록 의도적으로 설계될 테니까요.
_리프리젠터_는 풀이를 받아 정규화된 표현을 반환하는, 단 하나의 책임만 지닌 코드예요.
_표현_은 이름, 주석, 공백 등을 정규화한 상태로 풀이에서 본질만을 추출한 것이지만, 여전히 그 풀이가 택한 접근 방식을 고유하게 식별해요. 두 가지 서로 다른 방식으로 같은 연습 문제를 풀었다면 그 두 풀이의 표현이 같아서는 안 돼요.
가장 단순한 리프리젠터는 그저 풀이의 소스 코드를 반환하는 것이에요. 하지만 본질적이지 않은 세부 사항에서만 차이가 나는 풀이들이 같은 표현을 갖도록 하는 것이 목표이므로, 리프리젠터는 하나 이상의 정규화를 적용해야 해요.
풀이에 대한 정규화된 표현이 만들어지면, 검증을 거친 멘토들로 구성된 팀이 그 풀이를 살펴보고 필요하다면 의견을 남겨요. 그러면 이 의견들은 같은 표현을 가진 새로운 풀이마다 자동으로 남겨져요. 표현이 일치하는 예전 풀이에는 알림이 전송돼요.
각 언어에는 그 언어로 작성된 자체 리프리젠터가 있어요. 웹사이트는 리프리젠터와 학생들의 제출 사이에서 오케스트레이터 역할을 해요.
각 리프리젠터는 Exercism GitHub 조직의 <track_slug>-representer라는 이름의 저장소에 있어요(예: exercism/ruby-representer).
기존 리프리젠터는 여기에서 확인할 수 있어요.
기존 리프리젠터를 돕는 데 참여하고 싶다면, 해당 저장소에 도움을 줄 수 있는 곳이 있는지 묻는 이슈를 열어 주세요. 아직 리프리젠터가 없는 언어를 위해 리프리젠터를 만들고 싶다면, 리프리젠터 만들기 안내를 따라 주세요.
리프리젠터를 만드는 방법을 더 알아보려면 다음 문서를 참고해요: