ΕΠΕΙΣΟΔΙΟ 27: Ωρα για training!

0

Μια όμορφη, βαρετή μέρα στην ΤριαΚιλαΚωδικα Α.Ε. Τίποτα δεν ταράζει την ηρεμία της εταιρίας. Όλα βαίνουν φυσιολογικά: Ταπεινωτικά τηλέφωνα από εξοργισμένους πελάτες, αγριοφωνάρες του project manager, Πολύξερου Τοθέλωχθες, γιατί δεν βγαίνουν οι προθεσμίες, υστερικές κραυγές του R&D manager, Απόλυτου Ξερόλα, γιατί δεν του βγαίνει η δεύτερη από τις δύο γραμμές κώδικα που έγραψε, headbanging από τον junior Ψηλομύτη Μεμάστερ όταν του βγαίνει ο κώδικας (αλλά και όταν δεν του βγαίνει – metal rulez!), διπλοπενιές από το κινητό τηλέφωνο της Τούλας που χτυπάει συνεχώς σε ρυθμό «σσσαμαρτωλή»¨…γενικά μια ατμόσφαιρα όπως ακριβώς κάθε άλλη ημέρα.

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

ΑΠΞ: (Ξεσκονίζοντας το παντελόνι του) Ακουσες Ζαχαρια; Σήμερα θα έχουμε training!
ΔΤΦ: (Προσπαθώντας να αντισταθεί στην επιθυμία να δαγκώσει δυνατά τον Απόλυτο ) Α, ναι; Ωραία. Για τι θέμα;
ΑΠΞ: Εχουμε προσκεκλημένο τον κ. Εμπειρο Παραγωγικό, ο οποίος θα μας δώσει κατευθυντήριες γραμμές για τη σωστή ανάπτυξη software.
ΔΤΦ: (Ενθουσιασμένος) Ο ΠΑΡΑΓΩΓΙΚΟΣ! Το ίνδαλμά μου! Ο άνθρωπος που κατάφερε να παραδώσει 10 εφαρμογές στη σειρά σε μεγάλους πελάτες χωρίς να εμφανίσουν ούτε ένα bug! Τέτοιοι επαγγελματίες σπανίζουν πλέον. Πω πω, ανυπομονώ να τον ακούσω!
ΑΠΞ: Μμμ...σιγά τον μεγάλο αρχιτέκτονα. Είμαι σίγουρος οτι θα μας πει ήδη πράγματα που ξερουμε. Εξάλλου ΕΓΩ ξέρω τα περισσότερα από αυτά. Τι δηλαδή, επειδή ήταν τυχερός και δεν παραπονέθηκαν οι πελάτες σημαίνει οτι είναι μεγάλο κεφάλι;
ΔΤΦ: Μα ήταν 10 πελάτες…
ΑΠΞ: Ελα, ελα, Ζαχαρία, μην εντυπωσιάζεσαι…όταν θα έρθεις στη θέση ΜΟΥ (μετά από πολλαααα πολλάααα χρόνια) θα καταλάβεις!
ΔΤΦ:...

Η ώρα για το πολυπόθητο σεμινάριο έχει πλέον φτάσει. Ο Ζαχαρίας, ο Ψυλομύτης Μεμάστερ, ο Απόλυτος Ξερόλας και η Τούλα (οσοι δηλαδή δεν τύγχαναν βαρέως εξευτελισμού και πιθανής δικαστικής αγωγής από αγανακτισμένο πελάτη εκείνη την ώρα) φθάνουν στο meeting room οπου ο κ. Εμπειρος Παραγωγικός βρίσκεται ήδη, προετοιμάζοντας την παρουσίασή του. Μετά από ένα σύντομο διαπληκτισμό του Ψηλομύτη Μεμάστερ με τον Ζαχαρία, με τον δεύτερο να προσπαθεί να πείσει τον πρώτο να ΜΗΝ ρωτήσει για οτιδήποτε έχει να κάνει με Lisp ούτε να τολμήσει να αναφωνήσει "Linux Rulez, death to false metal" και να κατσει στην γωνία του μουγγός σεευχαριστωπολυ, η παρουσίαση ξεκινάει.

