Το Στέκι των Πληροφορικών

Γενικά => Γενικά Παιδαγωγικά, Επιστημονικά και Τεχνικά Θέματα => Παιδαγωγικά Θέματα => Μήνυμα ξεκίνησε από: sstergou στις 08 Ιουν 2010, 11:56:37 ΜΜ

Τίτλος: Συναρτησιακός προγραμματισμός και αλγοριθμική σκέψη
Αποστολή από: sstergou στις 08 Ιουν 2010, 11:56:37 ΜΜ
Με αφορμή την πρόσφατή μου ενασχόληση με τον συναρτησιακό προγραμματισμό μου δημιουργήθηκε η απορία για το αν αυτό το είδος προγραμματισμού μπορεί να χρησιμοποιηθεί στην δευτεροβάθμια εκπαίδευση για την καλλιέργεια της αλγοριθμικής σκέψης.

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

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

Ποια είναι η γνώμη σας;
Τίτλος: Απ: Συναρτησιακός προγραμματισμός και αλγοριθμική σκέψη
Αποστολή από: evry στις 09 Ιουν 2010, 12:11:27 ΠΜ
Ενδιαφέρον θέμα, άλλωστε και η logo ουσιαστικά συναρτησιακή γλώσσα είναι.
Ελπίζω πάντως να μην σε έπεισε ο γροντάς να διαβάσεις αυτό
http://mitpress.mit.edu/sicp/ (http://mitpress.mit.edu/sicp/)
Στάθη με ποια γλώσσα ασχολήθηκες? γενικά ποια γλώσσα προτείνεις σε κάποιον που θέλει να ξεκινήσει με συναρτησιακό? υποθέτω ότι θα είναι μια εκ των Haskell, Scheme ?
Τίτλος: Απ: Συναρτησιακός προγραμματισμός και αλγοριθμική σκέψη
Αποστολή από: sstergou στις 09 Ιουν 2010, 12:29:56 ΠΜ
Το μικρόβιο μπήκε πρόπερσι το καλοκαίρι όταν παρακολούθησα ένα σεμινάριο σχετικά με το πως μπορείς να μπλέξεις τον συναρτησιακό με τον αντικειμενοστραφή προγραμματισμό : http://www.ccs.neu.edu/home/vkp/HtDCH/ και όλο αυτό ως μέρος της προπαγάνδας για την διδασκαλία της scheme.

Δεν έχω ασχοληθεί πολύ με συναρτησιακές γλώσσες, έχω γράψει κάποια πράγματα σε scheme, πιο λίγα ακόμη σε haskell αλλά έχω διαβάσει σχετικά με lazy evaluation, continuations, concurrency κτλ. Πιο πολύ έχω εφαρμόσει τις ιδέες του συναρτησιακού σε γλώσσες όπως η javascript και η actionscript που αν και πρωτόγονες σε αυτό το θέμα υποστηρίζουν lambda expressions. Έχω μαζέψει αρκετό υλικό και αραιά και που ασχολούμαι. Προτείνω haskell, ocaml ή scheme σε όσους ενδιαφέρονται.

Επίσης βλέπω ότι η ιδέα του συναρτησιακού επεκτείνεται σιγά σιγά και στην βιομηχανία με πολλές γλώσσες όπως η python, η javascript, η lua και πιο πρόσφατα η c# να ενσωματώνουν τέτοια χαρακτηριστικά. Στην java συζητάνε για το αν θα υποστηρίξουν closures ενώ η microsoft ανέπτυξε ήδη την F# η οποία "δανείζεται" πολλά από την ocaml.

Πάντως το βιβλίο που προτείνει ο Γροντάς είναι κορυφαίο! Έχω δει τις διαλέξεις http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/ τις οποίες συστήνω, μιας και που άλλαξαν τον τρόπο σκέψης μου και νομίζω με έκαναν καλύτερο εκπαιδευτικό.

