Πρόγραμμα σπουδών


Ένα track του Exercism με πλήρεις δυνατότητες έχει δύο τύπους ασκήσεων: τα Concept Exercises και τα Practice Exercises. Είναι ριζικά διαφορετικά μεταξύ τους και αλληλοσυμπληρώνονται πολύ καλά.

Τα Concept Exercises ενός track είναι ασκήσεις σχεδιασμένες να διδάσκουν μεμονωμένες έννοιες που αποτελούν τη βάση μιας συγκεκριμένης γλώσσας προγραμματισμού. Αυτές οι έννοιες σχηματίζουν μια διδακτέα ύλη.

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

Ο στόχος της διδακτέας ύλης

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

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

Με τη λύση της άσκησης, ο μαθητής ξεκινά τη διαδικασία εξοικείωσης με την έννοια. Η κατανόηση έρχεται κυρίως μέσα από την πράξη, πολύ λιγότερο μέσα από επεξηγήσεις. Το επεξηγηματικό περιεχόμενο υπάρχει για να εισάγει τον μαθητή στις ιδέες που χρειάζεται για να λύσει την άσκηση (εξ ου και η επιλογή του ονόματος αρχείου, "introduction.md").

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

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

Βασική δομή

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

Μεταφορά και δανεισμός

Αξίζει τον κόπο να δεις πώς έχουν αναπτύξει τα Concept Exercises τους άλλα track γλωσσών. Μπορείς να βρεις παραδείγματα Concept Exercises από άλλα track γλωσσών εδώ.

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

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

Μη συμπεριλαμβάνεις έννοιες μόνο και μόνο επειδή το κάνουν άλλα track.

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

Για παράδειγμα, στη Go δεν υπάρχουν enums. Αντ' αυτού, το δέντρο εννοιών της Go εισάγει σταθερές και διδάσκει πώς να χρησιμοποιείς σταθερές σε εκείνου του είδους την περίπτωση όπου σε άλλες γλώσσες θα χρησιμοποιούσες enums.

Ζήτα βοήθεια

Μη διστάσεις να ζητήσεις βοήθεια. Είναι καλύτερα να ρωτήσεις από την αρχή ή όσο δουλεύεις πάνω σε μια άσκηση, παρά να το συζητήσεις κατά τη διάρκεια του code review.

Στο GitHub μπορείς να αναφέρεις την ομάδα @exercism/learning-mode. Στο φόρουμ του Exercism, άνοιξε ένα issue στην κατηγορία Exercism Support.

Ξεκινώντας

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

Ξεκινάμε με το απολύτως απαραίτητο σύνολο εννοιών: αυτές που είναι πιο θεμελιώδεις για να γράψεις οτιδήποτε στη γλώσσα. Προσπαθούμε επίσης να ξεκινήσουμε με έννοιες που είναι πιο οικείες στον μέσο προγραμματιστή. Το οικείο είναι καλό. Το οικείο δε μπερδεύει.

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

Αναπτύσσοντας την πρώτη άσκηση

Αντί να προσπαθήσεις να σχεδιάσεις ολόκληρο το δέντρο εννοιών εκ των προτέρων, ξεκίνα απλώς με την πρώτη άσκηση. Στόχος της πρώτης άσκησης είναι να επιτρέψει στον μαθητή να αρχίσει να μαθαίνει με όσο το δυνατόν λιγότερη τριβή. Κάνει το πρώτο κιόλας βήμα για να εξοικειωθεί με το πώς μοιάζει ο κώδικας σε αυτή τη γλώσσα. Μπορεί να γράψει ένα μικρό κομμάτι κώδικα ή ίσως απλώς να κάνει δύο προσθήκες σε έναν σκελετό για να ολοκληρώσει την άσκηση. Οι μαθητές έχουν ήδη λύσει το "Hello, World!" για να αποκτήσουν πρόσβαση σε αυτή την άσκηση. Όμως στο "Hello, World!" αλλάζουν μόνο τη διατύπωση. Όλη η σύνταξη της γλώσσας μπορεί να τους είναι ακόμα άγνωστη. Προσπάθησε να βελτιστοποιήσεις για μια γρήγορη νίκη και για να εξοικειωθούν οι μαθητές αρκετά με τα απολύτως απαραίτητα της σύνταξης, ώστε να προχωρήσουν με σιγουριά.

