Εκπαιδευτική Γλώσσα Προγραμματισμού

Ξεκίνησε από sstergou, 12 Νοε 2014, 03:41:41 ΜΜ

« προηγούμενο - επόμενο »

sstergou

Παράθεση από: spin στις 16 Νοε 2014, 01:12:45 ΜΜ
Στάθη το καλό με την dataset-like λύση είναι ότι θα τη μάθουν πιο εύκολα και χωρίς μπερδέματα τα παιδιά.
Το κακό είναι ότι αναφορικά με την απόδοση έχει σε κάποιες περιπτώσεις τρελό overhead.
Σκέψου δηλαδή να θέλεις να προσθέσεις μία μόνο εγγραφή σε ένα μεγάλο αρχείο. Τότε θα πρέπει να φορτώσεις όλα τα περιεχόμενά του σε πίνακα, να προσθέσεις την εγγραφή στον πίνακα και να τον ξαναγράψεις στο αρχείο.
Αλλά από άποψη συντακτικού θα είναι αρκετά κομψή, ιδίως αν θέλουμε να περιορίσουμε τις σχετικές με αρχεία εντολές στο ελάχιστο.
Σπύρο μια έξτρα παράμετρος στην Γράψε_Αρχείο το λύνει αυτό το πρόβλημα.

itt

Παράθεση από: fof στις 16 Νοε 2014, 03:08:44 ΜΜ
Συμφωνώ κι εγώ με την Eri, τον Παναγιώτη, τον Στέργου.. το να επεκταθεί η ψευδογλώσσα σε μια λογική αύξηση της ύλης με στοιχεία αντικειμενοστραφούς προγραμματισμού, με βάση πάντα το γεγονός ότι η εξέταση είναι γραπτή!
Η εξειδικευμένη γνώση μιας γλώσσας θα δυσκολέψει και θα απομακρύνει τους μαθητές από κάθ ΄ αυτούς στόχους του μαθήματος.
Επίσης θεωρώ πως τα κριτήρια για την επιλογή μιας συγκεκριμένης γλώσσας προγραμματισμού όπου επιθυμούμε να εντάξουμε για εκπαιδευτικούς και μόνο σκοπούς  είναι καθαρά υποκειμενικά. Για παράδειγμα.. εγώ διαφωνώ με τη python.. και θεωρώ καταλληλότερη την C++ (γενικού σκοπού, δημοφιλής, γρήγορη, με φοβερές δυνατότητες), ή την php (script language) , ή και την pascal (εκπαιδευτική) στην τελική.

Που ακριβώς διαφωνείς με την Python; Γιατί θεωρείς καταλληλότερη την C++;

fof

Παράθεση από: itt στις 16 Νοε 2014, 03:55:16 ΜΜ
Που ακριβώς διαφωνείς με την Python; Γιατί θεωρείς καταλληλότερη την C++;

ισχυρό υπόβαθρο
υποστηρίζει όλα τα είδη προγραμματισμού (δομημένος..αντικειμενοστραφής..γενικός...)
υποστηρίζει προγραμματισμό υψηλού και χαμηλού επιπέδου
παίζει σε όλες τις πλατφόρμες
σχεδιάζει GUI παντού
πολλές βιβλιοθήκες
τεράστιο community

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

pgrontas

Παράθεση από: fof στις 16 Νοε 2014, 03:08:44 ΜΜ
Η εξειδικευμένη γνώση μιας γλώσσας θα δυσκολέψει και θα απομακρύνει τους μαθητές από κάθ ΄ αυτούς στόχους του μαθήματος.
Θα ήθελα να ξανατονίσω ότι όλοι από όσους έχουν αναφερθεί σε συγκεκριμένες γλώσσες, υποστηρίζουν την διδασκαλία αλγοριθμικής μέσω της γλώσσας και όχι της ίδιας της γλώσσας. Άρα δεν απαιτείται εξειδικευμένη γνώση.

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

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

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

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

ΥΓ:
Στάθη η αφήγηση του Νίκου μου θύμισε ότι εκείνη τη μέρα στην ημερίδα κάτι είχαμε πει στο διάδρομο περί χρήσης Python στο μάθημα. Θυμάσαι τι;


Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

itt

Παράθεση από: fof στις 16 Νοε 2014, 05:26:18 ΜΜ
όμως δεν έχει σημασία τι πιστεύω εγώ... σημασία έχει ποια γλώσσα κάνει για τα παιδιά , και ποια θα υποστηρίξει  τελεια τους σκοπούς του μαθήματος

Έχει σημασία τι πιστεύεις, συζήτηση κάνουμε.

Παράθεση από: fof στις 16 Νοε 2014, 05:26:18 ΜΜ
ισχυρό υπόβαθρο

Πολύ γενικόλογο, δεν αντιλμβάνομαι σε τι αναφέρεσαι.

