Γιατί είναι χρήσιμο να εφεύρουμε ξανά τον τροχό;

Γιατί είναι χρήσιμο να εφεύρουμε ξανά τον τροχό;

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

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

Αλλά αλίμονο. Ναι, ήταν προφανές ότι είχε συναντήσει τέτοιο κωδικό πριν. Ήξερε σε γενικές γραμμές πώς λειτουργούσαν όλα εκεί. Το μόνο που χρειαζόμαστε είναι ένα σκίτσο μιας λύσης που δείχνει την κατανόηση της έννοιας. Ωστόσο, ο κωδικός που έγραψε ο υποψήφιος στον πίνακα ήταν σκέτη ανοησία. Είχε μια πολύ αόριστη ιδέα για το τι υποσχέσεις ήταν στο JavaScript και δεν μπορούσε πραγματικά να εξηγήσει γιατί χρειάζονταν. Για έναν νεώτερο αυτό θα ήταν συγχωρεμένο, αλλά δεν του ταίριαζε πλέον η θέση του ανώτερου. Πώς θα μπορούσε αυτός ο προγραμματιστής να διορθώσει σφάλματα σε μια πολύπλοκη αλυσίδα υποσχέσεων και να εξηγήσει σε άλλους τι ακριβώς έκανε;

Οι προγραμματιστές θεωρούν τον έτοιμο κώδικα αυτονόητο

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

Και συνήθως λειτουργεί, αλλά όταν τα πράγματα γίνονται δύσκολα, η κατανόηση της μηχανικής περισσότερο από ό,τι αποδίδει.

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

return new Promise((resolve, reject) => {
  functionWithCallback((err, result) => {
   return err ? reject(err) : resolve(result);
  });
});

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

Επιστρέψτε στις ρίζες

Το 2012, όταν η κυριαρχία των πλαισίων front-end δεν είχε ακόμη εδραιωθεί, το jQuery κυβέρνησε τον κόσμο και διάβασα το βιβλίο Τα μυστικά του JavaScript Ninja, συγγραφέας του John Resig, δημιουργού του jQuery.

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

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

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

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

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

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

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

Ανακαλύψτε ξανά αυτόν τον τροχό

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

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

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο