Για την γλώσσα PASCAL και την εκπαίδευση

image

Η ψευδογλώσσα [ανθρώπινη επεξήγηση του αλγόριθμου] και η PASCAL είναι σχεδόν το ίδιο. Γι αυτό και χρησιμοποιείται σε βιβλία.

Με έχεις πήξει στην κουταμάρα και την ασχετοσύνη… Εσύ δεν είπες ότι αποχωρείς από την συζήτηση; ε αποχώρισε επιτέλους

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

Κατά συνέπεια ο χρήστης @xor αποβάλετε προσωρινά

H ALGOL είναι μια γλώσσα που δημιουργήθηκε το 1958 και βασική της χρήση ήταν η περιγραφή των αλγορίθμων σε επιστημονικές δημοσιεύσεις. Μπορεί να μην έχετε ακούσει τη γλώσσα, αλλά είναι μια γλώσσα που διαμόρφωσε τη σύνταξη όλων σχεδόν των γλωσσών προγραμματισμού [*]. Η βασική σύνταξη της C/C++, Python, Pascal, Java είναι ALGOL. Και αν ξεκινάς με μια πρώτη σχεδόν επιδερμική επαφή με τον προγραμματισμό (όπως για παράδειγμα στη μέση εκπαίδευση) αυτό που θα μάθεις είναι ALGOL (ή αλλιώς τα βασικά του δομημένου προγραμματισμού) με όποια γλώσσα και να το κάνεις …

Λίγος κώδικάς ALGOL για σύγκριση. Σε μια πρώτη ματιά είναι PASCAL …

BEGIN
INTEGER p, q;
y := 0; i := k := 1;
     for p := 1 step 1 until n do
         for q := 1 step 1 until m do
             if abs(a[p, q]) > y then
                 begin y := abs(a[p, q]);
                     i := p; k := q
                 end
 END Absmax

Εύκολα θα τον πάρεις και θα τον μετατρέψεις σε C, Pascal, Java, Ruby, Python …

Το οικοσύστημα της PASCAL την προηγούμενη χιλιετία και κυρίως η φτηνή και πραγματικά καλή Turbo Pascal της Borland την καθιστούσαν την ιδανική επιλογή για την εκπαίδευση, και σίγουρα ανώτερη απο τη μη τυποποιημένη BASIC της κάθε μηχανής. Και ειλικρινά θα προτιμούσα τα παιδιά να χρησιμοποιούσαν PASCAL αντί για μιας ψευδογλώσσας. Ίσως, ένας βασικός λόγος να είναι ακριβώς αυτή η έλλειψη μιας Turbo Pascal στις μέρες μας, οπότε θα φτιάξεις μια ψευτογλώσσα. Καλύτερο απο αυτό που κάνουν κάποια IEK που σε μαθαίνουν σήμερα PASCAL σε περιβάλλον DOS.

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

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

Και δεν μπορώ να σκεφτώ κανένα επιχείρημα (τεχνικό, εκπαιδευτικό, πρακτικό,…) να την επιλέξεις έναντι πχ της Python σήμερα. Ίσως αν το Kylix [1] να μην είχε εγκαταλειφθεί σχεδόν αμέσως ή αν είχε γίνει open source η κατάσταση να ήταν αλλιώς σήμερα. Αλλά την ιστορία την εξετάζουμε με το τι έγινε, όχι με το τι θα μπορούσε να γίνει …

[1] Για να να καταλάβουμε και πόσο πίσω έχει μείνει η Pascal ακόμα και σήμερα η τεκμηρίωση της LCL και της FreePascal είναι ελλιπής και πρέπει να εγκαταστήσεις τη βοήθεια του Kylix για να την έχεις, όπως τεκμηριώνετε εδώ. Με μια προϋπόθεση: Να είχες αγοράσει το Kylix τότε μιας και δεν μπορείς να το προμηθευτείς νόμιμα σήμερα, και είναι σχεδόν αδύνατο [2] να το κάνεις να τρέξει σε μια σημερινή διανομή.

[2] Ένα απο τα λίγα Open Source προγράμματα που είχαν γραφτεί σε Kylix ήταν το DBDesigner4. Πριν πολλά χρόνια το χρησιμοποιούσα, αλλά σταδιακά έγινε αδύνατον να τρέξει και έφτυνες αίμα για να το κάνεις. Σήμερα αμφιβάλω αν είναι καν δυνατόν … (Update: Δεν μπορείς καν να το κατεβάσεις)

Τέλος, μια διδακτική ιστορία για το πως η C επικράτησε της Pascal ακόμα και σε περιβάλλοντα εχθρικά προς τη γλώσσα και φιλικά προς την Pascal: Chris's Wiki :: blog/programming/CTriumph

Despite all of this, C crushed Pascal to become by far the dominant programming language on the Macintosh. I don’t think it even took all that long. Programmers didn’t care that dealing with the API issues were a pain; working in C was worth it to them. It didn’t matter that Pascal was the natural language to write Mac programs in or that it was a perfectly good language in its own right. C was enough better to displace Pascal in a hostile environment.

C did not win just because it was at the right place at the right time. C won in significant part because it was (and is) a genuinely good language for the job it does. As a result it was the language that a lot of pragmatic people picked if you gave them anything like a choice.

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