ΕΜΠ: Καλή σας ημέρα κυρίες και κύριοι. Το σημερινό σεμινάριο απευθύνεται όχι μόνο στους developers, αλλά σε όλον τον κόσμο που εμπλέκεται με τον ένα ή τον άλλο τρόπο με τη δημιουργία software. Θα δούμε λοιπόν πώς μπορούμε να δημιουργήσουμε εφαρμογές που να ανταποκρίνονται στις προδιαγραφές, με όσο το δυνατόν λιγότερα bugs εξασφαλίζοντας το μεγαλύτερο δυνατό έσοδο που μπορούμε για την εταιρία μας...
ΑΠΞ: Τι εννοείτε "το μεγαλύτερο δυνατό έσοδο;"
ΔΤΦ: (Προσπαθώντας να προλάβει την καταστροφή) Απόλυτε...
ΕΜΠ: Γκουχ. Εννοώ οτι όταν ο πελάτης δεν σας καλεί για bugs που ευθύνεστε να επιλύσετε, ο κόσμος απασχολείται λιγότερο και έτσι έχει τα χέρια του ελεύθερα να προχωρήσει σε άλλες, πιό προσοδοφόρες εργασίες...
ΑΠΞ: (Εξοργισμένος) Μα αυτό είναι ένα τρομέρό λάθος!
 (Ο Ζαχαρίας κλείνει τα μάτια και τα αυτιά του ελπίζοντας οτι θα προλάβει να συμβεί κάποιο κοσμοϊστορικό γεγονός - να πέσει μετεωρίτης στο κτίριο, να γίνει ένοπλη ληστεία, να ακούσει ο Ψηλομύτης Μεμάστερ οτι η Microsoft βγάζει τη Lisp.NET - ωστε να μην προλάβει ο Απόλυτος να τελειώσει τη φράση του...)
ΑΠΞ: Οταν ο πελάτης καλεί για bugs βρίσκεται σε διαρκή επικοινωνία με την εταιρία! Ετσι μπορούμε να τον προσεγγίζουμε για να του πουλάμε επιπρόσθετα προϊόντα και υπηρεσίες!
ΕΜΠ: (Με βλέμμα ιγκουάνα που φόρεσε για πρώτη φορά γυαλιά μυωπίας) Χρησιμοποιείτε τα bugs ως ΕΡΓΑΛΕΙΟ MARKETING;;;!!!;;;
ΑΠΞ: (Με αγέρωχο και σίγουρο ύφος) Φυσικά!
ΕΜΠ: (Προσπαθώντας να κρύψει την αμηχανία του) Γκουχ. Εντάξει, ας πάμε παρακάτω. Σήμερα θα θίξουμε ένα σημαντικό ζήτημα που είναι το error reporting στις εφαρμογές μας. Πολλές φορές ο χρήστης βλέπει ένα κρυπτικό και περίεργο μήνυμα λάθους το οποίο δεν του δίνει καμμία πληροφορία για το τι πραγματικά πήγε στραβά. Ετσι λοιπόν..
ΑΠΞ: (Εξαλλος) Συγγνωμη! Θέλετε να μας πείτε οτι πρέπει να λέμε στο χρήστη ΤΙ ΠΡΑΓΜΑΤΙΚΑ πήγε στραβα;
ΕΜΠ: Εεε...
ΑΠΞ: Και αν αυτό που πήγε στραβά δεν πρέπει να το μάθει ο χρήστης;
ΕΜΠ: (Απορημένος) Μα ΤΙ είναι αυτό που δεν θα έπρεπε να μάθει ο χρήστης αγαπητέ μου;
ΑΠΞ: Για παράδειγμα, δεν μπορω να βγάλω μήνυμα λάθους στο χρήστη "Η εφαρμογή κόλλησε γιατί ο προγραμματιστής δεν φρόντισε να καθαρίζει τη μνήμη και έτσι μετά από πολύωρη χρήση μπουκώνει - παρακαλώ επανεκκινήστε"!

(Ο Ζαχαρίας έχει αρχίσει να αφρίζει και κλωτσάει δυνατά τον Απόλυτο κάτω από το τραπέζι. Δυστυχώς το πόδι του δεν βρίσκει το σωστό στόχο και πετυχαίνει τον Ψηλομύτη ο οποίος, για να εκδικηθεί φωνάζει δυνατά)
ΨΜΜ: LISP! LISP! LISP! LISP!
ΔΤΦ: (Αμήχανος) Εεε, γιτσες!
(Ο κ. Παραγωγικός κοιτάει απορημένα)
ΔΤΦ: (Ιδρώνοντας) Εεεε, ο συνεργάτης μου έχει περίεργο φτάρνισμα!

ΕΜΠ
: Εντάξει κύριε Ξερόλα, μα άν ΞΕΡΕΤΕ που οφείλεται το σφάλμα γιατί δεν φροντίζετε να καθαρίζετε τη μνήμη αντί να βγάζετε το μήνυμα λάθους;
(Ο Απόλυτος ετοιμάζεται να πει και πάλι κάτι πολύ δυσάρεστο για τις ικανότητες των προγραμματιστών αλλά το μετανοιώνει μια και το μάτι του πέφτει επάνω στο Ζαχαρία που έχει κοκκινίσει σαν μπαρμπούνι που του είπαν ότι η γυναίκα του παίρνει βραδινά μαθήματα μαγειρικής με θαλασσινά)
ΕΜΠ: Συνεχίζω. Ειναι σημαντικό να δίνετε τις σωστές εξηγήσεις. Οι "παλαιότερες" σχολές προγραμματιστών έχουν την συνήθεια να εμφανίζουν μηνύματα όπως "Σφαλμα 0344". Αυτό δεν λεέι τίποτα στο χρήστη.
ΑΠΞ: Πως, πως! Φυσικά και λέει!
ΨΜΜ: Και εγώ συμφωνώ! Φυσικά και λέει!
ΕΜΠ:Δηλαδή; Τι θέλετε να πείτε; Ενας κωδικός εξηγεί στο χρήστη τι συνέβη;
ΑΠΞ: Φυσικά! Κάθε εφαρμογή που ΕΓΩ προσωπικά επιμελούμαι συνοδεύεται από ένα εγχειρίδιο επεξήγησης κωδικών!
ΨΜΜ: Ναι, ναι! Και στη σχολή όταν κάναμε τις ασκήσεις βάζαμε κωδικούς σφαλμΑΟΥΤΣ!
(Το πόδι του Ζαχαρία βρήκε αυτή τη φορά το σωστό στόχο)

ΕΜΠ: Εεε, κύριε Ξερόλα, τι μεγέθους είναι αυτό το εγχειρίδιο;
ΑΠΞ: (Κορδωμένος, με υπερηφάνεια υπερκαταναλωτικού κατόχου πιστωτικής κάρτας που πήρε μηδενικό ποσό χρέους στο statement του για το μήνα) Πάνω απο 100 σελίδες! Ακόμα και αν δεν έχουμε ΤΟΣΑ μηνύματα σφάλματος, βάζουμε και κάποια τα οποία δεν εμφανίζονται ποτέ στην εφαρμογή για να πιάσουμε τις 100 σελίδες! Μερικά στην τύχη.
ΕΜΠ:Και γιατί το κάνετε αυτό;
ΑΠΞ: Αααα, απλά πράγματα. Ξέρετε τι ευχαρίστηση είναι για τον πελάτη να παίρνει κάτι τόσο ΒΑΡΥ στα χέρια του; (Με θερμοκόλληση και σκληρο΄εξώφυλλο, εννοείται). Φαίνεται ωραία στη βιβλιοθήκη του, και νοιώθει οτι αξίζει τον κόπο που πλήρωσε τόσα χρήματα για την εφαρμογή. Αφήστε που ΕΓΩ έχω φτιάξει και ένα random error message generator ακριβώς για αυτό το λόγο.
ΕΜΠ:...
ΕΜΠ: (Ανατριχιασμένος) Εχετε κάποιο τέτοιο εγχειρίδιο μαζί σας;
ΑΠΞ: Φυσικα!
ΕΜΠ:Μπορείτε να μου διαβάσετε μια επεξήγηση σφάλματος στην τύχη;
ΑΠΞ: Μονο μία! Οσες θέλετε! (Ανοίγει μια σελίδα στην τύχη) Μμμμ..."σφαλμα 04444. Γενικό σφάλμα. Βλέπε σφάλμα 03454". (Γυρίζει σελίδα) "Σφάλμα 03454: Η διεργασία διάνοιξης διεργασιών δεν ολοκληρώθηκε λόγω μη διάνοιξης της διεργασίας"
ΕΜΠ: Και τι σημαίνει αυτό για το χρήστη;
ΑΠΞ: Εεεε....πολλές ώρες customer support! Εσοδα! Και όπως προείπα, έχουμε την ευκαιρία να του πουλήσουμε...

