Συμβουλές καθοδήγησης

Μια συλλογή συμβουλών για καθοδήγηση


Σημειώσεις καθοδήγησης

Ένα από τα μεγαλύτερα βοηθήματα στην καθοδήγηση μπορεί να είναι ένα αρχείο όπου κρατάς σημειώσεις για κάθε άσκηση που καθοδηγείς. Μπορεί να διαπιστώσεις ότι πολλές λύσεις επωφελούνται από τις ίδιες υποδείξεις, οπότε, κρατώντας σημειώσεις, δεν χρειάζεται να ξαναγράφεις τις ίδιες υποδείξεις από μνήμης. Και, έχοντας τις υποδείξεις σε ένα σημείο, μπορείς να τις βελτιώνεις συνεχώς με τον καιρό ώστε να γίνονται πιο σαφείς.

Αν δεν είσαι σίγουρος πώς να ξεκινήσεις με τις σημειώσεις σου, μπορεί να βρεις ένα αρχείο mentoring.md για την άσκηση της διαδρομής σου στο exercism/website-copy/tracks. Αν υπάρχει, μπορεί να περιλαμβάνει παραδείγματα λογικών λύσεων, μαζί με συνηθισμένες υποδείξεις και σημεία συζήτησης που θα προκαλέσουν περαιτέρω συζήτηση. Αν δεν υπάρχει, ίσως θελήσεις να επιστρέψεις και να φτιάξεις ένα, αφού έχεις φτιάξει το δικό σου αρχείο σημειώσεων για αυτή την άσκηση.

Επίσης, ακόμα κι αν καθοδηγείς μόνο μία γλώσσα τώρα, μπορεί στο μέλλον να καθοδηγήσεις κι άλλες. Μπορεί να βοηθήσει να οργανώσεις τις σημειώσεις καθοδήγησής σου ανά διαδρομή αλλά και ανά όνομα άσκησης, καθώς διαφορετικές διαδρομές θα απαιτούν πιθανότατα διαφορετικές υποδείξεις για την ίδια άσκηση.

Οι σημειώσεις καθοδήγησης είναι χρήσιμες, είτε καθοδηγείς την άσκηση συχνά είτε σπάνια. Αν καθοδηγείς την άσκηση συχνά, γλιτώνεις πολλή δακτυλογράφηση από την αρχή, αφού μπορείς απλώς να κάνεις copy-paste από τις σημειώσεις σου. Αν καθοδηγείς την άσκηση σπάνια, μπορούν να σου θυμίσουν υποδείξεις που μπορεί να έχεις ξεχάσει μέσα στις εβδομάδες ή τους μήνες από την τελευταία φορά που την καθοδήγησες.

Δεν πειράζει οι σημειώσεις καθοδήγησης να διαφέρουν από καθοδηγητή σε καθοδηγητή. Να ένας τρόπος να τις δομήσεις, αλλά δεν είναι ο μόνος.

Συγχάρησε τον καθοδηγούμενο που πέρασε τα tests (αν τα πέρασε).

Αν η άσκηση βρίσκεται στην ουρά για μερικές μέρες, ίσως να το αναφέρεις με κάτι σαν:

Συγγνώμη που άργησε κάποιος να σου απαντήσει. Αυτή την περίοδο υπάρχει έλλειψη ενεργών καθοδηγητών JavaScript για το Resistor Color Duo.

Απαρίθμησε αυτά που σου αρέσουν στη λύση του καθοδηγούμενου. Για παράδειγμα:

  • Μου αρέσει που αυτή η λύση είναι περιεκτική και ευανάγνωστη.

  • Μου αρέσει η χρήση του indexOf.

  • Μου αρέσει που χρησιμοποιεί την προσέγγιση (first * 10) + second για να αποφεύγει τη μετατροπή από αριθμό σε συμβολοσειρά και πάλι πίσω σε αριθμό.

  • Μου αρέσει που δεν χρησιμοποιεί βρόχους/επανάληψη.

  • Μου αρέσει η αποδομημένη παράμετρος.