1 «Μου αρέσει»

Το ενδιαφέρον είναι συχνά δεν έχεις όσες επιλογές φαίνεται με μια ματιά ότι χρησιμοποιούνται γενικά στον τομέα που χρειάζεται να δουλέψεις κάθε φορά. Και δεν είναι απαραίτητο να έχεις την δυνατότητα να χρησιμοποιήσεις την τεχνολογία που προτιμάς ή αυτή με την οποία είσαι πιο παραγωγικός κάθε φορά :wink:
Κατά την γνώμη μου είναι σημαντικότερο να έχεις μια στέρεη βάση και να μπορείς να προσαρμοστείς και να χρησιμοποιήσεις ότι χρειάζεται για να πετύχεις τον στόχο σου. Ακούγεται γενικόλογο; Ίσως είναι, αλλά αυτό δεν το κάνει λάθος. Νομίζω πως είναι καλός (ή έστω επαρκής) λόγος να μην εγκλωβίζεσαι εκ των προτέρων σε άρνηση χρήσης κάποιων τεχνολογιών ή σε τυφλή προσήλωση σε άλλες ;)
@xor Δεν ξέρω αν παρακολουθείς ακόμα το νήμα, αλλά αν χρησιμοποιείς void linux και έχεις χρόνο, δώσε ένα χέρι βοήθειας στο πακετάρισμα της fpc και του lazarus… Έχουν μείνει πίσω, δεν χρειάζονται πολλά, αλλά θα είναι πολύ ευκολότερο να το κάνει κάποιος που χρησιμοποιεί ενεργά την γλώσσα :slightly_smiling_face:

2 «Μου αρέσει»

Οι γνώσεις μου έχουν μείνει στην basic δεκαετίας '80. Κάτι πάω να καταλάβω, αλλά για δώσε μια εξήγηση τι κάνει το προγραμματάκι!

Αν εννοείς το πρόγραμμα της ALGOL, ήταν το πρώτο παράδειγμα στη Wikipedia. Διασχίζει αλλά τα στοιχεία ενός πίνακα δυο διαστάσεων και βρίσκει το στοιχείο με τη μεγαλύτερη απόλυτη τιμή.

Το σημαντικό είναι να εντοπίσεις τις 2 ένθετες for που διασχίζουν τον πίνακα, μια εντολή if που ψάχνει να δει αν μια τιμή είναι μεγαλύτερη και τις αρχικοποιήσεις των μεταβλητών. Και έχεις τον αλγόριθμο. Στην Python ή στη Java ή σύνταξη είναι λίγο διαφορετική πχ χρησιμοποιούμε εσοχές ή αγκύλες αντί για begin … end αλλά ουσιαστικά θα γράψουμε το ίδιο πρόγραμμα. Αυτό το λέμε δομικό προγραμματισμό και ήταν μια χαρά το 1980.

Τώρα θα κάνω μια κριτική από τη σύγχρονη σκοπιά. Μην αγχωθείς αν δεν τα καταλάβεις, και δεν είμαι ίσως και ο καλύτερος να τα εξηγήσω. Αν κοιτάξεις προσεκτικά το πρώτο στοιχείο του πίνακα είναι το [1,1] ενώ συνήθως είναι το [0,0] στις περισσότερες γλώσσες προγραμματισμού. Άρα θα πρέπει να τροποποιήσουμε το for να ξεκινάει από το 0 και όχι το 1, και μάλλον έκανα μόλις ένα σοβαρό λάθος γιατί θα πρέπει επίσης να σταματήσω πριν φτάσω τη διάσταση του πίνακα, όχι μόλις τη φτάσω. Σήμερα αποφεύγουμε να είμαστε συγκεκριμένοι και λέμε κάτι σαν for p in rows_range(A) και αποφεύγουμε αυτές τις παγίδες.

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

max_value := a.elements() | max_by (|x,y| abs(x) > abs(y))

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

Δείτε ακόμα :clang: Μοντέρνος προγραμματισμός, C++ και λίγο πίπες και Προγραματιστική Πρόκληση Νο 0: Χριστουγενιάτικα δέντρα - #10 από Charalampos_Bekiaris

1 «Μου αρέσει»

Κάτι κατάλαβα ότι πρόκειται για πίνακα, αλλά εκείνα τα m & n έψαχνα να βρω τι είναι, που ορίζονται κτλ.
Άστο, δεν έχει νόημα να μου εξηγήσεις περαιτέρω, δεν έχω κάν ’ τις γνώσεις.
Πάντως θυμάμαι τέλη δεκαετίας '90 τον αδερφό μου που έκανε κάτι Borland, VIsual C και κάτι άλλα που δεν θυμάμαι στο Παν/μιο Πατρών και έλεγα πόσο έχουν αλλάξει από την εποχή της Basic (α, έκανα και λίγο Fortran στο ΤΕΙ…θα ήθελα να γνωρίσω αυτόν που την σκέφτηκε… :grin:). Σήμερα θα λέγαμε άλλος κόσμος, κρίνοντας από το παράδειγμα της μιας γραμμής που δίνεις.