ΕΜΠ
: (Διακόπτοντας απότομα) Εεε, ωραία. Ας αφήσουμε τα σφάλματα και ας πάμε σε ένα άλλο μεγάλο θέμα. Εγκατάσταση των εφαρμογών. Ενα θέμα που πολλές φορές εμπεριέχει κρυμμένα κόστη. Η χρήση ενός πακέτου εγκατάστασης σε μεγάλες εφαρμογές κρίνεται απαραίτητη...
ΑΠΞ: Ενίσταμαι!
ΕΜΠ: Παλι; Γιατί κύριε Ξερόλα;
ΑΠΞ: Το πακέτο εγκατάστασης συμβάλλει στην κακή ψυχολογία του χρήστη!
ΕΜΠ: Γιατί;
ΑΠΞ: Ε, να. Κανει κλικ στο εικονίδιο και η εφαρμογή εγκαθίσταται.
ΕΜΠ: Και τι κακό έχει αυτό;
ΑΠΞ: Σοβαρά μιλάτε; Ξέρετε τι λέει ο χρήστης; "Μα καλά, αυτό ήταν όλο; Για αυτό περιμέναμε ενα χρονο και πληρώσαμε τόσα λεφτά;"
ΕΜΠ:Και τι θα έπρεπε να γίνεται δηλαδή;
ΑΠΞ: Α, έχουμε ένα αλάνθαστο σύστημα εντυπωσιασμού. Στέλνουμε πάντοτε τέσσερις τεχνικούς στον πελάτη.
ΕΜΠ: (Εκπληκτος) ΤΕΣΣΕΡΙΣ;
ΑΠΞ: Φυσικά. Ο ένας εγκαθιστά τη βάση δεδομένων. Ο δεύτερος φτιάχνει τον application server. Ο τρίτος τους clients. Και ο τέταρτος είμαι εγώ.
ΕΜΠ: ΕΣΕΙΣ εμφανίζεστε ως τεχνικός;
ΑΠΞ: (Προσπαθώντας να φανεί ταπεινόφρων, αποτυχημένα) Προσπαθώ να εντυπωσιάσω τους πελάτες με την ευρύτητα των πεδίων που ασχολούμαι.
ΕΜΠ: Και τι κάνετε όταν βρίσκεστε στο χώρο του πελάτη;
ΑΠΞ: Καθυστερώ τους τεχνικούς έτσι ωστε να φαίνεται οτι η εγκατάσταση παίρνει πολλή ώρα. (Χαχανίζει) εεε, μια φορά μάλιστα έσβηνα στην τύχη πίνακες από τη βάση δεδομένων όσο γινόταν η εγκατάσταση και έτσι καταφέραμε να πουλησουμε στον πελάτη και antivirus μια και πίστεψε οτι κάποιος ιός έκανε τη δουλειά!
ΕΜΠ: Θα ήθελα πολύ να γνωρίσω τους πελάτες σας…