Στη συνέχεια μπορούν να ακολουθήσουν οι συνηθισμένες υποδείξεις σου.

Note

Μπορεί να βοηθήσει πολύ τον καθοδηγούμενο το να του δίνεις έναν σύνδεσμο για κάθε νέο χαρακτηριστικό της γλώσσας που παρουσιάζεις. Για παράδειγμα:

Δεν είναι απαραίτητο για αυτή την άσκηση, αλλά ίσως σκέψου να μετατρέψεις τη συνάρτηση σε συνάρτηση βέλους.

Αν και δεν θέλουμε να αποκαλύψουμε τη λύση, μερικές φορές ο καθοδηγούμενος μαθαίνει καλύτερα με το παράδειγμα. Το να βάλεις ένα απόσπασμα κώδικα σε μια συμπτυγμένη ενότητα λεπτομερειών μπορεί να δώσει αυτό το παράδειγμα, το οποίο ο καθοδηγούμενος μπορεί να επιλέξει να αναπτύξει ή όχι. Για παράδειγμα:

<details><summary>Παράδειγμα με spoiler</summary>

<pre>

export const decodedValue = ([firstColor, secondColor]) => COLORS.indexOf(firstColor) * 10 + COLORS.indexOf(secondColor)

</pre>

</details>

Προς το τέλος των σημειώσεων μπορεί να συμπεριλάβεις έναν σύνδεσμο προς μια δημοσιευμένη λύση που αποτυπώνει ολόκληρες τις υποδείξεις.

Στο τέλος ακριβώς των σημειώσεών σου μπορεί να θέλεις να βάλεις εκτενείς εξηγήσεις που ζητούν μερικές φορές οι καθοδηγούμενοι. Αυτές οι εξηγήσεις δεν εμφανίζονται συχνά, αλλά και πάλι καλό είναι να τις καταγράφεις την πρώτη φορά που τις χρησιμοποιείς, ώστε την επόμενη φορά, που μπορεί να είναι εβδομάδες ή μήνες αργότερα, να μη χρειάζεται να σκαρφιστείς την εξήγηση από το μηδέν. Για παράδειγμα, μερικές φορές ένας καθοδηγούμενος θα ρωτήσει πώς θα λειτουργούσε η προσέγγιση του πολλαπλασιασμού στο Ντουέτο Χρωμάτων Αντίστασης αν το μαύρο ήταν η πρώτη ζώνη για ένα αρχικό μηδενικό:

Το μαύρο ως πρώτη ζώνη είναι ένα καλό σημείο προς εξέταση, οπότε ας το εξετάσουμε. Το χρώμα της αντίστασης προορίζεται να αντιπροσωπεύει την ποσότητα των ωμ για την αντίσταση, και ένα αρχικό μηδενικό δεν θα χρησιμοποιούνταν σε μια αντίσταση με πολλές ζώνες. Άρα το μαύρο δεν θα ήταν πρώτη ζώνη. Εξάλλου, τα parseInt ή Number θα αφαιρέσουν επίσης το αρχικό μηδενικό.

Μια προαιρετική κατηγορία δεδομένων που μπορείς να κρατάς στις σημειώσεις καθοδήγησης είναι μια καταγραφή μετρήσεων επιδόσεων για διάφορες λύσεις ή προσεγγίσεις.

Μέτρηση επιδόσεων

Μια συνηθισμένη ανησυχία των καθοδηγούμενων είναι το πόσο αποδοτική είναι η λύση τους. Αυτό ισχύει ιδιαίτερα για γλώσσες "χαμηλότερου επιπέδου" όπως η C, η C++, η Go και η Rust. Μαζί με το πόσο ιδιωματικός είναι ο κώδικας, οι καθοδηγούμενοι άλλων γλωσσών ανησυχούν συχνά και για την αποδοτικότητα του κώδικά τους.

