Πέμπτη, 8 Απριλίου 2021

Η Μ2000 ως εκπαιδευτικό εργαλείο

Πρόσφατα στο φόρουμ Το Στέκι των Πληροφορικών άνοιξε το θέμα “Ποια γλώσσα θέλετε για τη Γ΄ Λυκείου;”. Ο θεματοθέτης με όνομα μέλους alkisg, κάνει μια εισήγηση για την αλλαγή της υπάρχουσας γλώσσας προγραμματισμού ΓΛΩΣΣΑ και προτείνει την javascript. Ποιός είναι όμως πραγματικά ο θεματοθέτης; Είναι ο Άλκης Γεωργόπουλος, καθηγητής ΠΕ19, ο οποίος εκτός των άλλων έχει συγγράψει το Διερμηνευτή της γλώσσας ΓΛΩΣΣΑ σε ένα περιβάλλον ανάπτυξης κώδικα.

Θυμάμαι την επικοινωνία που είχα μαζί του από το 2000, για θέματα πάνω στον διερμηνευτή του, και τότε του είχα αναφέρει ότι γράφω την Μ2000, με βασικό στόχο να υπάρχει μια γλώσσα για μαθητές που θα χρησιμοποιείται σε ένα περιβάλλον με γραφικά, με βάσεις δεδομένων και με πολυμέσα (εικόνα, ήχος, βίντεο). Στις βελτιώσεις του Διερμηνευτή της ΓΛΩΣΣΑΣ αναφέρεται το όνομά μου:


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

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

Η συμμετοχή μου στο φόρουμ έγινε με τρεις τρόπους:

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

  • Με προγράμματα παραδείγματα. Κάποια στιγμή τα παραδείγματα που έδωσα κρίθηκαν πολύ προχωρημένα και μετά από προειδοποίηση από τον Άλκη τα μετέφερα στο Blog της Μ2000, και τελικά διαγράφτηκαν από το φόρουμ του.

  • Την έκθεση (και όχι διαφήμιση) της προόδου ανάπτυξης της Μ2000, από τον Ιούλιο του 2015, με την έκδοση 8 της γλώσσας.

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

Ήρθε λοιπόν η συζήτηση για την νέα γλώσσα για την τρίτη Λυκείου (Γενικό Λύκειο), στις 20 Μαρτίου 2021. Όπως φάνηκε από τις απαντήσεις στο θέμα, ο θεματοθέτης γνώριζε ότι θα ανοίξει το θέμα, από το Π.Ε.ΚΑ.Π (Πανελλήνια Ένωση Καθηγητών Πληροφορικής), Δελτίο τύπου: “Συνάντηση για τα νέα Προγράμματα Σπουδών Πληροφορικής Δευτεροβάθμιας Επαγγελματικής Εκπαίδευσης” Αθήνα 31 Μαρτίου 2021. Άρα το θέμα του θα γίνονταν απλά παπαγαλάκι για διαμόρφωση γνώμης.

Οι προτάσεις για τις γλώσσες στέκονται σε δυο: javascript και python. Η κύρια διαφορά τους είναι ως προς το εύρος των συσκευών για εκτέλεση: Η javascript χρησιμοποιείται σε περιηγητές ιστοσελίδων, δηλαδή μπορεί να εκτελεστεί σε οποιαδήποτε συσκευή. H python έχει πολλές παραλλαγές και έτσι εκτελείται σε διάφορα λειτουργικά, αλλά όχι μέσα από ιστοσελίδες τοπικά (front end) αλλά σε επίπεδο εξυπηρετητή (server, back end). Ζήτησα στο ερωτηματολόγιο στην αρχή του θέματος να μπει και η Μ2000, και τελικά μπήκε μια επιλογή “Άλλη (πείτε ποια στα σχόλια)”. Σε επόμενο μήνυμα έκανα θέμα για τη ποιότητα των βιβλιοθηκών (frameworks) των προτεινόμενων γλωσσών και των προγραμμάτων παραδειγμάτων. Οι βιβλιοθήκες ανοικτού κώδικα δεν είναι ό,τι καλύτερο, έχουν πολλά προβλήματα. Επίσης η ποιότητα των παραδειγμάτων (αναφοράς) είναι κάκιστη. Υπάρχουν εξαιρέσεις αλλά λόγω της συμμετοχής μη επαγγελματιών ενδέχεται και το καλό να εκφυλιστεί. Είναι δύσκολο να υπάρχει έλεγχος στην ανάπτυξη έργου που συμμετέχουν πολλοί, τόσο ως προς τις αποφάσεις, όσο και από το πώς η κάθε συμμετοχή ενσωματώνεται ως κώδικας.

