Προγραμματισμός

Μάθηση και βελτίωση των δεξιοτήτων εντοπισμού σφαλμάτων σας

Οι προγραμματιστές ξοδεύουν ένα υψηλό ποσοστό του χρόνου εντοπισμού σφαλμάτων αντί να γράφουν κώδικα. Πιθανότατα κάνατε κάποια εκπαίδευση στην εκμάθηση μιας γλώσσας ή ενός πλαισίου - αλλά πώς μάθατε να διορθώσετε τα ελαττώματα στο λογισμικό σας;

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

Ναι. Σωστά.

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

Τώρα, υπάρχουν πολλοί τρόποι με τους οποίους οι προγραμματιστές μπορούν να μάθουν νέες δεξιότητες λογισμικού, είτε διαβάζουν ένα βιβλίο, παρακολουθούν ένα τεχνολογικό συνέδριο είτε επισκέπτονται ιστότοπους όπως το JavaWorld.com. (Είμαι μάλλον χαρούμενος που κάνετε το τελευταίο.) Ωστόσο, αυτά συνήθως επικεντρώνονται σε εργαλεία, όπως γλώσσες ή πλαίσια και όχι σε μετα-τεχνικές, όπως "Πώς να βρείτε αυτό το σφάλμα σε δύο ώρες αντί για δύο ημέρες." Οι γλώσσες μπορεί να έρθουν και να φύγουν, όπως και οι IDE εντοπιστές σφαλμάτων, αλλά η ικανότητα να διακρίνεις κάτω από ποιον βράχο κρύβει το σφάλμα σου είναι αυτή που θα μείνει μαζί σου για πάντα.

Ένα μεγάλο μέρος της δεξιότητας της μάθησης για εντοπισμό σφαλμάτων είναι, φυσικά, εμπειρία. Αυτό μπορεί να είναι η δική σας εμπειρία ή η ευκαιρία να γίνετε Ακρίδα στο Πόδι του Α Master Master Programmer. Υποψιάζομαι επίσης ότι ορισμένοι άνθρωποι έχουν έμφυτο ταλέντο για την αντιμετώπιση προβλημάτων (εξίσου συναφείς με την επιδιόρθωση ενός σπασμένου αυτοκινήτου ως μια εφαρμογή κακής συμπεριφοράς), και εκείνοι από εμάς χωρίς αυτό μπορούν μόνο να ζηλέψουν.

Ωστόσο, μερικοί από αυτό μπορεί να μάθει. Για παράδειγμα, ένας κύριος προγραμματιστής της γνωριμίας μου είχε ένα αξίωμα: Εάν ψάχνατε ένα σφάλμα για (σχετικά) μεγάλο χρονικό διάστημα και δεν μπορείτε να το βρείτε, είπε, "Ψάχνετε σε λάθος μέρος." Προφανώς ακούγεται, αλλά σίγουρα αληθινό ... και πόσο συχνά σπαταλάτε χρόνο κοιτάζοντας τη μονάδα XYZ όταν το πρόβλημα ήταν κάπου αλλού εντελώς;

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

  1. Να είστε πειθαρχημένοι. Ο εντοπισμός σφαλμάτων είναι μια διαδικασία, είπε ένας προγραμματιστής, όχι μια σειρά τυχαίων συμβάντων. Μην τροποποιείτε τυχαία τα κουμπιά. ακολουθήστε τη διαδικασία εκτέλεσης του κώδικα. Ακριβώς όπως να φτιάχνεις χλοοκοπτικό, είπε. Το μέρος Α λαμβάνει την είσοδο που χρειάζεται; Τι γίνεται με την έξοδο; Εάν είναι εντάξει, προχωρήστε.
  2. Για να βελτιώσετε τις δεξιότητές σας, εντοπίστε τον κώδικα άλλων ατόμων και όχι τον δικό σας. Θα είναι ευκολότερο να δείτε τα ελαττώματα στις παραδοχές του άλλου ατόμου από ότι είναι να δείτε τα δικά σας. Μπορείτε να το κάνετε αυτό ως μέρος μιας επισκόπησης κώδικα μεταξύ ομότιμων και εντοπισμού σφαλμάτων μεταξύ ομότιμων. Θα αναπτύξετε την ικανότητα αναγνώρισης των κοινών αιτίων ελαττωμάτων πιο γρήγορα, υποσχέθηκε ένας προγραμματιστής και θα σας διδάξει να αναγνωρίσετε (και να εγκαταλείψετε) τις δικές σας κακές πρακτικές ανάπτυξης.
  3. Προσποιηθείτε ότι είστε ο μεταγλωττιστής. Βρείτε και διορθώστε όσα περισσότερα λάθη μπορείτε πριν πατήσετε το κουμπί Μεταγλώττισης. Ενώ τα περισσότερα σύγχρονα IDE περιλαμβάνουν ενσωματωμένους εντοπιστές εντοπισμού σφαλμάτων (όπως το Intellisense του Visual Studio), θα μάθετε λιγότερα από τον αυτοματισμό τους από ότι θα εξετάσετε συνειδητά τη διαδικασία. (Με τον ίδιο τρόπο δεν θα μάθετε ποτέ να γράφετε σωστά, βασισμένος σε έναν ορθογραφικό έλεγχο για να κάνετε όλη τη δουλειά.)
  4. Μάθετε να διορθώνετε σφάλματα όσο πιο νωρίς στη διαδικασία ανάπτυξης μπορείτε. Αυτό μπορεί να σημαίνει κάτι τυποποιημένο, όπως δοκιμαστική ανάπτυξη. Αυτό σημαίνει επίσης ότι αφιερώνετε χρόνο για να κάνετε εντοπισμό σφαλμάτων στο σχέδιό σας αντί να κάνετε βαρέα στην κωδικοποίηση.
  5. Ο εντοπισμός σφαλμάτων είναι ευκολότερος όταν μπορείτε να κρατήσετε ολόκληρο το σύστημα στο μυαλό σας. Μην κάνετε το λάθος να εστιάσετε σε ένα μόνο μέρος μιας εφαρμογής. Δώστε προσοχή στις σχέσεις μεταξύ των ενοτήτων. Διαβάστε τον κώδικα σε πολλά επίπεδα αφαίρεσης, συμβουλεύει ένας προγραμματιστής. "Η εύρεση του σφάλματος είναι το πιο δύσκολο μέρος και χρειάζεται σαφής κατανόηση του τι κάνουν πολλά κομμάτια του κώδικα", είπε.
  6. Μέρος της ίδιας συμβουλής, νομίζω, είναι η πρόταση κάποιου άλλου: αποκτήστε μια καλή κατανόηση του συστήματος ένα επίπεδο κάτω από αυτό που εργάζεστε. "Αν κάνετε εντοπισμό σφαλμάτων σε ένα πρόγραμμα C επιπέδου συστήματος, βοηθά να μάθετε κάποια συναρμολόγηση και κάτι για το λειτουργικό σύστημα", εξήγησε ένας επικεφαλής μηχανικός λογισμικού συστήματος. "Εάν κάνετε εντοπισμό σφαλμάτων σε μια εφαρμογή J2EE, βοηθάει να μάθετε κάτι για τα νήματα Java, το RMI και το GC." Σε πολλές περιπτώσεις, επεσήμανε, τα μηνύματα σφάλματος προέρχονται από αυτό το επίπεδο-κάτω. "Εάν μπορείτε να καταλάβετε τι σημαίνει αυτό, θα σας βοηθήσει να καταλάβετε τι συμβαίνει στο επίπεδο της αφαίρεσής σας", εξήγησε.

Μερικοί προγραμματιστές πρότειναν επίσης επιπλέον πόρους. Μεταξύ αυτών είναι το βιβλίο του David Agan, το Debugging, το οποίο υπόσχεται εννέα απαραίτητους κανόνες και γιατί τα προγράμματα αποτυγχάνουν: Ένας οδηγός για το συστηματικό εντοπισμό σφαλμάτων, που πρόκειται να κυκλοφορήσει σε μια δεύτερη έκδοση. Ο προγραμματιστής που πρότεινε τον τελευταίο λέει ότι διδάσκει μια συστηματική προσέγγιση για τον εντοπισμό σφαλμάτων με πολλά πρακτικά παραδείγματα. Ένας άλλος πρότεινε ένα διαδικτυακό δοκίμιο, Δέκα δεξιότητες εξαιρετικά αποτελεσματικών ελεγκτών λογισμικού.

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

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