ΔΤΦ
: (Προσπαθώντας απεγνωσμένα να σώσει την κατάσταση) Κύριε Παραγωγικέ, ποιά είναι η άποψή σας για το διαχωρισμό του presentation από το business logic;
ΕΜΠ: (Ανακουφισμένος) Α, να μια πάρα πολύ καλή ερώτηση. Φυσικά και πρέπει, ακόμα και στη μικρότερη εφαρμογή, να υπάρχουν διακριτά layers και το presentation όσο το δυνατόν να μην εμπεριέχει business logic...
ΑΠΞ: (Παρεμβαίνοντας δυναμικά) Τι εννοείτε;
ΕΜΠ: Εννοώ οτι όταν έχετε, για παράδειγμα, μια φόρμα, ο κώδικας χειρισμού των αντικειμένων που αυτή παρουσιάζει πρέπει να ανήκει σε δικό του layer. Η φόρμα πρέπει να είναι "χαζή" όσο το δυνατόν για να μην υπάρχουν εξαρτήσεις από το...
ΑΠΞ: Απαράδεκτο! Απαράδεκτο! Μα κύριε Παραγωγικέ δεν έχετε ακούσει ποτέ για το MVC;
ΕΜΠ: (Εκπληκτος) Φυσικά και έχω ακούσει! Αυτό προσπαθώ να σας πω!
ΑΠΞ: Μα εμείς εφαρμόζουμε στο έπακρο MVC!
ΕΜΠ:Πώς το κάνετε αυτό δηλαδή;
ΑΠΞ: Να, κοιτάξτε εδώ (ανοίγει το laptop του)
ΕΜΠ: (Κοιτάει) Εεεε, γκουχ, κύριε Ξερόλα, το να ονομάζετε μια φόρμα MVCForm1 δεν σημαίνει οτι ακολουθείτε το MVC!
ΑΠΞ: (Εκπληκτος και απορημένος) Μα φυσικά και ναι! Και ξεχωριστά layers! Κοιτάξτε! (Ανοίγει τον κώδικα της φόρμας οι γραμμές του οποίου προσεγγίζουν τις 40.000)
ΕΜΠ: (Βήχει) Μα αυτή η φόρμα έχει όλο τον κώδικα! Που είναι το business logic;
ΑΠΞ: Στη φόρμα.
ΕΜΠ: Και το database access layer;
ΑΠΞ: Στη φόρμα.
ΕΜΠ:ΘΑ ΜΕ ΤΡΕΛΛΑΝΕΤΕ. Και πώς θεωρείτε οτι αυτά είναι ξεχωριστά layers;
ΑΠΞ: Να, ορίστε. Κοιτάξτε. Εχω ένα comment εδώ: "Start of business logic layer" και εδώ: "Start of Data Access Layer".
ΕΜΠ: Κύριε Ξερόλα;
ΑΠΞ: Μαλιστα
ΕΜΠ: Διαβάζετε βιβλία για αρχιτεκτονική software, ετσι;
ΑΠΞ: Μαλιστα. Πολλά.
ΕΜΠ: Και απο ο,τι καταλαβαίνω διαβάζετε ΜΟΝΟ την εισαγωγή σε κάθε βιβλίο, ετσι;
ΑΠΞ: (Γκουχ). Ε, προσπαθώ να πάρω μια γενική ιδέα...
ΕΜΠ: ΚΑΙ ΔΕΝ ΕΧΕΤΕ ΔΙΑΒΑΣΕΙ ΠΟΤΕ ΤΙ ΕΝΝΟΟΥΜΕ OTAN ΛΕΜΕ ΞΕΧΩΡΙΣΤΑ LAYERS ΕΤΣΙ;
ΑΠΞ: Εεε, δεν έχω φτάσει ακόμα σε αυτό το κεφάλαιο...

ΤΟΥ: (Με μελιστάλαχτο ναζιάρικο ύφος, όπως πάντα) Μπορώ να κάνω και εγώ μια ερώτηση;
(Ο Ζαχαρίας ετοιμάζεται να κρυφτεί κάτω από το τραπέζι)
ΕΜΠ: Φυσικά δεσποινίς μου. Σας ακούω.
ΤΟΥ: Οταν προσπαθώ να ανοίξω το excel με τα τρέχοντα projects μου βγαίνει ένα μήνυμα που λέει οτι έχει ιό. Μήπως το excel μου είναι γραμμένο σε ντζάβα και γι'αυτό δεν τρέχει το ΧουΤουΜουΛού που έχει μέσα και πέφτει το online; Μπορώ να κάνω το MVC που είπατε πριν για να ανοίγει; Μήπως πρέπει να έχω τα Γουίντοου Βήστα για να παίζει η ντζάβα;
(Ο Ζαχαρίας κρύβεται κάτω από το τραπέζι)
ΕΜΠ: (Εχοντας πάρει χρώμα που θυμίζει έντονα τάπητα παλιού τραπεζιού μπιλιάρδου) Πω πω, πέρασε η ώρα! Πρέπει να σας αφήσω! Καλή σας ημέρα!

Όπως αναμενόταν, δεύτερη παρουσίαση δεν έγινε ποτέ. Ο Απόλυτος Ξερόλας θεωρησε ότι όλα αυτά ήταν απλά ένα κόλπο εντυπωσιασμού και πως ο κ. Παραγωγικός ήταν μεγάλος απατεώνας. Δόθηκαν σαφείς οδηγίες στο Ζαχαρία να χρησιμοποιήσει πάνω από 200 κωδικούς σφαλμάτων στο επόμενο project του καθώς και να ξεκινήσει programming in pairs. Ο Απόλυτος πάλι δεν είχε διαβάσει καλά το σχετικό βιβλίο, καθώς αντιληφθηκε ότι “programming in pairs” σημαίνει να έχεις ένα προγραμματιστή να δουλεύει ταυτόχρονα σε δύο διαφορετικούς υπολογιστές. Ο Ζαχαρίας, πλέον συνηθισμένος, απλά περιμένει να συνταξιοδοτηθεί γιατί άλλος τρόπος να γλυτώσει… δεν φαίνεται στον ορίζοντα σύντομα. 

Σχόλια (10) -