Τετάρτη 5 Νοεμβρίου 2008

H Τεχνολογία Λογισμικού είναι κλάδος της Μηχανικής ή της Πληροφορικής;

Στο βιβλίο Τεχνολογία Λογισμικού Ι του ΕΑΠ έκδοσης 2000, αναφέρεται ότι η τεχνολογία λογισμικού (software engineering) είναι η περιοχή εκείνη της επιστήµης της µηχανικής η οποία ασχολείται µε την εύρεση και θεµελίωση µεθόδων για να περιγράφεται, να κατασκευάζεται και να συντηρείται λογισµικό.

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

Ας ξεκινήσουμε από μια προκαταρκτική επισήμανση: ο όρος engineering έχει επικρατήσει να αποδίδεται στην ελληνική με τον όρο μηχανική και όχι με τον όρο τεχνολογία. Αυτό, κατά τη γνώμη μας, είναι ορθό, διότι η μηχανική, ή αλλιώς τεχνοεπιστήμη, είναι η επιστήμη της κατασκευής, ή αλλιώς του τεύχειν, της τεχνικής. Έτσι, το Τεχνικό Επιμελητήριο Ελλάδος, έχει ως μέλη τους (διπλωματούχους) μηχανικούς που έχουν σπουδάσει κάποιον κλάδο της επιστήμη της μηχανικής, δηλαδή τους τεχνοεπιστήμονες.Έτσι, μιλούμε για Αρχιτέκτονες Μηχανικούς, Μεταλειολόγους Μηχανικούς, Ναυπηγούς Μηχανικούς κ.λ.π. αναφερόμενοι στους τεχνοεπιστήμονες των εγκαταστάσεων που αναφέρονται αντίστοιχα στη διαβίωση, την εξόρυξη, τη ναυπήγηση. Το ορθό, λοιπόν, εφόσον το software engineering αναφέρεται σε τεχνοεπιστήμη, είναι να το αποδώσουμε ως μηχανική λογισμικού και τον αντίστοιχο τεχνοεπιστήμονα να τον αποκαλούμε μηχανικό λογισμικού. Θα μπορούσαμε, λοιπόν, σε αυτό το σημείο να δεχθούμε ότι

μηχανική λογισμικού (software engineering) είναι ο κλάδος της
µηχανικής ο οποίος ασχολείται µε την εύρεση και θεµελίωση µεθόδων για να περιγράφεται, να κατασκευάζεται και να συντηρείται λογισµικό.

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

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

Στο σημείο αυτό, τα πράγματα φαίνεται να διευκρινίζονται και η αρχική σύγχυση να διαλύεται. Νέα σύννεφα, όμως, εμφανίζονται στον ορίζοντα αν προσπαθήσουμε να δούμε κατά πόσο οι λεγόμενοι computer scientists, που ελληνικά αναφέρονται ως επιστήμονες υπολογιστών, μπορούν να ασκούν το έργο του software engineer. Η προφανής απάντηση είναι ναι, ωστόσο, μπορεί να υπάρχουν και κάποιοι που το αμφισβητούν και τους παραπέμπουμε στο λήμμα software engineering στην αγγλική wikipedia το οποίο μας πληροφορεί ότι οι μισοί software engineers σήμερα έχουν αποφοιτήσει από τμήματα computer science ενώ αρκετοί από εξειδικευμένα τμήματα software engineering. Περαιτέρω, στο λήμμα software engineering demographics αναφέρεται ότι 1 στους 200 εργαζομένους στις ΗΠΑ (εκεί όπου πρωτοχρησιμοποιήθηκε ο συγκεκριμένος όρος) είναι software engineer και ότι το πλήθος των software engineers στην ίδια χώρα αντιστοιχεί στο 60% των traditional engineers. Αν κάνουμε την αναγωγή στην Ελλάδα, σημαίνει ότι πρέπει να υπάρχουν περίπου 50.000 software engineers το οποίο φαίνεται αληθές λαμβάνοντας υπόψη ότι ο αγγλικός όρος software engineer περιλαμβάνει όλους τους αποφοίτους ΑΕΙ και ΑΤΕΙ πληροφορικής που εργάζονται στην ανάπτυξη οποιασδήποτε μορφής λογισμικού. Aν μάλιστα συγκριθούν τα προγράμματα σπουδών των τμημάτων αυτών θα διαπιστωθεί μια αξιοσημείωτη σύγκλιση και μια έντονη διαφοροποίησή τους από παραδοσιακά τμήματα μηχανικών που αξιώνουν ότι καλύπτουν επιστημονικά το συγκεκριμένο πεδίο. Μήπως λοιπόν οι computer scientists είναι engineers;

Προσεγγίζονται αυτό το τελευταίο ερώτημα οφείλουμε καταρχήν να αποσαφηνίσουμε τους όρους scientist και engineer. Για έναν αγγλόφωνο science και engineering είναι δύο διαφορετικά (αν και μερικώς επικαλυπτόμενα) πράγματα όπως και οι παρεπόμενη όροι computer scientist (ως ένα ιδιαίτερο είδος scientist) και software engineer ή computer engineer (ως δύο ιδιαίτερα είδη engineer).

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

Πώς προκύπτει αυτή η σύγχυση; Πώς μπορούμε να τη διαλύσουμε ώστε να μπορέσουμε, τελικώς, να δώσουμε μια απάντηση στο τελευταίο ερώτημα που θέσαμε; Μια πρώτη παρατήρηση είναι ότι ο ελληνικός όρος επιστήμη αντιστοιχεί επίσης και στον αγγλικό όρο discipline που αναφέρεται σε έναν κλάδο γνώσης ο οποίος ακολουθεί ορισμένη μεθοδολογία. Η χρήση του πολύ γενικότερου όρου επιστήμη για να αποδοθούν οι δύο διαφορετικοί αγγλικοί όροι science και discipline δημιουργεί τραγελαφικές καταστάσεις όταν δεν είναι ξεκάθαρο στο μυαλό μας τι εννοούμε κάθε φορά: Για έναν αγγλόφωνο η νομική δεν είναι science ενώ για έναν ελληνόφωνο είναι επιστήμη. Και αυτό διότι ο όρος science αναφέρεται καταρχήν σε αυτό που εμείς θα λέγαμε θετικές επιστήμες. Για έναν ελληνόφωνο ένας (διπλωματούχος) μηχανικός είναι επιστήμονας χωρίς καμία αμφιβολία ενώ για έναν αγγλόφωνο δεν είναι scientist!

Η λέξη κλειδί εδώ, είναι η λέξη πληροφορική ως απόδοση του γερμανικό όρου informatik ο οποίος αναφέρεται στο σύνολο του πεδίου που αποδίδεται με τους αγγλικούς όρους computer science, computer engineer και software engineer. Το λήμμα informatik στην γερμανική wikipedia είναι αρκούντως διαφωτιστικό επί του θέματος. Ο όρος πληροφορική λοιπόν δεν μπορεί να αποδοθεί ως επιστήμη (κατά το αγγλικό science) ούτε ως μηχανική (κατά το engineering) αλλά με το discipline το οποίο και πάλι αποδίδεται ως επιστήμη. Η πληροφορική είναι discipline όπως είναι η ιατρική, η νομική, το science, το engineering. Στην Ελλάδα το μοντέλο εκπαίδευσης στην Πληροφορική ακολουθεί κατά κάποιο τρόπο το μοντέλο που ακολουθείται από την ιατρική και τη νομική όπου οι βασικές σπουδές είναι ενιαίες, όπως τεκμηριώνεται από την αξιολόγηση των οδηγών σπουδών Πληροφορικής που έχει εκπονήσει η Ένωση Πληροφορκών Ελλάδας, και η ειδίκευση ακολουθεί μετά είτε μέσω μεταπτυχιακών σπουδών είτε μέσω της επαγγελματικής δραστηριότητας. Αυτό μάλλον θετικό μπορεί να θεωρηθεί αν ληφθεί υπόψη ότι η τεχνική εξειδίκευση σε επίπεδο βασικού πτυχίου που ακολουθείται ιδιαίτερα στη Μεγάλη Βρεττανία είναι διπλά αναποτελεσματική καθώς περιορίζει το εύρος των γνώσεων των φοιτητών με αποτέλεσμα να μην αντιλαμβάνονται τη βαθύτερη ουσία της Πληροφορικής και αφετέρου τους καθιστά ευάλωτους ως εργαζομένους στις συχνές τεχνολογικές αλλαγές. Έχουμε λοιπόν ήδη ένα σοβαρό λόγο να θεωρούμε ότι η μηχανική και η τεχνολογία λογισμικού θα πρέπει να θεωρηθούν ειδικότητες που εντάσσονται στην πληροφορική και όχι στην μηχανική.