Διάβασε περισσότερα για την ανάπτυξη της πρώτης άσκησης.

Οι επόμενες ασκήσεις

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

Διάβασε περισσότερα για την ανάπτυξη των επόμενων ασκήσεων.

Και μετά τι;

Εδώ είναι που συχνά αρχίζει να γίνεται ενδιαφέρον. Υπάρχουν τόσα πολλά που θα μπορούσες να εισαγάγεις σε αυτό το σημείο. Πώς αποφασίζεις ποιες έννοιες να πιάσεις μετά;

Λίγο-πολύ δεν έχει και τόση σημασία. Όσο ξεκινάς από κάπου που φαίνεται λογικό, όλα θα πάνε καλά.

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

Μη μετατρέπεις Practice Exercises

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

Ένα καλό Concept Exercise είναι συνήθως ένα κακό Practice Exercise, και το αντίστροφο. Επειδή οι στόχοι των Practice Exercises και των Concept Exercises είναι εντελώς διαφορετικοί, δεν παίρνουμε Practice Exercises και δεν τα μετατρέπουμε σε Concept Exercises. Γράφουμε όλα τα Concept Exercises από το μηδέν ή τα βασίζουμε σε ιστορίες που έχουν φτιαχτεί ρητά για τον σκοπό της διδασκαλίας απλών εννοιών.

Ενθαρρύνουμε να προσπερνάς λεπτομέρειες

Μερικές φορές θα νιώσεις ότι υπάρχει αδιέξοδο. Η έννοια Α απαιτεί την κατανόηση της έννοιας Β, και η Β απαιτεί την κατανόηση της Α.

Σε αυτή την περίπτωση, απλοποίησε. Προσπέρασε κάποια πολυπλοκότητα στη μία, ώστε να εξοικειώσεις τους μαθητές με την άλλη. Δεν πειράζει καθόλου να πεις ότι κάτι θα εισαχθεί με περισσότερες λεπτομέρειες αργότερα και ότι για την ώρα ο μαθητής χρειάζεται να καταλάβει μόνο αυτό το ένα σημείο.

Οι έννοιες κατανοούνται βαθύτερα σταδιακά και με τον χρόνο.

Επιλέγοντας ιστορίες

Ένα Concept Exercise έχει πάντα μια ιστορία.

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

Για να δεις αν υπάρχουν έτοιμες ιστορίες που μπορείς να χρησιμοποιήσεις ή ασκήσεις που μπορείς να κάνεις fork, ρίξε μια ματιά στη λίστα με ιστορίες.

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

Συζήτησε ιδέες για ιστορίες με την ομάδα του Exercism. Έχουμε μεγάλη εμπειρία στο να βρίσκουμε κατάλληλες ιστορίες.

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

Συνεισφορές από την κοινότητα

Η δουλειά πάνω σε μια διδακτέα ύλη περιλαμβάνει δύο ξεχωριστές αλλά αλληλένδετες δραστηριότητες:

  1. Σχεδιασμός της διδακτέας ύλης: επιλογή και σειρά των εννοιών
  2. Υλοποίηση ασκήσεων: συγγραφή τεκμηρίωσης και δημιουργία ασκήσεων για τη διδασκαλία αυτών των εννοιών

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

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

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

Δημιουργώντας issues

Ακόμα δεν έχουμε βρει τον καλύτερο τρόπο να δημιουργούμε issues για τη δημιουργία Concept Exercises.

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

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

Θα ενημερώσουμε την τεκμηρίωση καθώς μαθαίνουμε καλύτερους τρόπους να αντιμετωπίζουμε αυτό το ζήτημα.