Παράθεση από: fof στις 16 Νοε 2014, 05:26:18 ΜΜ
υποστηρίζει όλα τα είδη προγραμματισμού (δομημένος..αντικειμενοστραφής..γενικός...)

Όπως και η python, με πολύ πιο intuitive σύνταξη, ιδιώματα και abstractions. Η C++ είναι εξαιρετικά αδέξια στο συγκεκριμένο θέμα.
Παράθεση από: fof στις 16 Νοε 2014, 05:26:18 ΜΜ
υποστηρίζει προγραμματισμό υψηλού και χαμηλού επιπέδου

Γεγονός που κάποιος εύκολα μπορεί να το θεωρήσει εξαιρετικά αρνητικό, γιατί το ένα layer κάνει leak στο άλλο. Ο μαθητής ιδανικά δεν θα πρέπει να ασχολείται με λεπτομέρειες υλοποίησης που το μόνο που κάνουν είναι να δημιουργούν θόρυβο.

Παράθεση από: fof στις 16 Νοε 2014, 05:26:18 ΜΜ
παίζει σε όλες τις πλατφόρμες

Δεν νομίζω ότι αυτό μας απασχολεί ιδιαίτερα.

Παράθεση από: fof στις 16 Νοε 2014, 05:26:18 ΜΜ
σχεδιάζει GUI παντού

Oι περισσότερες βιβλιοθήκες (πχ cairo)  έχουν bindings για την Python οπότε και αυτό δεν είναι πρόβλημα.

Παράθεση από: fof στις 16 Νοε 2014, 05:26:18 ΜΜ
πολλές βιβλιοθήκες

Πολλές βιβλιοθήκες υπάρχουν, αλλά δεν υπάρχει ένα package distribution σύστημα όπως έχουν οι περισσότερες γλώσσες και επίσης δεν υπάρχει ένα καλό και απλό build system (με την έννοια ένα που δεν σε  κάνει να θες να σπάσεις το πληκτρολόγιό σου). Γενικά το θεμα με της βιβλιόθηκες είναι το βασικό αντεπιχείρημα στη χρήση της C++.

Παράθεση από: fof στις 16 Νοε 2014, 05:26:18 ΜΜ
τεράστιο community

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

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

evry

όχι όλα, δεν υποστηρίζει συναρτησιακό σε αντίθεση με την python
Παράθεση από: fof στις 16 Νοε 2014, 05:26:18 ΜΜ
υποστηρίζει όλα τα είδη προγραμματισμού (δομημένος..αντικειμενοστραφής..γενικός...)

@itt
θυμάμαι ότι και σε άλλη κουβέντα δεν είχες και την καλύτερη άποψη για τη c++
Αν επιτρέπεται ποια σχολή έχεις τελειώσει, γιατί νομίζω ότι την έχεις πάρει στραβά από την αρχή
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

itt

Παράθεση από: evry στις 16 Νοε 2014, 07:17:57 ΜΜ
όχι όλα, δεν υποστηρίζει συναρτησιακό σε αντίθεση με την python

Βασικά υποστηρίζει, σε μια πολύ απλοϊκή μορφή, με τη χρήση του std::transform και κάποιων άλλων πραγμάτων στη functional βιβλιοθήκη (placeholders για binding και τέτοια).

Παράθεση από: evry στις 16 Νοε 2014, 07:17:57 ΜΜ
@itt
Αν επιτρέπεται ποια σχολή έχεις τελειώσει, γιατί νομίζω ότι την έχεις πάρει στραβά από την αρχή

Δεν είναι θέμα σχολής φίλε μου, απλούστατα έχω γράψει και έχω συντηρήσει άπειρο κώδικα σε C++. Την έχω δει και από την καλή και από την ανάποδη και γενικά η ανάποδη έχει μεγαλύτερη συχνότητα από την καλή. Και αυτό ανεξάρτητα από το domain, είτε σε κώδικα για image processing είτε σε erp συστήματα ( ο θεός να τα κάνει) γραμμένα με COM, MFC και παρόμοιες ασυναρτησίες. Δεν πιστεύω ότι κάποιος δεν πρέπει να μάθει C++ άμα το θέλει, απλά η γνώμη μου είναι ότι για αρχάριους είναι πολύ κακή ιδέα. Είναι πολύ καλή ιδέα όταν ξέρεις τι κάνεις, ξέρεις το domain σου και απλώς θες να πάρεις όσο performance μπορείς.

evry

#67
στη c++11 όχι στη C++, έτσι δεν είναι?

Παράθεση από: itt στις 16 Νοε 2014, 07:28:59 ΜΜ
Βασικά υποστηρίζει, σε μια πολύ απλοϊκή μορφή, με τη χρήση του std::transform και κάποιων άλλων πραγμάτων στη functional βιβλιοθήκη (placeholders για binding και τέτοια).

πάντως  όπως και να'χει από εκπαιδευτικής πλευράς δεν συγκρίνεται με τον τρόπο που το παρουσιάζει η python.
δεν είναι αναπόσπαστο μέρος της γλώσσας
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

sstergou

@pgrontas
Δεν θυμάμαι, τι είχα πει; Αν δεν έχει βρωμόλογα μέσα μπορείς να το γράψεις εδώ :) (πλάκα κάνω εννοείται).

spin

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

Παράθεση από: pgrontas στις 16 Νοε 2014, 05:58:31 ΜΜ
Τέλος σε ότι αφορά τα αρχεία, η μόνη χρησιμότητα που βλέπω είναι σε πρακτικο επίπεδο και αφορά την εύκολη παροχή δεδομένων από και προς στον αλγόριθμο. Αυτό όμως μπορεί να γίνει και με εντελώς διαφανή τρόπο. Για παράδειγμα, με αλλαγή της Δεδομένα, Αποτελέσματα ώστε να επικοινωνούν με αρχεία, χωρίς να χρειάζεται ο μαθητής να ξέρει  εντολές εγγραφής και ανάγνωσης.
Σίγουρα, αν είναι μόνο για τα δεδομένα και τα αποτελέσματα υπάρχουν και άλλες λύσεις.
(Και η ΓλωσσοΜάθεια και ο Διερμηνευτής και το pseudoglossa υποστηρίζουν "Άντληση δεδομένων", όπου όλες οι ΔΙΑΒΑΣΕ τραβάνε αυτόματα τις ζητούμενες τιμές από αρχείο)
Αλλά εμένα θα μου άρεσε η έννοια του εξωτερικού μόνιμου αρχείου αποθήκευσης να αποτελεί ΚΑΙ -έστω δευτερεύοντα- διδακτικό στόχο.

Καλός ο γόνιμος προβληματισμός, αν και πολύ φοβάμαι ότι αυτοί που θα αναλάβουν το έργο θα μας γειώσουν όλους και θα κάνουν ότι νομίζουν!  :D

sstergou

Σπύρο δεν ξέρω αν λέμε το ίδιο πράγμα, εννοούσα απλά ένα flag για να γίνει append ή όχι στο αρχείο. Για την Διάβασε_αρχείο δεν ξέρω αν αξίζει να μπει κάτι τέτοιο. Πάντως κατά τη γνώμη μου το ζήτημα της απόδοσης είναι δευτερεύον. 2 εντολές πιθανώς φτάνουν για να δείξουμε τι σημαίνει μόνιμη αποθήκευση και να φορτώσουμε-γράψουμε γρήγορα κάποια αρχεία με εγγραφές κειμένου τα οποία μάλλον θα είναι τόσο μικρά που εν τέλει δεν θα υπάρχει διαφορά.

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

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

alkisg

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

  • Ποια είναι τα πλεονεκτήματα της ΓΛΩΣΣΑΣ από, ας πούμε, μια πλήρως εξελληνισμένη Basic με το κατάλληλο IDE που μοιάζει με Διερμηνευτή ή Γλωσσομάθεια;
  • Ποια είναι τα πλεονεκτήματα της Ψευδογλώσσας όπως τη διδάσκουμε (και όχι όπως την προόριζαν οι συγγραφείς, δηλαδή πολύ πιο ελεύθερη), οπό, ας πούμε, μια εξελληνισμένη Basic η οποία όντως υποστηρίζει και Δεδομένα και Αποτελέσματα και μη δήλωση μεταβλητών;
  • Τι νόημα έχει να διδάσκεται και Ψευδογλώσσα και ΓΛΩΣΣΑ; Αν π.χ. κάποιος ήθελε να διδάξει μια εξελληνισμένη Basic και στην αρχή δεν δήλωνε μεταβλητές (που το επιτρέπει), και μετά που μάθαινε για τύπους δεδομένων τις δήλωνε, τι μειονέκτημα θα είχε σχετικά με την τρέχουσα σπειροειδή διδασκαλία Ψευδογλώσσας / ΓΛΩΣΣΑΣ;
    (ΟΚ σταματάω με τη Basic :), παράδειγμα είναι, δεν εννοώ ότι την προτείνω)
  • Πολλές νέες γλώσσες υποστηρίζουν unicode identifiers. Αυτό σημαίνει ότι μπορεί να δηλωθεί π.χ. σε python3 μια συνάρτηση def ΓΡΑΨΕ(κείμενο): print(κείμενο), και πλέον οι μαθητές να την καλούν ως ΓΡΑΨΕ("Γεια σου κόσμε"). Εάν μεταφραστούν και όλα τα μηνύματα του περιβάλλοντος στα ελληνικά, μένουν μόνο οι δεσμευμένες λέξεις της γλώσσας στα Αγγλικά, για παράδειγμα if, for, while, do... καμιά ντουζίνα όλες κι όλες. Θεωρείται πρόβλημα εάν αυτή η ντουζίνα λέξεις είναι οι μόνες που είναι στα Αγγλικά; Εάν ναι, πάλι λύνεται, αλλά προσωπικά για τις δεσμευμένες λέξεις δεν θεωρώ πρόβλημα τη γλώσσα.
  • Πόσο μπορούμε να βασιστούμε στο IDE που θα επιλεχθεί ή θα υλοποιηθεί; Για παράδειγμα, εάν τα αρχεία έχουν την αναπαράσταση καρτελών κειμένου (σαν το αρχείο εισόδου του Διερμηνευτή, αλλά πολλαπλές καρτέλες, όχι μία), τότε δεν χρειάζεται ιδιαίτερη υποστήριξη για αρχεία από τη γλώσσα, τα stdio + τα άλλα descriptors, σε συνδυασμό με απλές ΓΡΑΨΕ/ΔΙΑΒΑΣΕ αρκούν.

