Ένα από τα προβλήματα που αντιμετωπίζει η κοινότητα του Exercism είναι πώς να παρέχει ουσιαστική ανατροφοδότηση σε πολλούς ανθρώπους που δίνουν πολλές λύσεις σε πολλές διαφορετικές ασκήσεις. Για να μειωθεί το εύρος αυτού του δυνητικά τεράστιου έργου, οι λύσεις κανονικοποιούνται σε "representations". Για παράδειγμα, από τις 500 πιο πρόσφατες υποβολές στην άσκηση TwoFer του track Ruby, περίπου 380 από αυτές θα θεωρούνταν μοναδικές (αν κανονικοποιήσεις αγνοώντας ασήμαντα πράγματα όπως η μορφοποίηση του κώδικα και τα σχόλια). Αν τις κανονικοποιήσεις ακόμη περισσότερο (κανονικοποιώντας πράγματα όπως ονόματα συναρτήσεων ή μεταβλητών), ο αριθμός γίνεται ακόμη μικρότερος, οπότε μπορεί να υπάρχουν μόνο 250 μοναδικές προσεγγίσεις. Αν η κοινότητα του Exercism μπορεί να δώσει ανατροφοδότηση για αυτές τις 250 προσεγγίσεις, τότε ελπίζουμε να έχουμε έτοιμη έγκυρη ανατροφοδότηση για περίπου το 99% όλων των μελλοντικών υποβολών για το TwoFer. Με τις Concept Exercises ο χώρος των λύσεων θα είναι ακόμη μικρότερος, γιατί οι Concept Exercises θα έχουν σκόπιμα σχεδιαστεί ώστε να λύνονται με έναν συγκεκριμένο τρόπο.
Ένας Representer είναι ένα κομμάτι κώδικα με μία και μοναδική ευθύνη: να παίρνει μια λύση και να επιστρέφει το κανονικοποιημένο representation της.
Ένα representation είναι η εξαγωγή της ουσίας μιας λύσης, με κανονικοποιημένα ονόματα, σχόλια, κενά κ.λπ., που ωστόσο εξακολουθεί να προσδιορίζει μοναδικά την προσέγγιση που ακολουθήθηκε. Δύο διαφορετικοί τρόποι επίλυσης της ίδιας άσκησης δεν πρέπει να έχουν το ίδιο representation.
Ο πιο απλός Representer είναι αυτός που απλώς επιστρέφει τον πηγαίο κώδικα της λύσης. Ωστόσο, επειδή στόχος μας είναι να έχουμε το ίδιο representation για λύσεις που διαφέρουν μόνο σε μη ουσιώδεις λεπτομέρειες, ο Representer θα πρέπει να εφαρμόζει μία ή περισσότερες κανονικοποιήσεις.
Μόλις έχουμε ένα κανονικοποιημένο representation για μια λύση, μια ομάδα εγκεκριμένων μέντορων θα εξετάσει τη λύση και θα σχολιάσει πάνω της (αν χρειάζεται). Αυτά τα σχόλια θα υποβάλλονται στη συνέχεια αυτόματα σε κάθε νέα λύση με το ίδιο representation. Για παλιές λύσεις με representation που ταιριάζει, θα στέλνεται μια ειδοποίηση.
Κάθε γλώσσα προγραμματισμού έχει τον δικό της representer, γραμμένο σε αυτή τη γλώσσα. Η ιστοσελίδα λειτουργεί ως ενορχηστρωτής ανάμεσα στον representer και στις υποβολές των μαθητών.
Κάθε representer ζει στον οργανισμό του Exercism στο GitHub, σε ένα αποθετήριο με το όνομα <track_slug>-representer (π.χ. exercism/ruby-representer).
Μπορείς να δεις τους υπάρχοντες representers εδώ.
Αν θέλεις να βοηθήσεις σε έναν υπάρχοντα Representer, άνοιξε ένα issue στο αποθετήριό του και ρώτησε αν υπάρχει κάπου που μπορείς να βοηθήσεις. Αν θέλεις να δημιουργήσεις έναν Representer για μια γλώσσα που δεν έχει ακόμη, ακολούθησε τις οδηγίες για τη δημιουργία ενός Representer.
Μπορείς να χρησιμοποιήσεις τα παρακάτω έγγραφα για να μάθεις περισσότερα για το πώς φτιάχνεις έναν representer: