Hvordan jeg gikk fra C ++ til Python: en konseptuell endring

Introduksjon

Folk sier at koding i Python er så lett at selv en 6-åring kan gjøre det. Dette var tanken jeg hadde i tankene da jeg begynte å kode i Python på jobben. Jeg hadde vært programvareutvikler på heltid i 4 år på den tiden, og skrev hovedsakelig i C ++ på Linux, og brukte mye QT-biblioteket. Imidlertid skrev jeg først dårlig Python-kode.

Det har gått rundt 3 år siden jeg gjorde den bryteren, og jeg synes det er et godt poeng å oppsummere fremgangen jeg har gjort i løpet av denne tiden. Når jeg ser tilbake, endret jeg ikke bare hovedprogrammeringsspråket mitt, men endret også arbeidsmiljøet og måten jeg tenker på kode på.

Jeg vil ikke gå inn på detaljene og forskjellene mellom C ++ og Python, ettersom det er mange ressurser på nettet, men vil snarere beskrive min egen erfaring. Jeg håper at dette innlegget vil være nyttig for folk som går gjennom den samme overgangen som jeg gjorde.

C ++ dykker, Python snorkler

C ++ føles som å dykke ned i de magiske mysteriene til havet - det er vakkert, men krever mer læring og øvelse, og generelt er avstanden du tar, ikke så stor. Python er litt som snorkling - du ser skjønnheten så snart du stikker hodet i vannet, men du går ikke mye lenger ned. Du fortsetter å svømme på grunt vann, og kan lett ta en lang avstand. Fra denne beskrivelsen er det klart at hvert av disse språkene skal brukes på riktig sted og tidspunkt.

Dykking i C ++ og overlevelse

C ++ er strengere og straffer deg hardere for feilene dine. Det er ikke en effektiv kodingsøkt hvis du ikke har fått en overraskende segmenteringsfeil minst en gang. Derfor krever det en dypere forståelse av datamaskinen, kompilatoren og språket. Når du går dypere, kan du virkelig se og bli imponert over vakre ting, som kompileringsprosessen og minnehåndtering.

Som C ++ -programmer brydde jeg meg mer om syntaksjusteringer og rare eksempler. Jeg visste alltid hvor jeg tildelte minne og hvordan jeg ga ut det. Programmene jeg skrev var mer frittstående da jeg foretrakk å vite hva som skjedde inne i koden min. Hovedideen var at koden som noen andre skrev var mindre pålitelig, mer utsatt for feil og kan sprenge minnebruk.

Mine viktigste hverdagsverktøy var Vim med mange plugins for å skrive kode, GDB for feilsøking og Valgrind for å analysere minnebruk og feil. Jeg kompilerte med g ++ og skrev mine egne Makefiles . Den gang følte jeg ikke at en IDE ville være til fordel for meg, men ville heller bremse ting og få meg til å miste kontakten med koden min. I ettertid stolte jeg sterkt på kompilatoren for å finne typefeilene mine .

Grunt svømming i Python

En av de første tingene du trenger å lære når du bytter til Python, er hvordan du skal gi slipp - du vet ikke hva som skjer under panseret, hvor minne tildeles og frigjøres, og det er OK. Du oppfordres også til å bruke kode som ble skrevet av andre, pakket inn i biblioteker, da det sparer tid og hjelper deg med å kode raskere. Det betyr ikke at du trenger å skrive kode som er langsom og avhengig av ikke-vedlikeholdte og ikke-funksjonelle biblioteker, men fokuset er definitivt annerledes.

Da jeg begynte å kode i Python, skrev jeg først C ++ - kode i Python. Det fungerte, men jeg fikk ikke noe utbytte av språket. Kodingen min ble bedre da jeg begynte å skrive på en mer “Pythonic” måte og begynte å bruke biblioteker og mer avanserte konsepter som generatorer, dekoratører og sammenhenger.

Som Python-utvikler pleier jeg først å lete etter biblioteket som løser problemet. Python har et rikt biblioteksøkosystem og samfunn som støtter det. Det er biblioteker for å gjøre praktisk talt hva som helst. Her er noen nyttige som jeg bruker til daglig: NumPy for numeriske beregninger, OpenCV for datasyn, json for å lese json-filer, SciPyfor vitenskapelige beregninger, sqlite3 for databaser.

Mitt daglige verktøy er PyCharm (ja, en IDE) med IdeaVim- plugin. Jeg begynte å bruke den hovedsakelig på grunn av det faktum at det er en kraftig feilsøking, som er mye vennligere enn standard Python-feilsøkingsprogrammet, pdb . Jeg bruker også pip for å installere biblioteker som jeg trenger. Jeg overvåker ikke minnebruk lenger, med mindre jeg virkelig må.

Noen praktiske tips

Hvis du er en C ++ - utvikler, og du vurderer å begynne å kode i Python, er her mitt råd for deg:

  • Bli kvitt gamle vaner - Slutt å bruke C ++ kompilatoren som feilsøking. Ikke overoptimaliser minnebruk. Unngå å skrive C ++ - lignende kode. Og prøv for all del ikke å stole på typer.
  • Få nye vaner - Begynn å bruke biblioteker. Skriv pythonisk kode (men ikke overdriv). Hold ting lesbare. Bruk mer komplekse begreper som generatorer / dekoratører / sammenhenger. Prøv PyCharm.
  • Bruk C ++ og Python vanlige biblioteker - Noen C ++ biblioteker, som OpenCV og QT, har et Python-grensesnitt. Det er enkelt å begynne å bruke det samme biblioteket i Python i stedet for å lære et nytt bibliotek fra bunnen av.
  • Ikke glem opprinnelsen - Noen ganger er Python bare for sakte eller ikke optimal for oppgaven. Dette er når C ++ - kunnskapen din begynner. Det er mange måter ( SIP , ctypes osv.) Å bruke C ++ - kode inne i Python.

Bunnlinjen

Uansett hva andre sier, er det ikke lett å bytte til et annet programmeringsspråk, spesielt til et språk som er fundamentalt annerledes enn det du er vant til. Ta deg tid til å lære, å grave i, å oppdage. Men viktigst av alt, forstå at ikke bare språket skal endres, men også din kodestil og arbeidsmetodikk.

Lykke til!