spin

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

sstergou

@alkisg
Για τα 1, 2, 3 : Νομίζω εξαρτάται από την γλώσσα που θα κρύβεται από κάτω. Εγώ δεν συγκρίνω τα υπάρχοντα του ΑΕΠΠ με τις υπάρχουσες γλώσσες αλλά μια ιδανική γλώσσα κομμένη και ραμμένη στα μέτρα μας με την python για παράδειγμα μιας και αυτή φαίνεται να είναι η καλύτερη επιλογή.

Για το 5: Το ide πρέπει κατά τη γνώμη μου να είναι άσχετο είτε μπει ελληνική γλώσσα είτε όχι. Επίσης η εκάστοτε υλοποίηση της γλώσσας πρέπει να είναι άσχετη. Το θέμα είναι το specification μιας και αυτό είναι που μετέπειτα θα καθορίσει και τα περιβάλλοντα.

Για το 4: Αυτό είναι συζητήσιμο και δεν είναι άσχημη ιδέα. Το δίλημμα μετά είναι αν θα επιτραπεί η ελεύθερη χρήση όλων των δυνατοτήτων της host γλώσσας ή αν θα παραμείνουμε στο περιορισμένο ρεπερτόριο που θα διδάσκεται. Η αξιολόγηση ίσως είναι επίσης ένα θέμα.

Στο πρόβλημα π.χ. να εμφανιστούν τα μοναδικά στοιχεία που υπάρχουν σε ένα πίνακα υπάρχει η "απλή" λύση με πίνακα που ξέρουμε στην αεππ και υπάρχει και το one - liner συνδυασμός εντολών εκτός-εντός ύλης:  ΓΡΑΨΕ("\n".join(set(input))) .  Εκεί θα πρέπει να το πάρουμε σωστό ή λάθος; Και μη μου πείτε πού θα το ξέρουν αυτό οι μαθητές γιατί να είστε σίγουροι ότι θα βρεθούν αρκετοί τέτοιοι.

Θεωρώ πάντως ότι γενικά θα είναι λάθος να εισάγουμε μια γλώσσα όπως η python και μετά να περιορίσουμε το τι μπορεί να χρησιμοποιήσει ένας μαθητής. Θα είναι δώρο άδωρο η εισαγωγή της. Αν λοιπόν αποφασιστεί (λέω εγώ τώρα) η python να ετοιμάζεστε για μεγάλες διαμάχες!!

@spin
Ακριβώς αυτό όπως επίσης και το βάθος στο οποίο αξίζει να καλύψουμε τον συγκεκριμένο στόχο.

spin

Παράθεση από: itt στις 15 Νοε 2014, 03:08:22 ΠΜ
Θα το αναλύσω αύριο.
Δεν αντιλαμβάνομαι τον τόνο σου. Προφανώς και είναι το πρώτο αποτέλεσμα στην αναζήτηση, υποστηρίζεται επίσημα από τη Microsoft και ο Miguel είναι από τους κορυφαίους προγραμματιστές στον πλανήτη.
Ουπς, σε αυτό ξέχασα να απαντήσω  8)
Εννοώ ότι καλή η δημοφιλία και η διαφήμιση και οι συνεργασίες και το google ranking, αλλά at the end of the day μήπως πρέπει να δοκιμάζουμε κι εμείς οι ίδιοι -έστω κάποιες από- τις προσφερόμενες λύσεις ώστε να έχουμε προσωπική άποψη;
Γιατί κάποια εναλλακτική μπορεί να μας ταιριάζει περισσότερο από αυτό που μας πλασάρουν ως ιδανικό.
Αυτό ως προβληματισμός...