Έθεσα ακόμα ένα ζήτημα στον γενικότερο προβληματισμό για την επόμενη γλώσσα:

Θα βάλω ένα απλό ερώτημα για όσους προτείνουν μια γλώσσα:

Πόσο καλός γνώστης είσαι στη γλώσσα που προτείνεις;

Για να γίνει πιο απλό το ερώτημα: Πόσο έχεις μελετήσει την γλώσσα; Γνωρίζεις προγραμματισμό με αντικείμενα; Έχεις φτιάξει μια παραθυρική εφαρμογή με χρήση γεγονότων; Τέλος, μπορείς να αναφέρεις τις πηγές τις οποίες μελέτησες για να μάθεις τη γλώσσα;

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

Το μέλος evry (Ευριπίδης Βραχνός) γύρισε με απάντηση ως προς εκείνους που "διαφωνούν" ως πράγματι εκείνους που δεν έχουν ασχοληθεί αρκετά για να έχουν ασφαλή άποψη περί καταλληλότητας. Όμως καταλήγει σε ένα αυθαίρετο συμπέρασμα ότι προϋπόθεση για να προταθεί μια γλώσσα είναι η υπάρχουσα εκπαιδευτική της χρήση, με γνώση των δυσκολιών των μαθητών.

Απάντησα στο μέλος evry, ότι πράγματι ένα πλεονέκτημα για μια πρόταση είναι και η διδακτική εμπειρία πάνω στη χρήση μιας γλώσσας. Στάθηκα όμως στο γεγονός ότι το μάθημα της ΑΕΠΠ δεν είναι η χρήση μιας γλώσσας προγραμματισμού, αλλά μέσω της χρήσης η ανάπτυξη της αλγοριθμικής σκέψης. Έτσι μια γλώσσα πρέπει να μπορεί να σταθεί στην ανάπτυξη της αλγοριθμικής σκέψης σε όλα τα θέματα που καταπιάνεται η ΑΕΠΠ. Ειδικά σε θέματα αντικειμένων και προγραμματισμού με γεγονότα η υπάρχουσα ΓΛΩΣΣΑ δεν μπορεί να χρησιμοποιηθεί. Η διδακτική εμπειρία για μια οποιαδήποτε γλώσσα έπεται της πρότασης για χρήση αυτής στο σχολείο. Δεν μπορεί να αποτελεί προαπαιτούμενο, αλλιώς καμία νέα γλώσσα δεν θα μπορούσε να ενταχθεί στο μέλλον σε διδακτικό πρόγραμμα.


Έρχεται λοιπόν και το μήνυμα από τον alkisg προς εμένα (bugman ως όνομα χρήστη):


@bugman, άνοιξα αυτό το θέμα ώστε οι καθηγητές δευτεροβάθμιας να συζητήσουμε με βάση και την διδακτική ή ερευνητική εμπειρία μας, όχι μόνο με την προγραμματιστική εμπειρία μας. Είτε κάποιος μας μεταφέρει την εμπειρία του από τη διδασκαλία της ΓΛΩΣΣΑΣ στο Λύκειο, της Python στα ΕΠΑΛ, κάποιο paper που διάβασε για το τι γίνεται στην εκπαίδευση στο εξωτερικό, ή κάποιο άρθρο για τον κόσμο των επαγγελματιών προγραμματιστών, είναι όλα τους ανεκτίμητα.

Το να προτείνει ο καθένας αυτό που ήδη ξέρει είναι το πιο εύκολο· αλλά έτσι μπορεί να συνεχίσουμε να διδάσκουμε Pascal ή Visual Basic στον αιώνα τον άπαντα, και να δυσκολευόμαστε να εξηγήσουμε στους μαθητές τι σχέση έχει το είσοδος/επεξεργασία/έξοδος με τις διάτρητες κάρτες και τις εντολές εκτύπωσης.

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

Στο πρώτο σκέλος της απάντησής του υπάρχει μια θετική ατμόσφαιρα. Πράγματι οι πηγές (αναφορές) για τη χρήση μιας γλώσσας στην εκπαίδευση έχουν αξία.

Στο δεύτερο σκέλος της απάντησής του υποβαθμίζεται το πρώτο, όπου γλώσσες όπως η Pascal και η Basic είναι αποδεδειγμένα για χρόνια ενταγμένες στην εκπαίδευση. Δεν υπάρχουν αρνητικές κριτικές για αυτές τις δυο γλώσσες. Και οι δυο παραπάνω γλώσσες έχουν αναπτυχθεί σε μεγάλο βαθμό. Τι σημαίνει “ξεπερασμένη γλώσσα” και το αντίθετο τι θα θέλαμε για μια νέα γλώσσα;

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


@alkisg

Αν βάλουμε ως μέτρο τη ΓΛΩΣΣΑ, τότε αυτή η γλώσσα είναι στο ΜΗΔΕΝ. Ευτυχώς να λέμε που έγραψες εσύ και άλλοι, διερμηνευτές για να μπορούν οι μαθητές να εξασκηθούν σε ένα προγραμματιστικό περιβάλλον. Διαφορετικά θα έκαναν εκτέλεση με χαρτί και μολύβι!

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

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

Αναφέρεσαι σε γλώσσες όπως η Pascal και η Visual Basic. Εγώ θα πάω στη BASIC. Η γλώσσα αυτή είναι ό,τι καλύτερο για εκπαίδευση. Φτιάχτηκε για εκπαιδευτικούς σκοπούς. Θυμίζω την BBC Basic που επιλέχθηκε μαζί με τα BBC micro ως το μέσο εκπαίδευσης των σχολείων στη Βρετανία. Η BBC Basic είχε διαδικασίες και συναρτήσεις, αλλά και πολλές εντολές για χρήση γραφικών και ήχου, όπως και για αρχείων, καθώς και ενσωματωμένο Assembler. Αυτό το εργαλείο προϋπήρχε της ΓΛΩΣΣΑΣ, ήταν ανώτερο, ήταν κατασκευασμένο από Βρετανούς για Βρετανούς. Οι δικοί μας ήταν πιο πονηροί...έβγαλαν μια γλώσσα χωρίς περιβάλλον εκτέλεσης, χωρίς δυνατότητες γραφικών και ήχου σχεδόν είκοσι χρόνια μετά τη κυκλοφορία της BBC Basic. Αν αυτό δεν είναι ντροπή μας, τι άλλο είναι;

Η Μ2000 είναι επέκταση της BASIC, ανώτερη από την BBC BASIC, υποστηρίζει μέσα από το περιβάλλον της εκτέλεση άλλων γλωσσών, όπως javascript και visual basic, και επειδή μπορεί να λειτουργεί ως glue language έχω δώσει παράδειγμα που με ένα script της Μ2000 περιέχεται ο πηγαίος κώδικας σε c, και κατά την εκτέλεση παράγει dll (εξωτερική βιβλιοθήκη) με χρήση του gcc και τελικά την συνδέει άμεσα και εκτελεί τις συναρτήσεις ως εξωτερικές συναρτήσεις. Δεν μιλάμε για πισογύρισμα αλλά για τη δύναμη στο προγραμματιστικό περιβάλλον να συνδέεται με οτιδήποτε έχει ο υπολογιστής.

Οι δυνατότητες είναι άπειρες, και το περιβάλλον είναι ενιαίο και στηρίζεται στο Win32 μοντέλο το οποίο ουδέποτε θα εγκαταλειφθεί επειδή είναι το βέλτιστο (ως προς την ταχύτητα) και επειδή μπορεί να χρησιμοποιηθεί άνετα σε 64bit συστήματα.

Να σημειώσω εδώ ότι η Μ2000 έχει εκτός από δυναμικούς πίνακες, λίστες και στοίβες/ουρές έτοιμες, έχει λάμδα συναρτήσεις (ως πρώτης τάξης συναρτήσεις), αντικείμενα με και χωρίς δείκτες (σαν μεταβλητές ή structures της C#), καθώς και δυαδικές δομές (όπως τα types στην c). Επίσης έχει πέρασμα με τιμή (εξ ορισμού) και με αναφορά (πρέπει να δηλωθεί, δεν γίνεται αυτόματα) και προαιρετικά μπορούμε να ορίζουμε και τύπους. Επιπλέον έχει προγραμματισμό με γεγονότα, και χρήση νημάτων.

Και όλα αυτά με χρήση δυο λεξιλογίων ελληνικών και αγγλικών (περίπου 500+500 αναγνωριστικά).

Τι άλλο χρειάζεται κανείς;

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

Ο alkis σε απάντηση του μέλους komni στο εύστοχο RIP Bugman που απλά έγραψε σε ένα μήνυμά του ήταν:

Γ΄ Λυκείου / Απ: Ποια γλώσσα θέλετε για την Γ΄ Λυκείου;

« Τελευταίο μήνυμα από alkisg στις 30-3-2021 στις 11:44:12 πμ »

Υ.Γ. ο bugman διαγράφηκε μόνος του, δεν τον διέγραψε κάποιος διαχειριστής. Ο μόνος περιορισμός που του θέσαμε ήταν να μην μας ζαλίζει με την Μ2000 σε όλες τις συζητήσεις, παρά μόνο στο θέμα που είχε ανοίξει ειδικά για τη διαφήμισή της. Ε προφανώς δεν είχε άλλο λόγο συμμετοχής στο Στέκι πέρα από αυτόν, και έφυγε.


Με απλά λόγια η "δική μου" Μ2000, κατά κάποιους στο φόρουμ "ένα έκτρωμα", που περιέχει 33k γραμμές κώδικα μόνο ως παραδείγματα, με χρήση πολλών προγραμματιστικών αντικειμένων, με χρήση αντικειμένων και γεγονότων, με ενσωματωμένο σύστημα παραθύρων (GUI), με αρκετό υλικό, εγχειρίδια χρήσης και εκπαιδευτικά βιβλία (όλα δωρεάν), ήταν απλά μια "διαφήμιση" στο φόρουμ και όχι πρόταση για ένα μέσο ανάπτυξης αλγοριθμικής σκέψης. Αυτές τις απόψεις εκθέτει ο Άλκης Γεωργόπουλος για να μην διαταραχθεί η πρόταση περί της javascript. Δεν θα του κάνω το χατίρι να γίνω εγώ το θύμα “αντιπαράθεσης”. Είναι γνωστή η τακτική του να υποβαθμίζεις το Β για να προβάλλεις το Α όταν δεν έχεις επιχειρήματα για το Α.

Η πραγματικότητα είναι πολύ διαφορετική από αυτή που παρουσιάζει ο alkisg (Άλκης Γεωργόπουλος). Όλες οι γλώσσες που δίνονται με έλλειψη ισχυρών δομών εισόδου/εξόδου, έχουν πρόβλημα ως προς την ανάπτυξη πιο σύνθετων προγραμμάτων. Η javascript πρέπει να χρησιμοποιήσει το DOM document object model του περιηγητή. H python κάνει εξ ορισμού χρήση της κονσόλας, κάτι ανάλογο της κονσόλας του διερμηνευτή της ΓΛΩΣΣΑΣ. Τι είναι αυτό που πραγματικά έχουν αυτές οι δυο γλώσσες; Έχουν αντικείμενα κατάλληλα για να διευκολύνουν το προγραμματισμό! Ακριβώς το ίδιο πράγμα ισχύει και για τη Μ2000. Επιπλέον η Μ2000 έχει έλεγχο στη θέαση μεταβλητών που δεν υπάρχει στην javascript και στην python. Μια μεταβλητή σε μια συνάρτηση, για παράδειγμα, είναι θεατή μόνο στη συνάρτηση αυτή. Υπάρχουν όμως συναρτήσεις που αυτό δεν πρέπει να γίνεται και η Μ2000 υποστηρίζει και αυτή την παραλλαγή. Αυτές οι συναρτήσεις είναι οι εξυπηρετητές γεγονότων. Δηλαδή όταν ένα γεγονός συμβαίνει και υπάρχει μια συνάρτηση συνδεδεμένη με αυτό, τότε πρέπει να υπάρχει τρόπος η συνάρτηση να κληθεί έτσι ώστε να μπορούμε προγραμματιστικά να ελέγχουμε πηγές οι οποίες δεν είναι τοπικές στη συνάρτηση! Με απλά λόγια η ΓΛΩΣΣΑ η οποία απορρίπτει την έννοια της γενικής μεταβλητής δεν θα μπορούσε ποτέ να έχει προγραμματισμό με γεγονότα! Στις python και javascript όταν κάτι δεν έχει οριστεί σε μια συνάρτηση τότε υπάρχει τρόπος να βρεθεί σε κάποιο επίπεδο παραπάνω, είτε γιατί έχει δηλωθεί να βρεθεί είτε γιατί ο μηχανισμός της γλώσσας (διερμηνευτής) ψάχνει προς τα πίσω στη στοίβα εκτέλεσης κατά την εκτέλεση.

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

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

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