Η εμφάνιση της Logo
Το 1967 δημιουργήθηκε η εκπαιδευτική γλώσσα προγραμματισμού Logo. Στηρίζονταν στη γλώσσα Lisp, την πιο διάσημη γλώσσα συναρτησιακού(functional) προγραμματισμού και μια από τις δύο αρχαιότερες με ευρεία χρήση μέχρι τις μέρες μας.
Ένας από τους δημιουργούς της Logo, ο Seymour Papert, ήταν μαθητής του Jean Piaget.Ο Papert προσπάθησε να ενσωματώσει τη θεωρία του οικοδομισμού (costructivism) του Piaget στη διδασκαλία των μαθηματικών μέσω της Logo, επεκτείνοντας την μάλιστα στη θεωρία του εποικοδομισμού(constructionism). Σύμφωνα με αυτή, η μάθηση είναι πιο αποτελεσματική όταν οι μαθητές εμπλέκονται στη δημιουργία απτών αντικειμένων του πραγματικού κόσμου. Αποτέλεσμα της ιδέας αυτής ήταν η δημιουργία της "μαθηματοχώρας"(mathland), ενός περιβάλλοντος στο οποίο οι μαθητές μπορούσαν να εφαρμόσουν άμεσα τις ιδέες των μαθηματικών, δημιουργώντας προγράμματα με τη γλώσσα Logo. Όπως έλεγε ο ίδιος ...
Το 1992, ο Brian Harvey ανέπτυξε στο πανεπιστήμιο του Berkeley τη UBCLogo, την πιο διαδεδομένη έκδοση της Logo, την οποία φιλοδοξούσε να χρησιμοποιήσει για τη διδασκαλία της επιστήμης των υπολογιστών. Έγραψε μάλιστα μια σχετική τριλογία, την Computer Sience, Logo Style (είναι δωρεάν online για προσωπική χρήση.Σημ. Οι σύνδεσμοι είναι περίπου στη μέση της σελίδας).
To Scratch
Το 2006, κάνει την εμφάνισή του το Scratch, δημιουργώντας νέα δεδομένα στη διδασκαλία του προγραμματισμού σε μικρές ηλικίες. Δημιουργός του ήταν ο Mitchel Resnick, του Lifelong Kindergarten Group στο MIT Media Lab.
Ο Resnick, όντας μαθητής του Seymour Papert, μετέφερε τις ιδέες του εποικοδομισμού στο Scratch. Το Scratch είναι ένα εξαιρετικά εύχρηστο περιβάλλον στο οποίο οι μαθητές μπορούν να δημιουργήσουν τις δικές τους ιστορίες, προσομοιώσεις και γενικότερα να εκφραστούν καλλιτεχνικά. Κύρια χαρακτηριστικά του είναι:
- Οι εντολές έχουν τη μορφή μπλοκ, που είναι πλέον πολύ διαδεδομένη. Αυτή η δυνατότητα μηδενίζει την πιθανότητα εμφάνισης συντακτικών λαθών και επιτρέπει τους δημιουργούς να επικεντρώσουν την προσοχή τους στην υλοποίηση των ιδεών τους. Το πολύπλοκο συντακτικό αποτελεί έναν από τους πιο ανασταλτικούς παράγοντες στη χρήση επαγγελματικών γλωσσών για την εκμάθηση του προγραμματισμού από μαθητές μικρής ηλικίας.
- Άμεση οπτικοποίηση των αποτελεσμάτων, αφού αποδέκτες των εντολών είναι ένας ή περισσότεροι χαρακτήρες(sprites) που "ζουν" και κινούνται σε ένα κλειστό περιβάλλον(τη Σκηνή). Στην πραγματικότητα αποτελούν την εξέλιξη της χελώνας της Logo.
- Προγραμματισμός καθοδηγούμενος από γεγονότα(event driven).
- Παράλληλος προγραμματισμός(multithreading).
- Αντικειμενοστραφές περιβάλλον(object oriented) αφού στην πραγματικότητα τα sprites είναι αντικείμενα, με δυνατότητες αλλαγής του κώδικα την ώρα της εκτέλεσης(reflection).
Οι τελευταίες δυνατότητες δεν μπορούν να χρησιμοποιηθούν άμεσα από τον προγραμματιστή(μέσω κώδικα). Το Scratch προσφέρει στο χρήστη του τη δυνατότητα του επιτακτικού(imperative) προγραμματισμού και μόνο.
Η πρώτη έκδοση του Scratch(1.4) ήταν offline και υλοποιήθηκε με τη γλώσσα Squeak, μια διάλεκτο της Smalltalk(της πρώτης καθαρά Object Oriented γλώσσας). Η δεύτερη έκδοση(2013) ήταν online και υλοποιήθηκε σε Actionscript(Flash). Η τελευταία έκδοση (2019) στηρίζεται εξολοκλήρου σε JavaScript και είναι κατάλληλη και για φορητές συσκευές(Android, iOS).
Το Snap(πρώην BYOB)
To 2011, κάνει την εμφάνισή του το ΒΥΟΒ(Build Your Own Blocks). Επηρεασμένο από το Scratch(το Scratch 1.4 και το BYOB 3.1.1 είναι οπτικά πανομοιότυπα), αποτελεί επέκτασή του με στόχο να χρησιμοποιηθεί για τη διδασκαλία του προγραμματισμού και σε μεγαλύτερες ηλικίες(ακόμη και μετά τη μέση εκπαίδευση).
Δημιουργός του είναι ο Jens Moning υπό τις ιδέες και την καθοδήγηση του Brian Harvey, στο πανεπιστήμιο του Berkeley. Ο Harvey επηρεασμένος από τη Logo(βλ. παραπάνω) αλλά και από το βιβλίο Structure and Interpretation of Computer Programs(SICP) , το οποίο θεωρεί ως το καλύτερο βιβλίο για την επιστήμη των υπολογιστών που γράφτηκε ποτέ, επανέφερε τον functional προγραμματισμό στην εκπαίδευση.
Το SICP χρησιμοποιήθηκε από το MIT για το εισαγωγικό μάθημα στην επιστήμη υπολογιστών. Θεωρείται ένα από τα κλασσικά βιβλία του κλάδου. Βασίζεται στη γλώσσα Scheme, μια διάλεκτο της Lisp. Πολύ συζήτηση υπάρχει γύρω από το ζήτημα του κατά πόσο μια functional γλώσσα είναι καταλληλότερη για την εισαγωγή στον προγραμματισμό, σε σχέση με μια από τις διάσημες "επαγγελματικές γλώσσες"(C++, Java, Python κλπ). Πληροφορίες σχετικά με το θέμα μπορείτε να βρείτε
- Στο Structure and Interpretation of Computer Programs(SICP) της wikipedia, όπου υπάρχουν σύνδεσμοι τόσο στο ίδιο το βιβλίο(διατίθεται δωρεάν), όσο και σε κριτικές πάνω σε αυτό το θέμα.
- Σε σχετικά άρθρα του Brian Harvey.( Why Structure and Interptetation of Computer Programs matters και Scheme vs Python)
Πάντως θα πρέπει να σημειωθεί ότι το ΜΙΤ, χρησιμοποιεί πλέον την Python ως εισαγωγική γλώσσα.
Πρόκειται για πολύ βαθυστόχαστο βιβλίο, παρά το γεγονός ότι κάποιες ιδέες του επιδέχονται κριτικής. Ιδιαίτερη εντύπωση μου προκαλεί το γεγονός ότι χρησιμοποιήθηκε σε εισαγωγικό μάθημα, αφού κατά τη γνώμη μου σίγουρα θα δυσκολέψει και πτυχιούχους. Αξίζει πάντως να διαβαστεί από κάθε επιστήμονα υπολογιστών.Η προσωπική μου άποψη ...
Τα χαρακτηριστικά του BYOB
Το BYOB κληρονόμησε όλα τα χαρακτηριστικά του Scratch(εντολές σε μορφή μπλοκ, περιβάλλον(sprites και σκηνή), event driven, παράλληλος και imperative προγραμματισμός) και προσέθεσε πολλά ακόμη με σημαντικότερα:
- Τη δημιουργία υποπρογραμμάτων(διαδικασιών και συναρτήσεων). (Σημ. αυτό υπάρχει πλέον και στο Scratch 2.0 αλλά πολύ περιορισμένο σε σχέση με τις δυνατότητες που προσφέρει το BYOB).
- Την υποστήριξη συναρτησιακού προγραμματισμού.
- Ως άμεση συνέπεια του παραπάνω την υποστήριξη first class και high order διαδικασιών και συναρτήσεων, δηλαδή τα υποπρογράμματα αντιμετωπίζονται ως δεδομένα και μπορούν να περαστούν ως παράμετροι σε άλλα υποπρογράμματα. Οι διαδικασίες που γίνονται παράμετροι ονομάζονται first class, ενώ οι διαδικασίες που τις δέχονται ως παραμέτρους ονομάζονται high order.
- first class λίστες, μια δυνατότητα που εμφανίζεται πολύ περιορισμένα στο Scratch.
- Ανάκλαση(reflection) ,δηλαδή ο κώδικας του προγράμματος μπορεί να τροποποιήσει τον εαυτό του κατά τη διάρκεια της εκτέλεσης.
- First class sprites.
- Το παραπάνω επιτρέπει την υποστήριξη Object Oriented προγραμματισμού, υπό τη μορφή prototyping. Στο prototyping, δεν υπάρχουν κλάσεις και αντικείμενα, αλλά μόνο αντικείμενα τα οποία μπορεί να είναι είτε πρωτότυπα, είτε κλώνοι που προέρχονται από πρωτότυπα. Η μορφή αυτή απλοποιεί αρκετά τις ιδέες του Object Oriented προγραμματισμού, όπως είναι η κληρονομικότητα και ο πολυμορφισμός(στο μενού ΒΥΟΒ 3.1.1 θα βρείτε σχετικό παράδειγμα). Σημ. το prototyping το χρησιμοποιούν και "επαγγελματικές γλώσσες" όπως η Javascipt.
Όλα τα παραπάνω κάνουν το BYOB μοναδικό, αφού υποστηρίζει τα τρία βασικά παραδείγματα προγραμματισμού(imperative-επιτακτικός, functional - συναρτησιακός και Object Oriented - Αντικειμενοστραφής), χαρακτηριστικό που δύσκολα το συναντά κάποιος ακόμα και σε "επαγγελματικές γλώσσες".
Όπως αναφέρει ο Jens Moening(ελεύθερη απόδοση)
Αν στο παρελθόν θεωρούσαμε τη Logo, ως μια Lisp μεταμφιεσμένη σε BASIC, σήμερα μπορούμε να ισχυριστούμε ότι το BYOB είναι μια Scheme μεταμφιεσμένη σε Scratch.
To BYOB αναπτύχθηκε, όπως και το Scratch, σε γλώσσα Squeak.
To Snap
To Snap είναι ο online διάδοχος του BYOB(θα μπορούσαμε να πούμε ότι είναι το BYOB 4.0). Έχει υλοποιηθεί εξολοκλήρου σε Javacript/HTML5, γεγονός που σημαίνει ότι μπορεί να εκτελεστεί χωρίς καμία εγκατάσταση και από φορητές συσκευές(Android, iOS) όπως tablets και smartphones.
Αυτό που λείπει σε σχέση με το BYOB, πέρα από τα χαρακτηριστικά που σχετίζονται με το desktop όπως πχ το τοπικό δίκτυο, είναι η υποστήριξη του OOP. Αυτό το χαρακτηριστικό αναμένεται να επανέλθει στην έκδοση 4.1 (Σημείωση: Το χαρακτηριστικό αυτό υποστηρίζεται πλέον).
Το Snap βρίσκεται πλέον στην έκδοση 5(Ιούνιος 2019) και πέραν των επιπλέον δυνατοτήτων του(θα επανέλθω με σχετικό άρθρο), ο ιστότοπός του περιλαμβάνει πλέον, πλούσιο υποστηρικτικό/εκπαιδευτικό υλικό.
Το Snap χρησιμοποιείται εκτενώς στο εκπαιδευτικό πρόγραμμα The Beauty and Joy of Computing του UC Berkeley που απευθύνεται σε μαθητές λυκείου αλλά και όσους, γενικότερα, επιθυμούν να κάνουν μια πρώτη γνωριμία με την επιστήμη των υπολογιστών, που όμως δε θα είναι επιφανειακή.