Note

Η μέτρηση επιδόσεων δεν είναι κάτι που αναμένεται να κάνει ένας καθοδηγητής. Ωστόσο, οι καθοδηγούμενοι εντυπωσιάζονται συχνά ιδιαίτερα από το πώς συγκρίνεται μια μέτρηση της λύσης τους με άλλες προσεγγίσεις.

Η Go είναι μια ιδιαίτερα φιλική διαδρομή για μέτρηση επιδόσεων, καθώς οι μετρήσεις επιδόσεων περιλαμβάνονται συχνά στο αρχείο με τα tests. Άλλες γλώσσες μπορεί να απαιτούν λίγο ψάξιμο για να καθορίσεις ποια μέθοδος θα δούλευε καλύτερα για σένα. Για παράδειγμα, αν χρησιμοποιείς μόνο τον διαδικτυακό επεξεργαστή, τότε θα ψάχνεις ένα μέρος για να τρέξεις μετρήσεις επιδόσεων διαδικτυακά. Ένα παράδειγμα είναι το JSBench.me, ένα διαδικτυακό εργαλείο μέτρησης επιδόσεων για JavaScript.

Αν τρέχεις τον κώδικα τοπικά, τότε έχεις την επιλογή να κατεβάσεις λογισμικό μέτρησης επιδόσεων που μπορείς να τρέξεις στον υπολογιστή σου. Για παράδειγμα, η Rust μπορεί να χρησιμοποιήσει το Criterion, ή το cargo bench με δοκιμές επιδόσεων.

Υπάρχουν τουλάχιστον δύο τρόποι να παρακολουθείς τις μετρήσεις επιδόσεων. Ένας τρόπος είναι να κρατάς μια συνεχή λίστα με όλες τις μετρήσεις που κάνεις, αλλά αυτό μπορεί να γίνει δυσκίνητο αν η λίστα μεγαλώσει. Άλλος τρόπος είναι να κρατάς μια λίστα με αντιπροσωπευτικές μετρήσεις για διαφορετικές προσεγγίσεις. Οι καθοδηγούμενοι συχνά θέλουν να δουν τον κώδικα των πιο γρήγορων προσεγγίσεων, οπότε αν μια πιο γρήγορη προσέγγιση είναι δημοσιευμένη, μάλλον θα εκτιμηθεί πολύ να δώσεις τον σύνδεσμό της.

Caution

Αν δίνεις σύνδεσμο προς μια λύση που μέτρησες, φρόντισε να δώσεις σύνδεσμο προς τη δημοσιευμένη λύση και όχι προς τη συζήτηση καθοδήγησης. Δεν δημοσιεύονται όλες οι λύσεις που περνούν από καθοδήγηση.

Σημειώσεις καθοδήγησης που δεν αφορούν συγκεκριμένη άσκηση

Μπορεί να υπάρχουν χαρακτηριστικά της γλώσσας που διαπιστώνεις ότι τα εξετάζεις σε περισσότερες από μία ασκήσεις. Όταν ετοιμάζεσαι να κάνεις copy-paste μια υπόδειξη από ένα αρχείο σε άλλο, ίσως σκέψου να τη βάλεις σε δικό της αρχείο. Ξανά, ένα πλεονέκτημα του να κρατάς μια υπόδειξη σε ένα σημείο είναι ότι γίνεται ευκολότερο να τη βελτιώνεις με τον καιρό. Κάνει επίσης ευκολότερο να τη βρεις όταν τη χρησιμοποιείς για μια άσκηση που δεν τη χρησιμοποίησες ξανά. Αντί να προσπαθείς να θυμηθείς σε ποια άσκηση ανέφερες την υπόδειξη παλιότερα, μπορείς να πας κατευθείαν στο δικό της αρχείο.

Όταν ο καθοδηγούμενος έχει μια ερώτηση

