Πώς πήγα από το C ++ στο Python: μια εννοιολογική αλλαγή

Εισαγωγή

Οι άνθρωποι λένε ότι η κωδικοποίηση στην Python είναι τόσο εύκολη που ακόμη και ένας 6χρονος μπορεί να το κάνει. Αυτή ήταν η σκέψη που είχα στο μυαλό μου όταν άρχισα να κωδικοποιώ στην Python στη δουλειά. Ήμουν προγραμματιστής λογισμικού πλήρους απασχόλησης για 4 χρόνια εκείνη την εποχή, γράφοντας κυρίως σε C ++ σε Linux, χρησιμοποιώντας έντονα τη βιβλιοθήκη QT. Ωστόσο, έγραψα κακό κώδικα Python στην αρχή.

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

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

Το C ++ καταδύεται, ο Python κολυμπά με αναπνευστήρα

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

Κατάδυση στο C ++ και επιβίωση

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

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

Τα κύρια καθημερινά εργαλεία μου ήταν το Vim με πολλά πρόσθετα για τη σύνταξη κώδικα, το GDB για εντοπισμό σφαλμάτων και το Valgrind για την ανάλυση της χρήσης μνήμης και των σφαλμάτων μου. Συλλέξαμε με το g ++ και έγραψα τα δικά μου Makefiles . Τότε, δεν ένιωθα ότι ένα IDE θα με ωφελούσε, αλλά μάλλον θα επιβραδύνει τα πράγματα και θα με κάνει να χάσω την επαφή με τον κωδικό μου. Αναδρομικά, βασίζομαι πολύ στον μεταγλωττιστή για να βρω τα λάθη τύπου μου .

Ρηχά κολύμπι στο Python

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

Όταν άρχισα να κωδικοποιώ στο Python, έγραψα για πρώτη φορά τον κώδικα C ++ στο Python. Δούλεψε, αλλά δεν κέρδισα κανένα όφελος από τη γλώσσα. Η κωδικοποίησή μου βελτιώθηκε όταν άρχισα να γράφω με πιο «Pythonic» τρόπο και άρχισα να χρησιμοποιώ βιβλιοθήκες και πιο προηγμένες έννοιες όπως γεννήτριες, διακοσμητές και περιβάλλοντα.

Ως προγραμματιστής Python τείνω να ψάχνω πρώτα για τη βιβλιοθήκη που επιλύει το πρόβλημα. Η Python διαθέτει ένα πλούσιο οικοσύστημα βιβλιοθήκης και κοινότητα που το υποστηρίζει. Υπάρχουν βιβλιοθήκες που κάνουν σχεδόν οτιδήποτε. Εδώ είναι μερικά εύχρηστα που χρησιμοποιώ σε καθημερινή βάση: NumPy για αριθμητικούς υπολογισμούς, OpenCV για όραμα υπολογιστή, json για ανάγνωση αρχείων json , SciPyγια επιστημονικούς υπολογισμούς, sqlite3 για βάσεις δεδομένων.

Το καθημερινό μου εργαλείο είναι το PyCharm (ναι, ένα IDE) με το πρόσθετο IdeaVim . Άρχισα να το χρησιμοποιώ κυρίως λόγω του γεγονότος ότι είναι ένα ισχυρό πρόγραμμα εντοπισμού σφαλμάτων, το οποίο είναι πολύ πιο φιλικό από το προεπιλεγμένο πρόγραμμα εντοπισμού σφαλμάτων Python, pdb . Χρησιμοποιώ επίσης pip για την εγκατάσταση βιβλιοθηκών που χρειάζομαι. Δεν παρακολουθώ πλέον τη χρήση της μνήμης μου, εκτός αν πρέπει να το κάνω.

Μερικές πρακτικές συμβουλές

Εάν είστε προγραμματιστής C ++ και σκέφτεστε να αρχίσετε να κωδικοποιείτε στο Python, ακολουθούν οι συμβουλές μου για εσάς:

  • Απαλλαγείτε από παλιές συνήθειες - Σταματήστε να χρησιμοποιείτε τον μεταγλωττιστή C ++ ως πρόγραμμα εντοπισμού σφαλμάτων. Μην βελτιστοποιείτε υπερβολικά τη χρήση μνήμης. Αποφύγετε τη σύνταξη κώδικα τύπου C ++. Και με κάθε τρόπο, προσπαθήστε να μην βασίζεστε σε τύπους.
  • Αποκτήστε νέες συνήθειες - Ξεκινήστε να χρησιμοποιείτε βιβλιοθήκες. Γράψτε κώδικα Pythonic (αλλά μην το παρακάνετε). Διατηρήστε τα πράγματα ευανάγνωστα. Χρησιμοποιήστε πιο περίπλοκες έννοιες όπως γεννήτριες / διακοσμητές / περιβάλλοντα. Δοκιμάστε το PyCharm.
  • Χρησιμοποιήστε κοινές βιβλιοθήκες C ++ και Python - Ορισμένες βιβλιοθήκες C ++, όπως το OpenCV και το QT, έχουν διεπαφή Python. Είναι εύκολο να αρχίσετε να χρησιμοποιείτε την ίδια βιβλιοθήκη στο Python αντί να μαθαίνετε μια νέα βιβλιοθήκη από το μηδέν.
  • Μην ξεχάσετε την προέλευσή σας - Μερικές φορές η Python είναι πολύ αργή ή δεν είναι βέλτιστη για την εργασία. Αυτό συμβαίνει όταν ξεκινά η γνώση σας C ++. Είναι πολλοί τρόποι ( SIP , ctypes κ.λπ.) για να χρησιμοποιήσετε τον κώδικα C ++ μέσα στο Python.

Συμπέρασμα

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

Καλή τύχη!