Одна з проблем, з якими стикається спільнота Exercism, полягає в тому, як надати змістовний відгук багатьом людям, які надсилають багато рішень до багатьох різних вправ. Щоб хоч трохи зменшити обсяг цього потенційно величезного завдання, рішення нормалізують у «representations». Наприклад, із 500 останніх надісланих рішень до вправи TwoFer на Ruby близько 380 вважалися б унікальними (якщо нормалізувати дрібні речі, як-от форматування коду та коментарі). Якщо нормалізувати їх ще дужче (наприклад, нормалізувати назви функцій чи змінних), це число стане ще меншим, тож може залишитися лише 250 унікальних підходів. Якщо спільнота Exercism зможе надати якийсь відгук на ці 250 підходів, то є надія, що в нас буде готовий слушний відгук для ~99% усіх майбутніх надісланих рішень до TwoFer. З концептуальними вправами простір рішень буде ще меншим, бо концептуальні вправи навмисно спроєктовані так, щоб їх розвʼязували в певний спосіб.
Representer - це фрагмент коду, єдина відповідальність якого - взяти рішення й повернути його нормалізоване representation.
representation - це виокремлення суті рішення з нормалізованими назвами, коментарями, пробілами тощо, яке все одно однозначно визначає обраний підхід. Два різні способи розвʼязати ту саму вправу не повинні мати однаковий representation.
Найпростіший Representer - той, що просто повертає початковий код рішення. Однак, оскільки наша мета - мати однаковий representation для рішень, які різняться лише несуттєвими деталями, Representer має застосовувати одну або кілька нормалізацій.
Коли ми маємо нормалізований representation для рішення, команда перевірених наставників переглядає його й за потреби коментує. Ці коментарі потім автоматично додаються до кожного нового рішення з тим самим representation. Для старих рішень із таким самим representation надходить сповіщення.
Кожна мова має власний representer, написаний цією ж мовою. Сайт виконує роль оркестратора між representer і надісланими рішеннями учнів.
Кожен representer живе в організації Exercism на GitHub у репозиторії з назвою <track_slug>-representer (наприклад, exercism/ruby-representer).
Перелік наявних representer можна переглянути тут.
Щоб долучитися до роботи над наявним Representer, створіть issue у його репозиторії й запитайте, де потрібна допомога. Щоб створити Representer для мови, яка його ще не має, скористайтеся інструкціями зі створення Representer.
Дізнатися більше про створення representer можна з таких документів: