Στα δύο προηγούμενα μέρη της σειράς μας μιλήσαμε για τα πρώτα βήματα στο επάγγελμα του προγραμματιστή και για το τι αξίζει πραγματικά να μάθεις στην αρχή της καριέρας σου.
Τώρα φτάνουμε στη στιγμή που φοβάται σχεδόν κάθε Junior.
Το πρώτο Code Review. Οι πρώτες παρατηρήσεις στον κώδικα. Οι πρώτες διορθώσεις.
Και η πρώτη σκέψη: «Έγραψα άραγε τόσο άσχημα αυτόν τον κώδικα;»
Ηρεμία.
Όλοι κάποτε το περάσαμε αυτό.
Το Code Review δεν είναι εξέταση
Αυτό ίσως είναι η μεγαλύτερη παρερμηνεία μεταξύ των αρχάριων προγραμματιστών.
Πολλοί Juniors παίρνουν τις παρατηρήσεις στον κώδικά τους πολύ προσωπικά. Εμφανίζεται άγχος. Αβεβαιότητα. Μερικές φορές και απογοήτευση.
Κι όμως ο σκοπός του Code Review δεν είναι να αποδείξει σε κάποιον ότι έκανε λάθος. Αντίθετα: είναι ένα από τα πιο σημαντικά στοιχεία της διαδικασίας δημιουργίας καλού λογισμικού.
Χάρη στο Code Review:
- μειώνουμε τον κίνδυνο λαθών,
- βελτιώνουμε την αναγνωσιμότητα του κώδικα,
- μαθαίνουμε ο ένας από τον άλλο,
- φροντίζουμε τη συνεκτικότητα ολόκληρου του έργου,
- μεταφέρουμε γνώση μεταξύ των μελών της ομάδας.
Οι καλύτερες ομάδες δεν βλέπουν το Code Review ως έλεγχο. Το βλέπουν ως καθημερινή ανταλλαγή εμπειριών.
«Έχεις 37 σχόλια»
Ακούγεται φοβερό; Στην αρχή ναι.
Το πρώτο Pull Request συχνά μοιάζει ακριβώς έτσι:
- Σχόλιο.
- Διόρθωση.
- Άλλο ένα σχόλιο.
- Άλλη διόρθωση.
Μετά από μία ώρα έχεις την εντύπωση ότι όλος ο κώδικας πρέπει να πεταχτεί. Αυτό είναι φυσιολογικό.
Να θυμάσαι μόνο ένα πράγμα. Ο senior δεν διορθώνει τον κώδικά σου για να δείξει την υπεροχή του. Το κάνει γιατί σε μερικούς μήνες θα γράφεις πολύ καλύτερο κώδικα.
Και ακριβώς αυτό έχει σημασία.
Ένας καλός Senior δεν λέει μόνο «λάθος»
Οι καλύτεροι προγραμματιστές με τους οποίους δουλέψαμε πάντα εξηγούσαν:
- γιατί κάτι αξίζει να γίνει διαφορετικά,
- ποιες θα είναι οι συνέπειες της τρέχουσας λύσης,
- ποιες εναλλακτικές υπάρχουν,
- ποια λύση θα είναι ευκολότερη στη συντήρηση σε ένα ή δύο χρόνια.
Αυτή είναι τεράστια διαφορά.
Γιατί μπορείς να πεις: «Αυτό είναι λάθος.»
Ή μπορείς να πεις: «Δουλεύει, αλλά αν σε έξι μήνες θα επεκτείνουμε αυτό το module, θα είναι πολύ πιο εύκολο να το συντηρήσουμε με αυτή τη δομή.»
Στη δεύτερη περίπτωση μαθαίνεις κάτι πολύ πιο πολύτιμο από την ίδια τη διόρθωση. Μαθαίνεις έναν τρόπο σκέψης.
Clean Code δεν σημαίνει όμορφος κώδικας
Αυτή είναι άλλη μια έννοια που συχνά παρεξηγείται.
Το Clean Code δεν σημαίνει κώδικα που φαίνεται εντυπωσιακός. Δεν έχει να κάνει με τον αριθμό των κενών γραμμών. Δεν έχει να κάνει με το μήκος μιας συνάρτησης. Ούτε καν με συγκεκριμένα patterns.
Αφορά κάτι πολύ πιο απλό - ο κώδικας πρέπει να είναι αναγνώσιμος.
Αν σε έξι μήνες ανοίξεις το δικό σου project και δεν θα θυμάσαι τι σκεφτόσουν...
...τότε πιθανότατα ο κώδικας δεν ήταν αρκετά αναγνώσιμος.
Υπάρχει μια ρήση: Γράφουμε κώδικα για ανθρώπους. Ο compiler απλώς ελέγχει τη σύνταξη.
Και υπάρχει πολλή αλήθεια σε αυτό.
Μην ερωτευτείς τον δικό σου κώδικα
Αυτό είναι ένα από τα πιο σημαντικά μαθήματα.
Ο κώδικας δεν είναι έργο τέχνης. Δεν είναι ζωγραφιά. Δεν είναι γλυπτό.
Είναι ένα εργαλείο για την επίλυση ενός συγκεκριμένου προβλήματος.
Αν κάποιος προτείνει μια καλύτερη λύση...
...αξίζει να την εξετάσεις.
Όχι επειδή κάποιος έχει μεγαλύτερο κύρος. Αλλά επειδή ίσως όντως είναι καλύτερη.
Μαθαίνουν περισσότερο οι προγραμματιστές που μπορούν να πουν: «Έχεις δίκιο. Ας το κάνουμε αλλιώς.»
«Σε μένα δουλεύει»
Εντάξει. Φτάσαμε στη διάσημη αυτή φράση. Κάθε software house έχει τη δική του εκδοχή αυτού του αστείου...
Φαντάσου την εξής κατάσταση.
Ο tester αναφέρει σφάλμα.
Ο προγραμματιστής απαντά: «Σε μένα δουλεύει.»
Ο tester ελέγχει ξανά. - Δεν δουλεύει.
Ο Project Manager κοιτάει. - Δεν δουλεύει.
Ο πελάτης επίσης ελέγχει. - Δεν δουλεύει.
Αλλά... στον συγγραφέα του κώδικα εξακολουθεί να δουλεύει.
Σου θυμίζει κάτι;
Συνήθως το πρόβλημα δεν είναι στον ίδιο τον κώδικα.
Οι αιτίες μπορεί να είναι πολλές:
- διαφορετική έκδοση δεδομένων,
- διαφορετικό περιβάλλον,
- cache,
- διαμόρφωση,
- δικαιώματα,
- πρόγραμμα περιήγησης,
- λειτουργικό σύστημα,
- περίπτωση που κανείς δεν είχε προβλέψει πριν.
Γι' αυτό ο επαγγελματίας προγραμματιστής δεν τελειώνει την ανάλυση με τη φράση: «Σε μένα δουλεύει.»
Κάνει την επόμενη ερώτηση.
Γιατί σε μένα δουλεύει και αλλού όχι;
Και τότε αρχίζει το πραγματικό debugging.
«Είναι μόνο μια μικρή αλλαγή»
Άλλη μια φράση που προκαλεί χαμόγελο στις περισσότερες software houses.
Ο πελάτης λέει: «Είναι μόνο μια μικρή διόρθωση.»
Ο προγραμματιστής ήδη ξέρει ότι θα ανοίξει ένα αρχείο που κανείς δεν έχει αγγίξει εδώ και έξι χρόνια.
Κι αυτή η «μικρή διόρθωση» μπορεί να αποδειχθεί αλλαγή σε πέντε modules, τρεις ενσωματώσεις και δύο βάσεις δεδομένων.
Γι' αυτό οι έμπειροι προγραμματιστές αντιμετωπίζουν τη λέξη «μόνο» με μεγάλη προσοχή.
Οι πιο γνωστές φράσεις του κλάδου
Κάθε επάγγελμα έχει τα ρητά του. Οι προγραμματιστές επίσης.
Μερικά από αυτά τα ξέρει σχεδόν όλος ο κόσμος:
- «Σε μένα δουλεύει.»
- «Θα πάρει μόνο πέντε λεπτά.»
- «Δεν είναι bug. Είναι feature.»
- «Μα δεν άλλαξα τίποτα.»
- «Στην παραγωγή έσκασε.»
- «Μόνο ακόμα ένα deploy.»
- «Σίγουρα είναι cache.»
- «Γρήγορη διόρθωση πριν το Σαββατοκύριακο.»
- «Πρέπει να δουλεύει.»
Και ίσως πιο επικίνδυνο από όλα: «Ας το πάμε στην παραγωγή την Παρασκευή μετά τις 16:00.»
Αν δουλεύεις στο IT...
...μάλλον μόλις χαμογέλασες.
Ο προγραμματιστής δεν δουλεύει μόνος του
Αυτό είναι ένα θέμα που συχνά παραλείπεται. Στην πραγματικότητα τα περισσότερα projects είναι ομαδική δουλειά.
Ο προγραμματιστής συνεργάζεται με:
- UX Designers,
- UI Designers,
- Project Managers,
- Testers,
- DevOps,
- Administrators,
- Αναλυτές,
- Πελάτες.
Γι' αυτό εξίσου σημαντικές με τις τεχνολογικές γνώσεις είναι:
- επικοινωνία,
- ικανότητα ακρόασης,
- μεταφορά γνώσης,
- υπευθυνότητα,
- αμοιβαίος σεβασμός.
Ο καλύτερος κώδικας δεν θα σώσει ένα project αν η ομάδα δεν ξέρει να συνεργάζεται.
Λεξικό όρων
Code Review
Διαδικασία επιθεώρησης κώδικα από άλλους προγραμματιστές πριν τη συγχώνευση/υλοποίηση. Στόχος είναι η βελτίωση της ποιότητας, η ανίχνευση σφαλμάτων και η ανταλλαγή γνώσης.
Pull Request (PR)
Πρόταση εισαγωγής αλλαγών στο έργο. Σε αυτό το στάδιο γίνεται συνήθως το Code Review.
Clean Code
Προσέγγιση στη συγγραφή κώδικα με βασικό στόχο την αναγνωσιμότητα, την απλότητα και τη συντηρησιμότητα, όχι τον αριθμό των pattern.
Debugging
Διαδικασία εντοπισμού και αποκατάστασης των αιτιών σφαλμάτων σε μια εφαρμογή.
Cache
Μηχανισμός προσωρινής αποθήκευσης δεδομένων για επιτάχυνση της εφαρμογής. Συχνά πηγή μυστηριωδών προβλημάτων κατά τη δοκιμή.
Σύνοψη
Όσο περισσότερο δουλεύουμε ως προγραμματιστές, τόσο περισσότερο φτάνουμε σε ένα συμπέρασμα. Οι καλύτεροι developers δεν είναι αυτοί που κάνουν τα λιγότερα λάθη.
Οι καλύτεροι developers μπορούν να:
- εντοπίζουν πιο γρήγορα την αιτία ενός προβλήματος,
- βγάζουν συμπεράσματα,
- μαθαίνουν από άλλους,
- δέχονται την εποικοδομητική κριτική,
- αναπτύσσουν συνεχώς το εργαστήριό τους.
Το Code Review λοιπόν δεν είναι εμπόδιο. Είναι ένα από τα πιο πολύτιμα μαθήματα που μπορείς να λάβεις στην αρχή της καριέρας σου.
Στο τελευταίο μέρος της σειράς θα συζητήσουμε για το πώς μοιάζει η διαδρομή από Junior σε Senior. Θα εξηγήσουμε γιατί ο Senior Developer δεν είναι απλώς κάποιος με δέκα χρόνια εμπειρίας, αλλά κάποιος που μπορεί να αναλάβει την ευθύνη ενός project, να σκέφτεται επιχειρηματικά και να βοηθά τους υπόλοιπους της ομάδας να εξελιχθούν.
