Έβλεπα προχτές αυτά τά καταπληκτικά video(
1,
2) στο Channel9 απο το
JAOO, όπου "πρωταγωνιστεί" ο κύριος (Dr) Joe Armstrong. Ο Joe λέει, δούλευε στα εργαστήρια της
Ericsson, όπου δημιούργησαν μια γλώσσα προγραμματισμού, την
Erlang, ή οποία είναι functional και dynamically typed, αλλά το κύριο χαρακτηριστικό της είναι ότι είναι τρελά concurrent-able. Παραλληλίζει απο φύσης ας πούμε.
Στο video λοιπόν, ο Joe υποστηρίζει ότι ο τρόπος με τον οποίο προγραμματίζουμε, δεν ανταποκρίνεται στο φυσικό κόσμο. Με την έννοια, ότι δεν υπάρχει shared state, κάποιο αντικείμενο ή ιδέα, το οποίο να μοιράζεται σε παραπάνω απο έναν.
Όταν βλέπουμε κάτι, στην πραγματικότητα και οι δύο ανταποκρινόμαστε σε πολλαπλά, αλλά ατομικά, μυνήματα που μας μεταφέρει το φώς. Δύο άνθρωποι μπορεί να βλέπουν το ίδιο αντικείμενο απο ακριβώς την ίδια θέση και με τις ίδιες συνθήκες, αλλά σε καμμία περίπτωση δε θα σχηματίσουν το ίδιο ακριβώς "
μοντέλο" της πραγματικότητας στο μυαλό τους.
Ακόμη κι αυτό ήταν δυνατό, τα μοντέλα θα ήταν ακόμη δύο. Δε μοιράζονται. όπως και τίποτα δε μοιράζεται, στην πραγματικότητα ... (
καλό ε)
Λέει επίσης, ότι ο τρόπος που γράφουμε κώδικα, κατα συνέπεια, δεν είναι λογικός.
Σε μια μαθηματική "φράση", δε θα γράφαμε ποτέ χ = χ + 1. Μάλιστα κάποιος θα κοίταζε απορημένος την έκφραση αν δεν είχε προγραμματιστικό background.
Ο τρόπος του functional κόσμου είναι να μη μοιράζεις μεταβλητές μεταξύ λειτουργικότητας. Κομμένο το ByRef δηλαδή στη VB, και μόνο value types ή όλες οι μεταβλητές readonly και προσεχτικά, αν γράφεις C#. [**]
Η αλήθεια είναι ότι αν το σκεφτείς, συνήθως όταν βρίσκεις τον εαυτό σου πάνω απο ένα debugger τελικά κυνηγάς μια μεταβλητή της οποίας η τιμή είναι λάθος, και ψάχνεις να βρείς π ο ι ό ς και π ό τ ε έθεσε τη λάθος τιμή - λέει πάλι ο Joe κάπου στο video.
Το σκέφτηκα λίγο, κι έχει δίκιο ... :D
** - Δεν είναι τόσο hardcore όλοι, αυτή είναι η αρχή, αλλά αυτό δε σημαίνει ότι δεν υπάρχουν functional γλώσσες που να προσεγγίζονται απο θνητούς ... .
Angel
O:]