Παρασκευή 9 Μαΐου 2014

Περί γλωσσών προγραμματισμού τα βασικά!

Σήμερα αποφάσισα να κάνω ένα διάλειμμα από την συγγραφή της 7ης έκδοσης της Μ2000, για να γράψω μερικά πράγματα για τις γλώσσες προγραμματισμού και τις εφαρμογές τους, σε αυτό εδώ το Blog.

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

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

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

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

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


Πραγματικά, πιο εύκολα γράφει κανείς προγράμματα στον αντικειμενοστραφή προγραμματισμό παρά τον μαθαίνει! Το αντίθετο συμβαίνει με τον διαδικαστικό προγραμματισμό, όπου μαθαίνεται εύκολα αλλά φτιάχνονται προγράμματα τέρατα και δύσκολα επεκτείνονται! Ο διαδικαστικός προγραμματισμός στέκεται στο πρόβλημα, μάλιστα τεμαχισμένο σε διαδικασίες, και όχι στο αντικείμενο το οποίο θα προκύψει από την ανάλυση του τι χρειάζεται κανείς για την εφαρμογή του. Αν μεθαύριο χρειαστεί επέκταση, τότε κάνουμε κάτι πολύ απλό, ξαναγράφουμε ένα νέο πρόγραμμα...που έχει κόστος άρα χρήμα για τον προγραμματιστή. Έτσι ο διαδικαστικός προγραμματισμός μπήκε στον επιχειρηματικό κόσμο της πληροφορικής και έδεσε τον προγραμματιστή με την συντήρηση του δημιουργήματός του.  Η συντήρηση είναι η ενημέρωση της εφαρμογής, όπου  αλλάζουμε τις δυνατότητές εμπλουτίζοντας τις διαδικασίες της. Το περισσότερο εδώ για τη συντήρηση είναι ο επαναπρογραμματισμός και το λιγότερο η διαγραφή άχρηστων αρχείων. Σαν αντίμετρο στην κάστα των μεγάλων προγραμματιστών ήρθαν τα αρχεία ανοιχτών προδιαγραφών, ή γενικά οι ανοιχτοί τύποι, όπου η συντήρηση τους είναι ανοιχτή προς όλους αλλά απαιτούν γνώσεις, σαφώς όμως λιγότερο εξειδικευμένες από αυτές των μεγαλο-προγραμματιστών.

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


Μια άλλη μορφή προγραμματισμού είναι ο αυτοματισμός, ο οποίος είναι το εργαλείο του εργαζόμενου γραφείου, και για το λόγο αυτό λέγεται αυτοματισμός γραφείο. Ο αυτοματισμός σουίτας γραφείου (ομάδας εφαρμογών) για παράδειγμα είναι ο τρόπος να χειριστεί κανείς τα αντικείμενα της σουίτας μέσω μακροεντολών. Η μακροεντολή, είναι το κάτι παραπάνω από μια απλή εντολή, όπως "δώσε νέα σελίδα", η οποία περιλαμβάνει "μακριά" σειρά εντολών, και από εκεί βγήκε ο όρος "μακρο-" και προστέθηκε στο όνομα. Οι μακροεντολές αρχικά δεν ήταν προγράμματα. Μάλιστα μπορούσε κανείς να κάνει εγγραφή (όπως σε κασετόφωνο) των εντολών που έδινε και να εκχωρήσει ένα συνδυασμό πλήκτρων. Αργότερα αυτό έγινε με εκχώρηση και ονομάτων ώστε τελικά μια μακροεντολή να καλεί μια άλλη όταν το ζητούν οι εντολές. Με το καιρό οι εντολές έγιναν περιφραστικές και μπήκαν και διαδικασίες. Οι μακροεντολές εκτελούνται πια με συνηθισμένες γλώσσες  που τρέχουν με διερμηνευτή με κλήση μέσα από την εφαρμογή! Επειδή όταν τρέχουν αυτές φαίνεται σαν η εφαρμογή να δίνει παράσταση...τις ονομάζουν "γλώσσες σεναρίων".


Το τελικό ερώτημα εδώ είναι: Υπάρχει η γλώσσα προγραμματισμού που τα κάνει όλα; Όχι δεν υπάρχει. Αν υπήρχε θα είχε αντικαταστήσει τις άλλες. Δεν είναι μόνο σκοπός να φέρει αποτέλεσμα ένα πρόγραμμα αλλά και αν ο κόπος και το κόστος που θα κάνει για να το φέρει θα είναι υποφερτός για μας. Οι γλώσσες προγραμματισμού δεν είναι ελεύθερες γλώσσες κατ' ανάγκη. Και αυτό γιατί για να τις χρησιμοποιήσει κανείς πρέπει να αγοράσει το περιβάλλον ανάπτυξης μαζί με τις συνοδευτικές βιβλιοθήκες διαδικασιών ή και αντικειμένων. Μεγάλες εταιρείες σου δίνουν δωρεάν την βασική έκδοση, που αν θες με αυτή μπορείς να ανακαλύψεις πάλι τον τροχό. Για να φτιάξεις  όμως εδώ και τώρα μια "λύση" για το πρόβλημα που θες λύσεις προγραμματιστικά ή θες να προσφέρεις μια Εφαρμογή για όμοια προβλήματα ή ένα γενικευμένο αντικείμενο, τότε θα πρέπει να πληρώσεις για να έχεις πρόσβαση  σε ιδιωτικό λογισμικό.


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


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

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

Γιώργος Καρράς

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.