Συμβουλές για τον τρόπο χειρισμού κώδικα παλαιού τύπου

Το εικονικό APPLE MACINTOSH 128Κ

Όταν ο όρος "κληρονομιά κώδικα" έρχεται, είναι συνήθως είπε ή έλαβε με μια χροιά της περιφρόνησης. Μια προκαταρκτική αναζήτηση Google για "μνήματα κωδίκων κληρονομιών" φέρνει εκατοντάδες και εκατοντάδες μακροεντολές εικόνων ανθρώπων που σκίζουν τα μαλλιά τους, αναζητώντας φρεσκάδα ή εξαιρετικά απογοητευμένοι.

Όταν άρχισα να δουλεύω ως προγραμματιστής λογισμικού, σε μια εταιρεία που βασίζεται σε προϊόντα, πριν από 5 μήνες, δεν είχα ιδέα τι είναι ο κληροδοτημένος κώδικας ή τι συνεργαζόταν με αυτόν.

Κατά τη διάρκεια του τέταρτου μήνα μου, μου ζητήθηκε να προσθέσω ένα μετασχηματιστή φίλτρων σε μια εφαρμογή που χτίστηκε από έναν από τους συνεργάτες μου πριν από δύο ή τρία χρόνια. Φαινόταν αρκετά εύκολο. Είχα περάσει τα περισσότερα από τα τελευταία τρία χρόνια δουλεύοντας σε μια απίστευτα περίπλοκη εφαρμογή που περιλαμβάνει την τυπική στοίβα: TypeScript / React / Angular / Dotnet. Είχα λύσει ήδη πολλά μοναδικά προβλήματα και αισθάνομαι βέβαιος για την ικανότητά μου κωδικοποίησης αρκετά για να κάνω μια απλή μέθοδο για να περάσω τις παραμέτρους του ερωτήματος στο backend.

Όπως ίσως έχετε μαντέψει, δεν ήταν τόσο απλό. Μα γιατί?

Ποιος κωδικός κληρονομιών είναι και γιατί μπορεί να είναι δύσκολο να αντιμετωπιστεί

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

Στην περίπτωσή μου, η εφαρμογή χρησιμοποίησε το πρότυπο κειμένου XAML και T4 αντί για τον βασικό κώδικα C # και δεν ήταν τόσο έντονα πληκτρολογημένο όσο ήμουν συνηθισμένος. Αυτό με έκανε κάπως πιο δύσκολο να καταλάβω τη δομή των δεδομένων. Κανένας τύπος δεν σήμαινε ότι έτρεχα σε TypeErrors κατά το χρόνο εκτέλεσης πολύ πιο συχνά, το οποίο μπορεί να είναι δύσκολο να διορθωθεί όταν γράφετε ένα μεγάλο χαρακτηριστικό. Επιπλέον, η εφαρμογή χρησιμοποίησε μια πολύ παλαιότερη έκδοση του dotnet, η οποία χρειάστηκε να συμφωνηθεί με μια συμβατή έκδοση της βιβλιοθήκης στοιχείων.

Πριν μπορώ να μπει στο νιτρινο-gritty για το πώς να χειριστεί κωδικό κληρονομιά με μια αίσθηση της poise και ορθολογικότητας, θέλω να προσθέσω μια αποκήρυξη ότι ο κωδικός κληρονομιά δεν είναι όλα κακά και εργάζονται σε ένα παλαιό έργο δεν πρέπει να είναι τρομερό. Αντίθετα, η δουλειά στον κώδικα κληρονομιάς με διδάσκει να είμαι ευέλικτος, ασθενής και πάνω απ 'όλα, η εμπειρία μου επέτρεψε να λύσω τα προβλήματα με μια νέα προοπτική σε ένα νέο πλαίσιο.

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

Πώς να αντιμετωπίσετε τον κωδικό παλαιού τύπου σε τεχνικό επίπεδο

Διαβάστε την τεκμηρίωση και τα σχόλια κώδικα, όταν είναι δυνατόν

Σε έναν τέλειο κόσμο, κάθε κώδικας έχει ένα ισχυρό README που περιέχει συνοπτικές εξηγήσεις για το πώς λειτουργεί το έργο, κωδικοποιεί σχόλια που εξηγούν την ακριβή λογική του αρχικού συγγραφέα και όλη η εφαρμογή έχει νόημα. Ωστόσο, σπάνια συμβαίνει αυτό. Πολλά READMEs δεν ενημερώνονται καθώς τα έργα αναπτύσσονται, οι άνθρωποι ξεχνούν να γράψουν σχόλια, υποθέτουν ότι η λογική τους είναι προφανής σε έναν νέο προγραμματιστή ή απλά δεν έχουν χρόνο για να φροντίσουν αυτά τα πράγματα.

Κοιτάξτε τον κώδικα ως σύνολο

Αν χάσετε και δεν ξέρετε από πού να ξεκινήσετε, αναρωτηθείτε:

  • Ποιος είναι ο σκοπός της εφαρμογής;
  • Πώς διαβιβάζεται η ροή δεδομένων μέσω της εφαρμογής;
  • Πώς ταιριάζει η λειτουργία σας στην εφαρμογή;

Όταν μπορείτε να πάρετε μια αίσθηση της μεγάλης εικόνας, είναι ευκολότερο να καταλάβετε τον καλύτερο τρόπο αντιμετώπισης του προβλήματος. Ίσως πρέπει να δημιουργήσετε ένα νέο αρχείο και να δημιουργήσετε ένα νέο ελεγκτή. Ίσως πρέπει να γράψετε μια λειτουργία χρησιμότητας και να την δοκιμάσετε. Όποια και αν είναι η περίπτωση, η κατανόηση του ευρύτερου πλαισίου του προβλήματός σας είναι ένα καλό πρώτο βήμα για τη δημιουργία μιας λύσης.

Δοκιμάστε την εφαρμογή χειροκίνητα και με δοκιμές μονάδας όποτε είναι δυνατόν

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

Ο καλύτερος τρόπος για να αποφύγετε μακροχρόνιες δυσκολίες είναι να δοκιμάσετε λεπτομερώς την εφαρμογή σας τόσο με δοκιμές μονάδων όσο και με χειροκίνητες δοκιμές. Έχοντας αυτές τις δοκιμές στη θέση τους και γνωρίζοντας ακριβώς τι είδους κάλυψη θα βγείτε από αυτές, θα σας εξοικονομήσει και μελλοντικούς προγραμματιστές πολύ χρόνο. Επίσης, οι αυστηρές δοκιμές καθιστούν την εφαρμογή πιο κλιμακωτή και σας δίνουν μια μικρή δόση ντοπαμίνης κάθε φορά που οι δοκιμές σας είναι καθαρά. Δυστυχώς, υπάρχουν περιορισμένες περιπτώσεις δοκιμαστικής μονάδας στο σενάριό μου

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

Ζητήσετε βοήθεια

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

Ένας καλός τρόπος για να κάνετε αποτελεσματική χρήση του χρόνου σας (και του δικού σας) είναι να διατυπώσετε ενημερωμένες ερωτήσεις. Δοκιμάστε να επιστρέψετε στην εξέταση του κωδικού βάσης ως συνόλου και να καταλάβετε τα κενά στην κατανόησή σας. Όχι μόνο θα τους βοηθήσει να αποκτήσουν μια καλύτερη αίσθηση του προβλήματός σας, αλλά δείχνει ότι πήρατε την πρωτοβουλία να προσπαθήσετε πρώτα να λύσετε το πρόβλημα.

Γνωρίζετε πότε να μειώσετε τις απώλειές σας

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

Τούτου λεχθέντος, υπάρχουν μειονεκτήματα για να προχωρήσουμε με αυτόν τον τρόπο:

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

Συνολικά, χρησιμοποιήστε την καλύτερη κρίση σας. Υπάρχουν πλεονεκτήματα και μειονεκτήματα για κάθε επιλογή και εξαρτάται από την κατάσταση και τον προϋπολογισμό του έργου.

Πώς να χειριστείτε τον κωδικό κληρονομιάς σε ψυχολογικό επίπεδο

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

Να είσαι ταπεινός και καλός

