Πραγματικά χαίρομαι για μια ακόμη φορά που υπάρχει το Στέκι και μπορούν και γίνονται τέτοιες συζητήσεις.
Ας γράψω και γω κάποιες σκέψιεις μου που βασίζονται σε κάποια πράγματα που ειπώθηκαν.
Γενικά μακάρι να υπήρχε η τέλεια γλώσσα προγραμματισμού, ώστε όχι μόνο να την διδάσκουμε αλλά και να την χρησιμοποιούμε.
Δυστυχώς δεν υπάρχει. Όμως η Python είναι η καλύτερη διαθέσιμη.
... Το βασικότερο πρόβλημα που έβρισκα εγώ είναι ότι η ΓΛΩΣΣΑ είναι πως στερεί από το μαθητή μεγάλο μέρος από τη χαρά της δημιουργίας. Πέρα από τα υπόλοιπα προβλήματα αυτός είναι ο λόγος που θα ήθελα μία πραγματική γλώσσα στο σχολείο.
Μπορεί η ΓΛΩΣΣΑ να κάνει για τις πανελλαδικές αλλά η χρησιμότητά της αρχίζει και τελειώνει εκεί. Είναι φτιαγμένη να υποστηρίζει μέρος της ύλης του μαθήματος και τίποτα άλλο. Όποιος μαθητής ενδιαφέρεται για την πληροφορική αντιλαμβάνεται αυτό το μειονέκτημα πολύ νωρίς αφού το ίδιο το εργαλείο που μαθαίνει βάζει "φρένο" στη δημιουργικότητά του. ...
Συμφωνώ απόλυτα με αυτό και μπράβο που το επισημαίνεις. Δυστυχώς στο Λύκειο πάσχουμε από ακαδημαϊκοφάνεια όχι μόνο στην Πληροφορική αλλά και σε όλα τα μαθήματα. Οι μαθητές χτίζουν τις βάσεις για το Πανεπιστήμιο, χωρίς όμως οι γνώσεις τους να μπορούν να σταθούν αυτόνομα.
Περί Python τώρα, ας ξεκινήσουμε από το πιο σημαντικό μειονέκτημα που αναφέρθηκε και αυτό για το οποίο ήμουν αρνητικός όταν πρωτοάκουσα σχετικά - οι δυναμικοί τύποι.
Μπορείς να δηλώσεις μετααβλητή και να της δώσεις άμεσα τιμή, δίνοντάς της και τύπο. Στο βιβλίο ΕΠΑΛ σελ 20 δίνει ξεκάθαρα τύπους δεδομένων.
Η μόνη διαφορά με αυστηρές δηλώσεις θα είναι η ικανότητα της python να εκτελεί ad-hoc κάποια cast. Ας πόυμε ακέραιο σε πραγματικό. Αλλά και πάλι, μικρό το κακό.
Το βασικότερο επειχείρημά μου είναι ότι με την Python δεν μαθαίνουν πολύ καλά την έννοια του τύπου της μεταβλητής καθώς στην συγκεκριμένη γλώσσα δεν δηλώνουν. Βασικό για μένα στον προγραμματισμό να μάθουν τι είναι τύπος. Εξάλλου είναι δυναμική γλώσσα και μπορείς τις μεταβλητές να της κάνεις ότι θέλεις. Καλύτερα να μάθουν οι μαθητές αρχικά σε μια στατική κατασταση μνήμης γνώμη μου.
Βασικά δεν μπορείς να τις κάνεις ό,τι θέλεις γιατί είναι strongly typed, αλλά όντως οι τύποι είναι δυναμικοι. Αυτό έχει ως συνέπεια οι παρακάτω εντολές να είναι αποδεκτές στο ίδιο πρόγραμμα Python:
x = 1
x = "Test"
x = [1,2,3,3.14,"abc"]
Αυτό δεν είναι αρνητικό επειδή δεν υπάρχει η δήλωση του τύπου, αλλά επειδή παραβιάζει κάποιες απλές αρχές που βοηθούν ιδιαίτερα τους αρχάριους προγραμματιστές. Για παράδειγμα ότι η μεταβλητή πρέπει να αντιπροσωπεύει *μία* τιμή - οντότητα, ότι οι συλλογές πρέπει να περιέχουν όμοια αντικείμενα. Αυτά δεν είναι θέσφατα - φαντάζομαι η Python δεν τα τηρεί για κάποιο λόγο - αλλά συμβαδίζουν με τον τρόπο σκέψης που πρέπει να διδάσκουμε έναν προγραμματιστή.
Θα μπορούσαμε να τα αποκρύψουμε βέβαια από τη διδασκαλία μας, αλλά υπάρχουν δύο κίνδυνοι:
1. Οι μαθητές να τα ανακαλύψουν και να τα χρησιμοποιούν από μόνοι τους.
2. Να προκύψουν από απροσεξία (σε μεγάλα προγράμματα) και οι μαθητές να ψάχνουν να βρούν το λάθος.
Το τελευταίο είναι για μένα το μεγάλο μειονέκτημα των δυναμικών τύπων. Αν ήταν στατικοί, ο type checker θα εντόπιζε τέτοια λάθη, πριν ξεκινήσει η εκτέλεση. Τώρα όμως θα εμφανιστούν ενώ τρέχει το πρόγραμμα, όπου ο μαθητής θα πρέπει να τα αντιμετωπίσει μαζί με λογικά λάθη και γενικότερα μαζί με τον έλεγχο της ορθότητας του προγράμματος.
Μα αυτό είναι και το πλεονέκτημα της Python, ότι είναι πολύ πιο κοντά σε ψευδογλώσσα και σε γλιτώνει από τη δήλωση των τύπων. Ο σκοπός του μαθήματος δεν είναι η αλγοριθμική και όχι ο προγραμματισμός? Άρα η μη δήλωση των μεταβλητών είναι πλεονέκτημα και όχι μειονέκτημα.
Φυσικά υπάρχει και το άλλο επιχείρημα που λέει ότι δεν υπάρχει λόγος να δηλώνουμε μεταβλητές αφού υπάρχει δυναμικό σύστημα τύπων. Επειδή όμως εμείς έχουμε μάθει έτσι με Pascal/C νομίζουμε ότι αυτός είναι ο σωστός τρόπος.
Εδώ διαφωνούμε καθώς οι δυναμικοί τύποι δεν είναι ούτε θέμα αλγοριθμικής ούτε θέμα συνήθειας. Νομίζω ότι μπορεί να δυσκολεψουν χωρίς λόγο τον μαθητή.
Το παραπάνω όμως είναι το
μοναδικό μειονέκτημα της Python που θα μπορούσα να βρω.
Αντίθετα το υποχρεωτικό indentation που είχε αναφερθεί παλιότερα δεν είναι μειονέκτημα. Είναι μια καλή πρακτική που την προτείνουμε ακόμα και στη ΓΛΩΣΣΑ που απλά στην Python είναι υποχρεωτική και έχει αναπαρασταθεί με πολύ ωραίο τρόπο στις πανελληνιες των ΕΠΑΛ.
Τα πλεονεκτήματα από την άλλη είναι πάρα πολλά. Κάποια ειπώθηκαν όπως ότι μπορεί να δώσει στο μαθητή τη χαρά της δημιουργίας:
Παίζουν ρόλο και το τι όρεξη/αυτοπεποίθηση θα έχει ο μαθητής στην αρχή· άλλο το να μπορείς να φτιάξεις ενδιαφέροντα προγράμματα από τους πρώτους μήνες και άλλο το να παίζεις με αριθμούς και strings και δομές δεδομένων για χρόνια πριν φτιάξεις κάποιο πρόγραμμα που θα αισθανθείς περήφανος γι' αυτό.
Ένας πολύς βασικός λόγος επιλογής μιας γλώσσας είναι η κοινότητά της. Από εκεί θα προκύψουν οι συνεισφορές και η δύναμη και η εξέλιξη της γλώσσας.
Πολύ σωστά. Με python μπορείς να προγραμματίσεις Raspberry PI και πρόσφατα και Arduino. Μπορεί να γίνει μια γλώσσα-ραχοκοκαλιά του προγράμματος σπουδών.
Επιπλέον ένα από τα πιο σημαντικά πλεονεκτήμα είναι η πολύ καθαρή και απλή της σύνταξη σε σχέση με Java, C++, PASCAL κλπ. και ειδικά στο κομμάτι δημιουργίας υποπρογραμματων, που για μένα είναι το σημαντικότερο εργαλείο για να κατακτηθεί η υπολογιστική σκέψη (και πιο συγκεκριμένα δυνατότητα μοντελοποίησης και ανάλυσης προβλημάτων σε απλούστερα).
Επίσης, έχει πολύ καλή υποστήριξη σε βιβλιοθήκες (πχ. για ΒΔ, Web και network programming) και υποστηρίζει όλα τα υποδείγματα προγραμματισμού (και αντικειμενοστραφούς και συναρτησιακού) οπότε δίνει επιπλέον πλεονεκτήματα στο να χτιστεί ένα πρόγραμμα σπουδών πάνω σε αυτήν. Φυσικά υπάρχουν και πολλά άλλα πλεονεκτήματα που δεν υπάρχει χώρος να αναλυθούν περισσότερο.
Τώρα αν είναι έτσι γιατί δεν χρησιμοποιείται παγκόσμια όπως δείχνουν οι έρευνες:
Για την υποβοήθηση της συζήτησης να αναφέρω ότι :
- Στο international baccalaureate η κωδικοποίηση υλοποιείται είτε σε ψευτοκώδικα, είτε (κυρίως μάλλον) σε Java ή άλλη γλώσσα προγραμματισμού
- Στο εnglish baccalaureate η κωδικοποίηση υλοποιείται είτε σε ψευτοκώδικα, είτε σε γλώσσα προγραμματισμού
- Στο Advanced Placement exams η κωδικοποίηση υλοποιείται σε κάποια γλώσσα προγραμματισμού
- Στο Νέο Λύκειο της Κύπρου η κωδικοποίηση υλοποιείται σε C++
Μία πιθανή εξήγηση έχει να κάνει με την χρονολογία δημιουργία των παραπάνω προγραμμάτων, όταν η Python ίσως δεν ήταν ούτε δημοφιλής ούτε ώριμη. Το θετικό πάντως είναι ότι όλα αυτα τα προγράμματα δέχονται την χρήση κάποιας υπάρκτης γλώσσας προγραμματισμού.
Κλείνοντας (επιτέλους) επιτρέψτε μου να πω ότι δεν χρειάζεται στην Ελλάδα να είμαστε ουραγοί και να κάνουμε πάντα ό,τι κάνουν οι άλλοι. Ας πρωτοπορήσουμε και μια φορά.