Οι καθοδηγούμενοι ενθαρρύνονται να προσδιορίζουν τι περιμένουν να πάρουν από τη συζήτηση καθοδήγησης. Συχνά το εκφράζουν με τη μορφή ερώτησης. Αν η ερώτηση είναι κάτι για το οποίο δεν ξέρεις την απάντηση και δεν σε ενδιαφέρει, δεν πειράζει να αφήσεις το αίτημα καθοδήγησης για άλλον καθοδηγητή.

Αν δεν ξέρεις την απάντηση αλλά θέλεις να τη βρεις, τότε ίσως είναι καλύτερο να μην αναλάβεις το αίτημα καθοδήγησης μέχρι να μάθεις την απάντηση. Αν μέχρι τότε το αίτημα έχει φύγει, τουλάχιστον έμαθες κάτι και δεν έβαλες τον καθοδηγούμενο να περιμένει.

Μια εξαίρεση σε αυτό μπορεί να είναι αν το αίτημα καθοδήγησης βρίσκεται ήδη στην ουρά για αρκετές μέρες ή περισσότερο. Σε αυτή την περίπτωση μπορεί να θέλεις να αναλάβεις το αίτημα και να δώσεις όποια σχόλια μπορείς, και να ενημερώσεις τον καθοδηγούμενο ότι θα του απαντήσεις σχετικά με την ερώτησή του. Φυσικά, είναι σημαντικό να το ακολουθήσεις, είτε για να ενημερώσεις τον καθοδηγούμενο για την απάντηση, είτε για να του πεις ότι δεν μπόρεσες να τη βρεις. Αν δεν μπόρεσες να βρεις την απάντηση, μπορεί να είναι χρήσιμο για τον καθοδηγούμενο να περιγράψεις με ποιους τρόπους προσπάθησες να τη βρεις. Ο καθοδηγούμενος μπορεί να απαντήσει με άλλους τρόπους για να βρεθεί η απάντηση. Η απάντηση μπορεί να βρεθεί μέσα από τη συνεργασία σου με τον καθοδηγούμενο.

Αν έχεις εξαντλήσει κάθε τρόπο που ξέρεις για να βρεις την απάντηση, μπορείς να προτείνεις στον καθοδηγούμενο να τερματίσει τη συζήτηση και να υποβάλει ξανά το αίτημά του, με την ελπίδα ότι κάποιος άλλος καθοδηγητής μπορεί να δώσει την απάντηση. Αν θέλει, ο καθοδηγούμενος μπορεί να γράψει στην τερματισμένη συζήτηση για να μοιραστεί την απάντηση μαζί σου μόλις τη μάθει. Και αντίστοιχα, αν μάθεις την απάντηση αργότερα, μπορείς να επιστρέψεις στην τερματισμένη συζήτηση και να ενημερώσεις τον καθοδηγούμενο.

Αν ξέρεις την απάντηση και θέλεις να την απαντήσεις, ένα καλό σημείο για να το κάνεις είναι ανάμεσα στο να πεις στον καθοδηγούμενο τι σου αρέσει στη λύση του και στο να προτείνεις άλλες προσεγγίσεις.

Κώδικας που αποτυγχάνει

Ο κώδικας μπορεί να αποτύχει είτε επειδή δεν περνάει όλα τα tests είτε επειδή δεν μεταγλωττίζεται ή δεν ικανοποιεί τον διερμηνευτή.

Οι διάφοροι καθοδηγητές έχουν διαφορετικές διαθέσεις ή/και υπομονή για να ασχοληθούν με κώδικα που αποτυγχάνει, κάτι που μπορεί να εξαρτάται εν μέρει από το πώς παρουσιάζεται, καθώς ο κώδικας που αποτυγχάνει δεν παρουσιάζεται πάντα με τον ίδιο τρόπο.

Μερικές φορές ένας καθοδηγούμενος θα πει ότι δοκίμασε μια άλλη προσέγγιση και δεν δούλεψε, και θα ρωτήσει γιατί δεν δούλεψε. Ο κώδικας μπορεί να μην παρέχεται καν, ή να έχει αναρτηθεί σε ένα πρακτικά δυσανάγνωστο σχόλιο αντί σε μια υποβολή.

Μια λύση που δοκιμάστηκε στον διαδικτυακό επεξεργαστή μπορεί να υποβληθεί για αίτημα καθοδήγησης μόνο αν έχει περάσει όλα τα tests. Ένας από τους λόγους είναι για να μπορεί ο καθοδηγητής να επικεντρωθεί στο να προτείνει βελτιώσεις ή άλλες προσεγγίσεις στον υπάρχοντα κώδικα που δουλεύει. Το να κάνεις debug σε κώδικα δεν είναι απαραίτητα κάτι που θέλει ή αναμένεται να κάνει ένας καθοδηγητής. Ωστόσο, μια λύση που αποτυγχάνει και υποβάλλεται μέσω της γραμμής εντολών μπορεί να υποβληθεί για αίτημα καθοδήγησης, με τον καθοδηγούμενο να ζητά βοήθεια για να τη λύσει.

Αν ο κώδικας που αποτυγχάνει δεν έχει δοθεί, και η προσέγγιση που περιγράφεται δεν ακούγεται καλή, μπορεί να αρκεί να προτείνεις ότι, αντί να χρησιμοποιήσει την αποτυχημένη προσέγγιση, μια άλλη προσέγγιση θα μπορούσε να είναι κάποια που δεν είναι ούτε η αποτυχημένη ούτε αυτή που χρησιμοποίησε και πέρασε. Ή μπορεί να αρκεί να εξηγήσεις γιατί η προσέγγιση που χρησιμοποίησε είναι καλύτερη από την αποτυχημένη, χωρίς να μπεις σε λεπτομέρειες για το ποιο bug υπήρχε στην αποτυχημένη προσέγγιση.

Για παράδειγμα, μια συνηθισμένη περίπτωση είναι καθοδηγούμενοι να δυσκολεύονται με το Όνομα Ρομπότ. Είτε τα tests ξεπερνούν το χρονικό όριο είτε αποτυγχάνουν να παράγουν αρκετά ονόματα, και θέλουν να μάθουν πώς να το διορθώσουν. Αν έχεις τη διάθεση και την υπομονή, μπορείς βέβαια να αναλύσεις τον κώδικά του και να προτείνεις πώς να αντιμετωπιστεί το πρόβλημα. Ή μπορείς να εξηγήσεις ότι ο έλεγχος τυχαία παραγόμενων ονομάτων προκαλεί περισσότερες συγκρούσεις όσο περισσότερα ονόματα παράγονται, και να προτείνεις ότι μια άλλη προσέγγιση θα μπορούσε να είναι να παράγει τα ονόματα διαδοχικά και μετά να τα ανακατέψει.

Αν ο κώδικας που αποτυγχάνει έχει επικολληθεί σε ένα πρακτικά δυσανάγνωστο σχόλιο, μπορεί να θέλεις να δώσεις όποια σχόλια μπορείς για τη λύση που περνάει, και να προτείνεις να υποβάλει τον κώδικα από το σχόλιο ως άλλη υποβολή. Μπορείς επίσης να προτείνεις στον καθοδηγούμενο να ελέγξει μετά τα σφάλματα της αποτυχημένης υποβολής ως οδηγό για το πού βρίσκεται το πρόβλημα.

Αν ο κώδικας βρίσκεται σε μια αποτυχημένη υποβολή, τότε μπορεί να βοηθήσει να κατευθύνεις τον καθοδηγούμενο να ελέγξει τα σφάλματα της εκτέλεσης των tests. Κάποιες γλώσσες χρειάζονται λίγη περισσότερη καθοδήγηση από άλλες για το πώς να διαβάζεις σφάλματα ή αποτελέσματα tests. Μπορεί να βοηθήσει να παραθέσεις ένα ή περισσότερα σημεία από τα σφάλματα και να εξηγήσεις στον καθοδηγούμενο τι σημαίνουν.

Σε τελική ανάλυση, δεν είναι ευθύνη του καθοδηγητή να διορθώσει τον κώδικα του καθοδηγούμενου που αποτυγχάνει, αλλά ο καθοδηγητής, αν θέλει, μπορεί να προτείνει τρόπους στον καθοδηγούμενο για να τον διορθώσει μόνος του.

Πώς να χειρίζεσαι το συνεχές της ουράς

Μπορεί να γραφτείς για να καθοδηγήσεις μια διαδρομή, αλλά να μη βλέπεις ποτέ ασκήσεις στην ουρά της για καθοδήγηση. Μπορεί να σκεφτείς ότι κάτι πάει στραβά, αλλά υπάρχουν τουλάχιστον δύο λόγοι γι' αυτό. Ένας λόγος είναι ότι ο κόσμος μπορεί να μη ζητά καθοδήγηση στη διαδρομή αυτή την περίοδο. Μερικές φορές μια διαδρομή μπορεί να έχει περιόδους αδράνειας. Άλλος λόγος είναι ότι άλλοι καθοδηγητές μπορεί να αναλαμβάνουν τα αιτήματα πριν τα δεις. Αυτό είναι πιθανό να συμβαίνει σε μια δημοφιλή διαδρομή που έχει πολλούς ενεργούς καθοδηγητές.

Αν υπάρχουν πολλά αιτήματα στην ουρά, υπάρχουν μερικοί τρόποι να τα αντιμετωπίσεις. Μπορεί να θέλεις να ξεκινήσεις από τα παλαιότερα προς τα νεότερα, ώστε όσοι περίμεναν περισσότερο να εξυπηρετηθούν πρώτοι. Ή μπορεί να επιλέξεις να δουλέψεις από τα νεότερα προς τα παλαιότερα, ειδικά αν τα παλαιότερα περιμένουν ήδη πολύ καιρό. Έτσι, όσοι ήταν πρόσφατα ενεργοί δεν χρειάζεται να περιμένουν μέχρι να διεκπεραιωθούν τα εκκρεμή αιτήματα.

Αν υπάρχουν πολλά αιτήματα για την ίδια άσκηση, μπορεί να θέλεις να τα δουλέψεις σε παρτίδες της ίδιας άσκησης για να διατηρήσεις τη συγκέντρωσή σου, αντί να πηγαίνεις από την άσκηση Α στην άσκηση Β και πίσω στην άσκηση Α.

Μπορεί ένα αίτημα για μια άσκηση που δεν σε ενδιαφέρει να κάθεται εκεί για μέρες ή εβδομάδες. Μπορείς να επιλέξεις να μην το αναλάβεις, ελπίζοντας ότι κάποιος άλλος καθοδηγητής θα το πάρει, ή μπορεί να λειτουργήσει ως κίνητρο για να δοκιμάσεις κι εσύ την άσκηση. Ένα πράγμα που μπορεί να βοηθήσει είναι να κοιτάξεις τη λύση που υποβλήθηκε. Μπορεί να χρησιμοποιεί μια προσέγγιση που δεν είχες σκεφτεί, και αυτή η προσέγγιση μπορεί να κάνει την επίλυση της άσκησης πιο ελκυστική για σένα. Αλλά, αν κοιτάξεις τον κώδικα και εξακολουθείς να μην ενδιαφέρεσαι να λύσεις την άσκηση, δεν έγινε κακό. Το ότι κοιτάς ένα αίτημα καθοδήγησης δεν σημαίνει ότι πρέπει να πατήσεις το κουμπί "Ξεκίνα την καθοδήγηση".