Kako sam prešao sa C ++ na Python: konceptualna promjena

Uvod

Ljudi kažu da je kodiranje u Pythonu toliko jednostavno da to može učiniti i 6-godišnjak. To je bila misao koju sam imao na umu kad sam na poslu počeo kodirati u Pythonu. U to sam doba bio redoviti programer već četiri godine, pišući uglavnom na C ++ na Linuxu, intenzivno koristeći QT knjižnicu. Međutim, isprva sam napisao loš Python kod.

Prošle su otprilike 3 godine otkako sam izvršio tu promjenu i mislim da bi bilo dobro sažeti napredak koji sam postigao za to vrijeme. Gledajući unatrag, nisam promijenio samo svoj glavni programski jezik, već i svoje radno okruženje i način razmišljanja o kodu.

Neću ulaziti u detalje i razlike između C ++ i Pythona, jer postoje brojni resursi na mreži, već ću opisati vlastito iskustvo. Nadam se da će ovaj post biti koristan za ljude koji prolaze kroz istu tranziciju kao i ja.

C ++ roni, Python roni s maskom

C ++ se osjeća kao da zaranjate u čarobne morske tajne - prekrasno je, ali zahtijeva više učenja i vježbanja, a sveukupno, udaljenost koju prijeđete nije tako velika. Python pomalo podsjeća na ronjenje s maskom - ljepotu vidite čim zabijete glavu u vodu, ali ne idete puno dalje. Nastavite plivati ​​u plitkim vodama i lako prelazite velike udaljenosti. Iz ovog je opisa jasno da bi se svaki od ovih jezika trebao koristiti na pravom mjestu i u svoje vrijeme.

Zaroniti u C ++ i preživjeti ga

C ++ je stroži i strože vas kažnjava za vaše pogreške. Nije učinkovita sesija kodiranja ako barem jednom niste dobili iznenađujuću grešku u segmentaciji . Stoga je potrebno dublje razumijevanje računala, kompajlera i jezika. Kad uđete dublje, zaista možete vidjeti i biti impresionirani lijepim stvarima, poput procesa kompilacije i upravljanja memorijom.

Kao programeru C ++-a više mi je stalo do podešavanja sintakse i čudnih primjera. Uvijek sam znao gdje sam dodijelio sjećanje i kako sam ga oslobađao. Programi koje sam napisao bili su samostalniji jer sam više volio znati što se događa unutar mog koda. Glavna ideja bila je da je taj kod koji je netko drugi napisao manje pouzdan, skloniji pogreškama i mogao bi vam povećati upotrebu memorije.

Moji glavni svakodnevni alati bili su Vim s brojnim dodacima za pisanje koda, GDB za otklanjanje pogrešaka i Valgrind za analizu moje upotrebe memorije i pogrešaka. Kompajlirao sam s g ++ i napisao svoje vlastite datoteke . Tada nisam osjećao da će mi IDE koristiti, već bih radije usporio stvari i natjerao me da izgubim kontakt sa svojim kodom. Retrospektivno, oslanjao sam se na prevoditelj za pronalaženje mojih pogrešaka u tipu .

Plitko plivanje u Pythonu

Jedna od prvih stvari koje morate naučiti prilikom prelaska na Python je kako se otpustiti - ne znate što se događa ispod haube, gdje se memorija dodjeljuje i oslobađa, i to je u redu. Također se potiče da upotrebljavate kod koji su napisali drugi, upakiran u knjižnice, jer vam štedi vrijeme i brže kodira. To ne znači da trebate pisati kod koji je spor i oslanja se na neodržavane i nefunkcionalne knjižnice, ali fokus je definitivno drugačiji.

Kad sam počeo kodirati u Pythonu, prvo sam napisao C ++ kôd u Pythonu. Uspjelo je, ali od jezika nisam stekao nikakvu korist. Moje kodiranje poboljšalo se kad sam počeo pisati na više "pitonski" način i počeo koristiti knjižnice i naprednije koncepte poput generatora, dekoratera i konteksta.

Kao programer za Python, nastojim prvo tražiti knjižnicu koja rješava problem. Python ima bogat knjižnični ekosustav i zajednicu koja ga podržava. Postoje knjižnice koje rade gotovo sve. Evo nekoliko praktičnih koje svakodnevno koristim: NumPy za numeričke izračune, OpenCV za računalni vid, json za čitanje json datoteka, SciPyza znanstvene izračune, sqlite3 za baze podataka.

Moj svakodnevni alat je PyCharm (da, IDE) s IdeaVim dodatkom. Počeo sam ga koristiti uglavnom zbog činjenice da je to moćan program za ispravljanje pogrešaka, koji je puno ugodniji od zadanog Python programa za ispravljanje pogrešaka, pdb . Također koristim pip za instaliranje knjižnica koje su mi potrebne. Više ne nadgledam upotrebu memorije, osim ako to stvarno moram.

Neki praktični savjeti

Ako ste programer za C ++ i razmišljate o započinjanju kodiranja u Pythonu, evo vam mog savjeta:

  • Riješite se starih navika - Prestanite koristiti C ++ prevodilac kao program za ispravljanje pogrešaka. Nemojte pretjerano optimizirati upotrebu memorije. Izbjegavajte pisanje koda sličnog C ++. I nikako se nemojte oslanjati na vrste.
  • Steknite nove navike - počnite koristiti knjižnice. Napišite Pythonic kod (ali nemojte pretjerivati). Neka stvari budu čitljive. Koristite složenije koncepte poput generatora / dekoratera / konteksta. Isprobajte PyCharm.
  • Koristite zajedničke knjižnice C ++ i Python - Neke knjižnice C ++, poput OpenCV-a i QT-a, imaju Python sučelje. Lako je početi koristiti istu biblioteku u Pythonu, a ne učiti novu knjižnicu od nule.
  • Ne zaboravite svoje podrijetlo - Ponekad je Python jednostavno prespor ili nije optimalan za zadatak. Tada započinje vaše znanje o C ++-u. Postoji mnogo načina ( SIP , ctypes itd.) Za upotrebu C ++ koda unutar Pythona.

Poanta

Bez obzira na to što drugi ljudi kažu, prelazak na drugi programski jezik, posebno na jezik koji je bitno drugačiji od onog na koji ste navikli, nije lak. Odvojite vrijeme za učenje, kopanje i otkrivanje. Ali što je najvažnije, shvatite da se ne smije mijenjati samo jezik, već i vaš stil kodiranja i metodologija rada.

Sretno!