Το ενδιαφέρον μου
είναι περισσότερο πρακτικό και λιγότερο ακαδημαϊκό. Θέλω να έχω κάποιο τρόπο να
έχω μερικούς δείκτες ώστε να μπορώ να συγκρίνω το ίδιο project σε δύο
διαφορετικές φάσεις του και να πάρω κάποια χρήσιμα νούμερα.
Προφανώς μπορώ να
πάρω με κάποια tools κάποια νούμερα στη φάση Α και μετά τα ίδια νούμερα στη
φάση Β και να τα συγκρίνω "με το μάτι", αλλά ψάχνω κάτι λίγο πιο
χρήσιμο. Δεδομένου ότι η οποιαδήποτε αλλαγή σε ένα code base δημιουργεί νέα
bugs, κλπ, πιστεύω ότι μπορούν να βγούνε μερικά και πιο ουσιαστικά νούμερα.
Για να εξηγήσω το
πρακτικό μου ενδιαφέρον πρέπει να καταλάβεις πώς και με ποιούς δουλεύω, όταν η
εταιρία μου παρέχει υπηρεσίες software consulting.
Οι πελάτες μου
λοιπόν είναι συνήθως εταιρίες hardware οι οποίες ήδη έχουν αρκετό software που
συνοδεύει τα προϊόντα τους. Αλλά ΔΕΝ είναι software houses και πολλές φορές δεν
έχουν κανέναν dedicated software developer in-house, απλά οι hardwareάδες τους ξέρουν αρκετά καλά από
κώδικα και δουλεύουν με software contractors.
Για να πάρω
δουλειά από αυτούς σημαίνει ότι:
- 1.
Κάποιο
νέο feature ή application είναι αρκετά πολύπλοκο και εμπλέκει πιθανώς και τους
drivers τους, και είτε θεωρούν ότι δεν μπορούν να το κάνουν μόνοι τους, είτε θεωρούν
ότι τους συμφέρει να το αναθέσουν σε μένα, γιατί θα το κάνω πιο γρήγορα , πιο
οικονομικά και πιο σωστά.
- 2.
Κάποιο
υπάρχον software τους έχει σοβαρά προβλήματα stability/reliability και
χρειάζεται εκτενές ρεκτιφιέ.
- 3.
Κάποιο
υπάρχον software τους έχει φτάσει στα όρια της αντοχής του και θέλει rewrite
από το μηδέν.
Και αυτό μας
φέρνει στην ανθρώπινη πλευρά των business.
Πας να ασχοληθείς
με μια περίπτωση #2, δηλαδή το ξέρουν ότι έχουν προβλήματα και σε πληρώνουν να
τους βοηθήσεις, παρόλ'αυτά σε πονάει όταν σου σβήνουνε τον κώδικα... με
αποτέλεσμα οι ίδιοι άνθρωποι να αντιστέκονται σθεναρά στο ότι διόρθωσες το ένα
και το άλλο και να υποστηρίζουν ότι ο αρχικός κώδικας ήταν "καλύτερος".
Οι δυνατότητες
για debating είναι άπειρες. Θα μπορούσα να πω ότι οι διάλογοι είναι απείρου
κάλλους, αλλά δεν μιλάω με πιθήκους πλέον, μιλάω με σοβαρούς και πανέξυπνους ανθρώπους
που έχουν 15-25 χρόνια engineering στην πλάτη, είναι μέτοχοι σε εταιρίες που
βγάζουν αρκετά λεφτά κάθε χρόνο, κλπ.
Πάρε για παράδειγμα:
Customer: No I disagree, the original code was better. Why
you had to change the original code? Show me one mistake, ONE mistake in the
original code!
Me: File SuchAndSuch.cpp line(123), blah blah, this is a
bug.
Customer: Yes you are right, but this is minor. Show me
another one.
Me: File SuchAndSuch.cpp line(234), blah blah, this is a bug
because of poor coding.
Customer: Yes you are right, but this is minor too. Show me
another one.
Me: File SuchAndSuch.cpp line(345), blah blah, this is a bug
because the program was displaying the mouse location even when the mouse was
outside the image.
Customer: Yes you are right, but it doesn't matter, it doesn't
bother anyone. Show me another one.
Me: File SuchAndSuch.cpp line(456), blah blah, this will
deadlock the threads and freeze the video display.
Customer: Yes you are right, but all the others are minor.
Τι βλέπεις στον
παραπάνω διάλογο; Ο άνθρωπος αλλάζει τους κανόνες της συζήτησης όποτε και όπως
τον βολεύει, απλά γιατί τον πονάει που του έσβησα τον κώδικα (παρότι με
πληρώνει ακριβώς για αυτό), και επειδή θεωρεί ότι η άποψή μου είναι υποκειμενική
ενώ η δική του είναι λιγότερο υποκειμενική.
Εγώ λοιπόν σε
αυτό το σημείο θα ήθελα να έχω μερικά μη υποκειμενικά στατιστικά του ΠΡΙΝ vs
ΜΕΤΑ ώστε να μην εμπλακεί η συζήτηση σε συναισθήματα για τον κώδικα.
Και έχω δει τα
απλά στατιστικά του WinMerge να κάνουν θαύματα, οπότε ψάχνω για κάτι ακόμα
καλύτερο. Κοίτα το εξής σενάριο (επίσης πραγματικό case) για να καταλάβεις τι εννοώ θαύματα:
Ο πελάτης έκανε μερικά
"extensive changes" (according to his own words) στον κώδικά μου επειδή δεν του "πολυάρεσαν"
μερικά πράγματα, αλλά η μία αλλαγή οδήγησε στην άλλη και τελικά σάρωσε ένα
σκασμό κώδικα.
(Friday) Customer: OK, I am done with the code, it is
finished. I didn't have time to test it fully and I also have some bugs that I
didn't know how to solve myself, I have put comments in the code, so please
test the application yourself and also fix those bugs. We have to release on
Wednesday.
Εννοείται εδώ βαρέσαν όχι απλώς καμπανάκια, μέχρι
τη Notre Dame φτάσαμε...
(Friday) Δοκιμάζω την εφαρμογή σαν απλός χρήστης χωρίς
καν να κοιτάξω τον κώδικα. Βρίσκω 1 BSOD, 2 κρασαρίσματα της εφαρμογής, 1 πάγωμα του video, 1 corrupted video,
λανθασμένο save image to disk, και άλλα 10 περίπου καραμπινάτα bug. Του στέλνω τη λίστα.
(Saturday) Customer: Why did you spend all day testing and
send me this list? Why didn't you fix the bugs? I am under immense pressure and
you don't want to help me!
Μετά από 10 ώρες
στο τηλέφωνο όλο το ΣΚ, και δύο rollbacks από πλευράς τους, άρχισε να συμφωνεί
ότι εντάξει ήταν project management error από την πλευρά τους να κάνουν τόσες
αλλαγές 20 μέρες πριν το release αλλά επιμένει ότι μπορώ να βοηθήσω και
δεν θέλω (είμαστε 3 μέρες πριν το
release…).
Σε αυτό το σημείο
του πέταξα τα στατιστικά του WinMerge και είδε ότι σε σχέση με τον τελευταίο
known-good κώδικα που τους είχα δώσει, αυτοί είχαν πειράξει το 80% των αρχείων
και επιπλέον προσθέσει άλλα 16 αρχεία κώδικα.
Και τον ρωτάω
"Το θεωρείς παράλογο με 80% πειραγμένο κώδικα και 16 νέα αρχεία, τις
τελευταίες 20 μέρες, και 3 μέρες πριν το release, ότι δεν θέλω να εμπλακώ βαθιά
στην υπόθεση;"
Και επειδή ακριβώς
αυτά τα νούμερα είναι αντικειμενικά, το πρόβλημά μου λύθηκε. Παραδέχτηκαν ότι
έχω δίκιο και ηρεμήσαν.
Εγώ φυσικά σε όλη
την διάρκεια της κρίσης είχα προτείνει να κάνουμε rollback στον τελευταίο
κώδικα που είχα στείλει, που ήταν 100% stable, να βγάλουμε stable release και μετά
να κάνουμε ό,τι αλλαγές θέλουν, αλλά να τις κάνω εγώ.
Και φυσικά ο
ανθρώπινος παράγοντας δούλεψε παλι. Επιμείνανε στο όχι rollback για αυτό το
release, αλλά αποφασίσανε να σπρώξουν μια βδομάδα το release date, να κάνουμε
ότι μπορούμε να περισώσουμε την κατάσταση και ΜΕΤΑ θα κάνουμε rollback
στον κώδικά μου και θα ξανακάνουμε τις αλλαγές.
Μόνο και μόνο η
σχιζοφρενικότητα αυτής της απόφασης δείχνει πόσο πολύ τα συναισθήματα
επηρεάζουν σοβαρούς ανθρώπους με τόσα χρόνια εμπειρία.
Τώρα νομίζω καταλαβαίνεις
γιατί πιστεύω ότι θα ήταν χρήσιμο να έχω ένα τέτοιο εργαλείο. Θα μπορούσε να
θέσει την οποιαδήποτε συζήτηση σε βάση αντικειμενική, όταν αυτή έχει
εκτροχιαστεί.
Δεν θέλω όμως
πολύπλοκα και σοφιστικέ εργαλεία, με 158 διαφορετικούς δείκτες και 49
υποστηριζόμενες γλώσσες προγραμματισμού, που να θέλει βάσεις και να περιμένει
να σχεδιάσω δικά μου queries για να βγάλω συμπεράσματα, κλπ. Θέλω κάτι KISS.
Θα μπορούσαμε να
το κάνουμε διπλωματική/PhD
στον Σπινέλλη! LOL
Δημήτρης
The fact that the program works is irrelevant.