Και, θα τολμήσω να πω, ορισμένες φορές έχει και αρνητικό αντίκτυπο. Προσοχή: Αυτό είναι ένα σκληρό post και μπορεί να ενοχλήσει ορισμένους, αλλά εδώ είναι σοβαρό blog οπότε γράφω ο,τι γουστάρω, με το disclaimer βέβαια ότι αυτά αποτελούν προσωπικές μου απόψεις.
Ας τα πάρουμε με τη σειρά:
Τελείωσες την (συνήθως τετραετή) φοίτησή σου σε μια σχολή Πληροφορικής ή που σχετίζεται άμεσα με την επιστήμη (ιδιωτική, ΑΕΙ ή ΤΕΙ). Οι βαθμοί σου είναι πολύ καλοί και γενικά έδειξες ενδιαφέρον άνω του μετρίου για το αντικείμενο της σχολής σου κατά τη διάρκεια της φοίτησής σου. Όλες οι πόρτες είναι ανοιχτές και οι ευκαιρίες σε περιμένουν.
Η μήπως όχι;
Ας δούμε λοιπόν τι έμαθες κατά τη διάρκεια της φοίτησής σου στη σχολή σου. Για χάρη του παραδείγματος, θα πάρω, χωρίς ιδιαίτερο λόγο, στην τύχη ουσιαστικά, το πρόγραμμα σπουδών του προπτυχιακού στο Πανεπιστήμιο Πειραιά, ως αναφορά, θεωρώντας ότι σε ένα ποσοστό όλα τα προγράμματα σπουδών έχουν περισσότερα κοινά παρά διαφορετικά σημεία.
Έχω αφαιρέσει οτιδήποτε έχει να κάνει με ξένες γλώσσες, διοίκηση, νομολογία ή μαθηματικά και έχω αφήσει τα αμιγώς τεχνολογικά θέματα, μαζί με τυχόν μαθήματα επιλογής. Επίσης, τα έχω ομαδοποιήσει ανεξαρτήτως εξαμήνου ως προς το αντικείμενο του κάθε μαθήματος.
Τα απολύτως απαραίτητα:
ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ, ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ , ΤΕΧΝΟΛΟΓΙΕΣ ΔΙΑΔΙΚΤΥΟΥ, ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ, ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ, ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ, ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ, ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ, ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ, ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ, ΑΛΓΟΡΙΘΜΟΙ, ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ, ΣΥΣΤΗΜΑΤΑ ΔΙΑΧΕΙΡΙΣΗΣ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ, ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΤΟ ΔΙΑΔΙΚΤΥΟ ΚΑΙ ΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ, ΑΝΑΚΤΗΣΗ ΠΛΗΡΟΦΟΡΙΑΣ ΚΑΙ ΑΝΑΖΗΤΗΣΗ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ
Έχοντας παρακολουθήσει μαθήματα που γενικά ανήκουν σε αυτό το γκρουπ, έχετε μια σφαιρική άποψη για το τι εστι πληροφορική γενικότερα (δεδομένου ότι, φυσικά, οι πληροφορίες που σας παρέχουν οι καθηγητές και τα συγγράμματα είναι up-to-date και οτιδήποτε έχει να κάνει με ανάπτυξη λογισμικού χρησιμοποιεί σύγχρονα εργαλεία ανάπτυξης και σύγχρονες γλώσσες προγραμματισμού. Αν δεν ισχύουν αυτά, τότε μην διαβάζεις παρακάτω, δεν θα χρειαστεί).
Και πάμε στα πιό “προχώ” θέματα:
ΛΟΓΙΚΗ ΣΧΕΔΙΑΣΗ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ, ΕΦΑΡΜΟΓΕΣ ΘΕΩΡΙΑΣ ΓΡΑΦΗΜΑΤΩΝ, ΔΙΟΙΚΗΣΗ ΣΥΣΤΗΜΑΤΩΝ ΕΦΟΔΙΑΣΜΟΥ, ΑΡΧΕΣ ΚΑΙ ΕΦΑΡΜΟΓΕΣ ΣΗΜΑΤΩΝ ΚΑΙ ΣΥΣΤΗΜΑΤΩΝ, ΘΕΩΡΙΑ ΠΛΗΡΟΦΟΡΙΩΝ ΚΑΙ ΚΩΔΙΚΩΝ, ΑΛΛΗΛΕΠΙΔΡΑΣΗ ΑΝΘΡΩΠΟΥ ΚΑΙ ΥΠΟΛΟΓΙΣΤΗ, ΑΝΑΓΝΩΡΙΣΗ ΠΡΟΤΥΠΩΝ, ΠΡΟΗΓΜΕΝΗ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ, ΠΡΟΗΓΜΕΝΑ ΘΕΜΑΤΑ ΕΠΙΚΟΙΝΩΝΙΩΝ, ΑΝΑΛΥΣΗ ΔΕΔΟΜΕΝΩΝ, ΛΟΓΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ, ΚΡΥΠΤΟΓΡΑΦΙΑ, ΣΥΣΤΗΜΑΤΑ ΡΟΗΣ ΕΡΓΑΣΙΩΝ, ΘΕΩΡΙΑ ΥΠΟΛΟΓΙΣΜΟΥ, ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ, ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ ΚΑΙ ΕΜΠΕΙΡΑ ΣΥΣΤΗΜΑΤΑ, ΣΧΕΔΙΑΣΗ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ, ΔΙΚΤΥΑ ΥΨΗΛΩΝ ΤΑΧΥΤΗΤΩΝ, ΟΥΡΕΣ ΑΝΑΜΟΝΗΣ, ΣΥΣΤΗΜΙΚΗ ΑΝΑΛΥΣΗ, ΣΥΣΤΗΜΑΤΑ ΥΠΟΣΤΗΡΙΞΗΣ ΑΠΟΦΑΣΕΩΝ, ΔΙΟΙΚΗΣΗ ΑΣΦΑΛΕΙΑΣ ΣΥΣΤΗΜΑΤΩΝ, ΣΥΣΤΗΜΑΤΑ ΠΟΛΥΜΕΣΩΝ, ΓΡΑΦΙΚΑ ΜΕ ΥΠΟΛΟΓΙΣΤΕΣ, ΒΙΟΠΛΗΡΟΦΟΡΙΚΗ, ΣΥΣΤΗΜΑΤΑ ΥΠΟΣΤΗΡΙΞΗΣ ΟΜΑΔΩΝ, ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΥΣΤΗΜΑΤΩΝ , ΜΕΤΡΗΣΗ ΑΠΟΔΟΤΙΚΟΤΗΤΑΣ ΣΥΣΤΗΜΑΤΩΝ, ΚΑΤΑΝΕΜΗΜΕΝΑ ΚΑΙ ΠΟΛΥΕΠΕΞΕΡΓΑΣΤΙΚΑ ΥΠΟΛΟΓΙΣΤΙΚΑ ΣΥΣΤΗΜΑΤΑ, ΚΙΝΗΤΕΣ ΚΑΙ ΑΣΥΡΜΑΤΕΣ ΕΠΙΚΟΙΝΩΝΙΕΣ, ΑΣΦΑΛΕΙΑ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ, ΑΠΟΘΗΚΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΕΞΟΡΥΞΗ ΓΝΩΣΗΣ, ΠΡΟΣΟΜΟΙΩΣΗ ΣΥΣΤΗΜΑΤΩΝ, ΕΙΚΟΝΙΚΗ ΠΡΑΓΜΑΤΙΚΟΤΗΤΑ, ΑΝΑΛΥΣΗ ΕΙΚΟΝΑΣ, ΣΥΓΧΡΟΝΑ ΘΕΜΑΤΑ ΤΕΧΝΟΛΟΓΙΑΣ ΛΟΓΙΣΜΙΚΟΥ, ΔΙΑΧΕΙΡΙΣΗ ΓΝΩΣΗΣ, ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΣΤΗ ΝΑΥΤΙΛΙΑ
Ουφ! Δεν μπορείς να φανταστείς πόσο μου πήρε το copy-paste.
Οκ, έχοντας παρακολουθήσει κάποια ή όλα από τα παραπάνω έχεις μια πολύ πιό ολοκληρωμένη εικόνα του κόσμου της Πληροφορικής από εμένα τον πτωχό που τελείωσα ένα Οικονομικό (ναι, στο Πα.Πει.).
Αλλά, με αφορμή αυτό, να πω ότι και εγώ παρακολούθησα μια σειρά αντίστοιχων μαθημάτων στο Οικονομικό τμήμα, από Μικρο/Μακροοικονομική ως Management, Στατιστική και Οικονομετρία. Αυτό με κάνει οικονομολόγο;
Προφανώς και όχι, εξάλλου αν ήμουν οικονομολόγος σήμερα μάλλον δεν θα έγραφα αυτά που γράφω εδώ.
Γιατί λοιπόν λέω ότι μπορεί “μερικές φορές να έχει και αρνητικό αντίκτυπο” το ότι αποφοίτησες από σχολή με πολυ όμορφα και courses έχοντας μια τόσο ευρεία άποψη για τα πράγματα; ΑΚΡΙΒΩΣ για αυτό. Γιατί ειναι ΕΥΡΕΙΑ. Και ευρεία άποψη σημαίνει λιγότερη λεπτομέρεια, και φυσικά μη σύνδεση με την πραγματική αγορά και τις ανάγκες της.
Εχεις λοιπόν τελειώσει με τη σχολή σου και εχεις, υποθετικά, βρει την πρώτη σου δουλειά ως junior developer σε μια εταιρία…
“Ωπ, μισό λεπτό. JUNIOR εγώ; Που τελείωσα Πληροφορική; Που ξέρω τόσα και άλλα τόσα;”
...και το πρώτο σου assignment είναι να διορθώσεις την ονοματολογία των μεταβλητών σε ένα project δεκαετίας με 15000 γραμμές κώδικά….
“Ωπ, μισό λεπτό πάλι. ΑΥΤΑ δεν θα έπρεπε να τα κάνω εγώ.”
Και κάπου εκεί αρχίζει η σύγκρουση, γιατι δεν μπορείς να αποδεχθείς ότι η αγορά απαιτεί και τη χαμαλοδουλειά τόσο όσο και τις άλλες σου ικανότητες, και ορισμένες φορές αρνείσαι το ότι η έλλειψη εμπειρίας σου αποτελεί εμπόδιο στο να πάρεις κάτι πιό περίπλοκο ως assignment. Εσύ, που έχεις μάθει τόσα design patterns, ξέρεις από dependency injection, functional languages, έχεις κάνει UML διαγράμματα, ΕΣΥ να διορθώνεις κώδικα VB6; Σε notepad; Και στο ενδιάμεσο να κάνεις data entry; ΕΣΥ;
Και κάπου εκεί αρχίζεις τη γκρίνια. “ΕΓΩ ΕΧΩ ΚΑΝΕΙ ΚΑΤΑΝΕΜΗΜΕΝΑ ΚΑΙ ΠΟΛΥΕΠΕΞΕΡΓΑΣΤΙΚΑ ΣΥΣΤΗΜΑΤΑ!” λες.
Και ο manager, χαμογελώντας με νόημα, σου απαντάει “ναι, αλλά εδώ έχουμε ένα πελάτη που μας πληρώνει και θέλει ένα report με στοιχεία που θα καταχωρηθούν χειροκίνητα στο spreadsheet που κάνεις data entry, αύριο”.
Το πιθανοτερο είναι, βέβαια, να μην προχωρήσεις πέρα από την αρχική συνέντευξη και να μην παρεις καν τη δουλειά μια και είτε ο interviewer θα καταλάβει από πολύ νωρίς την μελλοντική σου αντίδραση, είτε εσύ θα καταλάβεις και αρνηθείς να αναλάβεις μια τέτοια εργασία.
Ομως, σε περίπτωση που την πάρεις τη δουλειά τελικά, και στην (σπάνια, αλλά όχι και αδύνατη) περίπτωση που θα σου δώσουν κάτι “προχώ” εξ’αρχής, θα έχεις άλλα προβλήματα.
Ας δούμε ένα απλό σενάριο λοιπον: Σου αναθέτουν να σχεδιάσεις το schema της database μιας εφαρμογής. Εσύ, επηρεασμένος από όσα έχεις μάθει στη σχολή σου ή/και κατά τη διάρκεια των εργασιών σου, ξεκινάς με ένα από τα παρακάτω:
- Βάζεις Ελληνικά ονόματα στα πεδία “γιατί έτσι κάνατε στα εργαστήρια”
- Ξεχνάς τα indexes ή βάζεις indexes όπου νομίζεις εσύ, ή βάζεις indexes παντού γιατί μπορεί να σου είπαν οτι τα indexes είναι καλά, αλλά αγνοείς πράγματα όπως το read/write ratio της βάσης ή τον όγκο της ή το ποιά πραγματικά data είναι write ή read intensive. Τρία κιλά indexes καλά ειναι, να τ’αφήσω;
- Πηγαίνεις by the book στο normalization αγνοώντας παράγοντες όπως efficiency και development effort για τον application developer αργότερα, και καταλήγεις να έχεις φτιάξει κάτι σε υπερτέλειο 5NF με άψογα relations το οποίο όταν το τυπώνεις ως διάγραμμα χρειάζεται 8 κιλά χαρτί και 5 αλλαγές μελανιών. Άσε τα queries που πρέπει να γραφτούν για αυτό. Το superbly-normalized schema που έχεις φτιάξει θα αναγκαστείς, μάλιστα, να το αλλάξεις σε 2 μέρες γιατί θα έχουν έρθει change requests από τον πελάτη. Διαμαρτύρεσαι όταν σου ζητηθούν αλλαγές, γιατί “δεν είναι έτσι η διαδικασία ανάπτυξης, εμείς αλλιώς την μάθαμε”.
- Αγνοείς παντελώς την ύπαρξη ORM που μπορεί να “κάτσει” πάνω στο schema και σχεδιάζεις χωρίς να λαμβάνεις υπόψη τις ιδιαιτερότητές του, με αποτέλεσμα οι developers που θα κληθούν να υλοποιήσουν database-first αργότερα να εκστομίζουν τόσες κατάρες για το πρόσωπό σου ώστε να έχεις λόξυγγα για τουλάχιστον μια πενταετία.
- Σε extreme σενάρια, υλοποιείς μόνος σου το security φτιάχνοντας χρήστες από εδώ και από εκεί και δίνοντας μόνο grant select σε views στους μισούς από δαύτους, με αποτέλεσμα μετά κανείς να μην ξέρει τι μπορεί να κάνει στη ρημάδα τη βάση (και να τραβάνε τα μαλλιά τους οι developers). Γιατί “database χωρίς fine-grained permissions είναι άχρηστη” σου λέγανε. Χώρια οτι σου παίρνει κανα μήνα να τελειοποιήσεις κάτι το οποίο δεν σου ζήτησε κανείς και πιθανότατα θα ξηλωθεί άμεσα.
Εντάξει, δεν είπαμε να ξοδέψεις ένα σημαντικό μέρος της ζωής σου κάνοντας mail merge για εκτύπωση αυτοκόλλητων ετικ��τών (ναι, το έκανα και πληρωνόμουν και καλά, αλλά εγώ είμαι μαζόχας, πάμε παρακάτω), αλλά ΜΗΝ περιμένεις ότι θα σχεδιάσεις διαστημόπλοιο τον πρώτο μήνα της πρώτης σου δουλειάς. Ούτε τον δεύτερο. Πιθανότατα, ούτε ποτέ.
Και πού’σαι, σταμάτα να κάνεις subclass και override το σύμπαν για να προσθέσεις functionality. Υπάρχουν και extension methods, καθώς και η “μπακάλικη” μέθοδος των static classes που δουλεύει μια χαρά, ιδιαίτερα σε περιβάλλον ρευστών προδιαγραφών (όπως το 99% των projects που θα δουλέψεις). Ναι, ξέρω οτι δεν σου αρέσει, αλλά αυτή είναι η πραγματικότητα.
Πού θέλω να καταλήξω;
Ότι ο πραγματικός τρόπος να αποκτήσεις τεχνογνωσία είναι να αξιοποιήσεις αυτά που έμαθες στη σχολή ΠΑΡΑΛΛΗΛΑ με την “τριβή” σου στον πραγματικό κόσμο. Και για να το κάνεις αυτο θα πρέπει να ξεκινήσεις από χαμηλά, από τις “τουαλέτες” όπως θα λέγαμε στο στρατό. Και συνδυάζοντας τη θεωρητική γνωση που έχεις με την πραγματική κατάσταση, μπορείς να φέρεις ένα πολύ καλό αποτέλεσμα. Θέλει χρόνο. Χρόνια. Και υπομονή. Και, πρωτίστως, μηδενική έπαρση.
Αλλιώς, θα γίνεις ένας ακόμα άνεργος πτυχιούχος. Αλλά πιθανότατα θα φταις εσύ.
PS. Αν δεν σας αρέσει το σοβαρό version, μπορείτε να διαβάσετε το lighter "Οι μελλοντικοί διευθυντές πληροφορικής" που γράφτηκε πριν από μερικά χρόνια.