Τίτλος: Απ: Συναρτησιακός προγραμματισμός και αλγοριθμική σκέψη
Αποστολή από: sstergou στις 09 Ιουν 2010, 12:39:32 ΠΜ
Αυτό που έχει ενδιαφέρον να διερευνηθεί είναι τελικά τι είναι πιο κοντά στην ανθρώπινη σκέψη και με τι μπορείς να διδάξεις πιο εύκολα και σωστά πληροφορική.
Σίγουρα ο συναρτησιακός προγραμματισμός είναι πιο κοντά στα μαθηματικά ενώ ο διαδικαστικός στον υπολογιστή σαν μηχανή.

Αν υποθέσουμε ότι εμείς θέλουμε να διδάξουμε αλγοριθμική σκέψη τότε ποιο μοντέλο μας συμφέρει να ακολουθήσουμε;

Θέλουμε πίνακες, βρόχους, εκχώρηση, και αλλαγή κατάστασης ή λίστες, αναδρομή και αναφορική ακεραιότητα;
Τίτλος: Απ: Συναρτησιακός προγραμματισμός και αλγοριθμική σκέψη
Αποστολή από: pgrontas στις 09 Ιουν 2010, 10:05:26 ΠΜ
Το συγκεκριμένο θέμα με έχει απασχολήσει και μένα τα τελευταία χρόνια.
Έχω ασχοληθεί λίγο με scheme (όσο ήθελε το SICP) αρκετά με haskell (η αγαπημένη μου γλώσσα), ενώ τώρα τελευταία παίζω λίγο με F#.
Κάποια συμπεράσματα που έχω βγάλει είναι τα εξής:
1. Οι συναρτησιακές γλώσσες έχουν πολύ μικρότερο ρεπερτόριο εντολών και καθόλου δομή επανάληψης, οπότε ίσως είναι πολύ πιο εύκολο να ξεκινήσεις. Γενικά οι συναρτησιακές γλώσσες έχουν πολύ πιο απλή σύνταξη και λιγότερη φλυαρία.
2. O συναρτησιακός πρόγραμματισμός είναι ό,τι καλύτερο για να διδαχθεί αναλυτική σκέψη, δηλαδή σπάσιμο ενός προβλήματος σε μικρότερα και βέβαια αυτό να εκφραστεί στο τελικό πρόγραμμα. Η δομή των συγκεκριμένων γλωσσών, σε αποθαρρύνει να γράφεις κατεβατά. Αντίθετα σε ωθεί σε μικρές και σαφείς συναρτήσεις. Το ίδιο ισχύει και με μεταβλητές και δομές-εγγραφές.
3. Χρησιμοποιούν πολύ ωραία τους τύπους των μεταβλητών και των συναρτήσεων. Δηλαδή σε ωθούν σε μια αλγεβρική θεώρηση του προγράμματος, όπου μπορείς να ταιριάξεις τύπους μεταβλητών και συναρτήσεων έτσι ώστε αν ταιριάζουν οι τύποι το πρόγραμμα να είναι σωστό. Επιπλέον οι τύποι σε καθοδηγούν στο να φτιάξεις τις συναρτήσεις και τις δομές.
4. Νομίζω ότι δεν πρέπει να χρησιμοποιηθεί μια pure γλώσσα όπως η Haskell, γιατί δυσκολεύει πολύ τα πράγματα με την αναφορική ακεραιότητα. Αντίθετα μια γλώσσα που υποστηρίζει εκχώρηση όπως την ξέρουμε είναι πιο εύκολη στην εκμάθηση (πχ. OCAML)

Πολύ ενδιαφέρον θέμα!!!
Τίτλος: Απ: Συναρτησιακός προγραμματισμός και αλγοριθμική σκέψη
Αποστολή από: sstergou στις 09 Ιουν 2010, 12:00:32 ΜΜ
Πάντως διδάσκουμε επίλυση προβλημάτων και δεν κάνουμε καμία αναφορά για τεχνικές όπως η διάρει και βασίλευε.

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