Αυτό είναι κάτι που θα παραδεχτώ ότι πρέπει να εξασκήσω περισσότερο. Όταν μου ανατέθηκε για πρώτη φορά το έργο του φίλτρου, ήμουν αρκετά φωνητικός για το πόσο janky και unappealing κώδικα ήταν να ασχοληθεί με ενώ ο αρχικός συγγραφέας του κώδικα ήταν κάθεται 15 πόδια μακριά από μένα. Σκέφτηκα τα σχόλιά μου να είναι ένα αστείο, αλλά από την οπίσθια όψη, αναγνωρίζω ότι ήμουν αλαζονική και κακή και ότι έπρεπε να είμαι πιο ενσυναίσθητος.

Υπάρχουν πολλοί παράγοντες που μπορούν να οδηγήσουν σε κώδικα κληρονομιάς που θα πρέπει να ληφθεί υπόψη πριν αρχίσετε να επικρίνετε τον συντάκτη ή να υποθέσετε τα χειρότερα γι 'αυτά (Αυτό είναι χαλαρά συνδεδεμένο με το βασικό σφάλμα απόδοσης!).

Ο αρχικός συγγραφέας ίσως είχε τους λόγους για τους οποίους γράφει τον κώδικα με τον τρόπο που το έκαναν.

Οι χρονικοί περιορισμοί και οι περιορισμοί της τεχνολογίας μπορούν να προκαλέσουν σε ένα άτομο να γράψει κώδικα που λειτουργεί αλλά δεν έχει απαραιτήτως την καλύτερη σύμβαση. Εάν παρουσιάζετε τον εαυτό σας σε μια κατάσταση που δεν έχει αρκετό χρόνο, τα ξεπερασμένα εργαλεία και μια λίστη todo για ένα μίλι μακριά, πιθανότατα δεν θα γράψετε τον καλύτερο κώδικα!

Οι συμβάσεις αλλάζουν.

Σε παλαιότερα έργα, η σύμβαση για τον κώδικα χρησιμοποιεί μεμονωμένα εισαγωγικά για να δηλώσει συμβολοσειρές και δύο χώροι ήταν ίσοι με μία καρτέλα. Είχαμε πολλαπλές μικρές κλάσεις ένθετες μέσα σε ένα μόνο αρχείο. Στην τρέχουσα σύμβασή μας, χρησιμοποιούμε διπλά εισαγωγικά και τέσσερα κενά, και κάθε τάξη, ανεξάρτητα από το πόσο μικρός, ζει στο δικό της αρχείο .csfile στον κατάλογο Μοντέλα. Και σε αρκετά χρόνια, είμαι σίγουρος ότι θα αλλάξει και εγώ.

Όλος ο κώδικας τελικά γίνεται κληροδοτημένος

Αυτό συνδέεται ξανά στο προηγούμενο σημείο: ο κωδικός σας θα είναι τελικά κληροδοτημένος. Καθώς ανεβαίνετε τη σκάλα της αρχαιότητας, οι νέοι προγραμματιστές θα προσληφθούν και θα πρέπει να διατηρήσουν τον παλαιό κωδικό σας. Μπορεί να γράψετε καθαρό, άψογο, DRY κώδικα, αλλά μόλις αλλάξουν οι συμβάσεις ή αλλάξουν οι τάσεις, αυτοί οι νέοι προγραμματιστές μπορούν να δουν τον κώδικά σας με τον ίδιο τρόπο που βλέπετε τον κώδικα παλαιότερων άλλων.

Να είστε υπερήφανοι για τις μικρές επιτυχίες

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

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

Συμπερασματικά

Χρησιμοποιήστε αυτή τη φορά για να ενισχύσετε τη δική σας γραφή κώδικα

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

Ανάπτυξη εφαρμογών για τον χρήστη και τον μελλοντικό προγραμματιστή

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

Θυμηθείτε ότι ο κωδικός σας θα είναι κληρονομιά κάποια μέρα πάρα πολύ

Το έχω ήδη αναφέρει μερικές φορές, αλλά είναι σημαντικό να επαναλάβετε ότι ο κωδικός σας θα είναι και κληρονομιά, ανεξάρτητα από το πόσο ξηρό και παρθένο είναι ο κώδικας και η λογική σας.

Η πιο σημαντική διοργάνωση είναι να είναι ευέλικτη, ταπεινή και ότι μπορείτε να μάθετε σίγουρα νέα κόλπα από τον παλιό κώδικα.