Υπάρχει, όμως, και ένας δεύτερος εξίσου σοβαρός λόγος. Όσοι έχουν και την ελάχιστη επαφή με το software engineering, γνωρίζουν ότι ο κύκλος ζωής του λογισμικού δεν οργανώνεται με τον τρόπο που οργανώνεται ο κύκλος ζωής ενός κλασσικού έργου μηχανικής όπου κατά κανόνα έχουμε τη διάκριση τριων κύριων φάσεων, αυτόν της περιγραφής (μελέτη), της κατασκευής και της συντήρησης. Αυτό οφείλεται στην ιδιαίτερη φύση του λογισμικού που δεν έχει στατικό αλλά δυναμικό χαρακτήρα. Γι' αυτό και χρησιμοποιείται ο όρος ανάπτυξη για να αποδώσει τη διαδικασία διαρκούς προσαρμογής του στις, συχνά μεταβαλλόμενες, ανάγκες των χρηστών του και επίλυσης προβλημάτων που εμφανίζονται κατά την λειτουργία του και τα οποία είναι εξαιρετικά δύσκολο ή δαπανηρό να εντοπιστούν εκ των προτέρων. Έτσι, συχνές είναι οι κυκλοφορίες νέων εκδόσεων λογισμικού με επάλληλους κύκλους δοκιμής (alpha testing, beta testing κ.λ.π.) σε ένα διαρκώς διευρυνόμενο κύκλο χρηστών-δοκιμαστών μέχρι να φτάσουν στους τελικούς χρήστες. Το πόσο αδόκιμος είναι, για παράδειγμα, ο όρος κατασκευή για τη φάση δημιουργίας του λογισμικό, φαίνεται αν τον μεταγράψουμε στα αγγλικά (construction).

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

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

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

Ας σημειωθεί ότι αποφεύγουμε συνειδητά να αναλύσουμε σε φάσεις το στάδιο της ανάπτυξης του λογισμικού μια που οι εφαρμοζόμενες σήμερα μεθοδολογίες εμφανίζουν μεγάλη ποικιλία προκειμένου να ανταποκριθούν σε διαφορετικές ανάγκες και να αξιοποιήσουν τις δυνατότητες που παρέχουν οι διαφορετικές πλατφόρμες ανάπτυξης λογισμικού. Να σημειωθεί επίσης ότι ο αγγλικός όρος software engineering δεν διακρίνει μεταξύ μηχανικής λογισμικού και τεχνολογίας λογισμικού με αποτέλεσμα ο software engineer να αναφέρεται στον μηχανικό λογισμικού και στον τεχνολόγο λογισμικού. Εδώ η ελληνική γλώσσα εμφανίζει μια σαφή υπεροχή η οποία ανταποκρίνεται και στη διάκριση ανάμεσα σε Ανώτατα Εκπαιδευτικά Ιδρύματα και Ανώτατα Τεχνολογικά Εκπαιδευτικά Ιδρύματα.