Hvordan jeg gik fra C ++ til Python: en konceptuel ændring

Introduktion

Folk siger, at kodning i Python er så let, at selv en 6-årig kan gøre det. Dette var tanken, jeg havde i tankerne, da jeg begyndte at kode i Python på arbejde. Jeg havde været softwareudvikler på fuld tid i 4 år på det tidspunkt og skrev hovedsageligt i C ++ på Linux og brugte stærkt QT-biblioteket. Imidlertid skrev jeg først dårlig Python-kode.

Det har været omkring 3 år siden, jeg har foretaget denne switch, og jeg synes, det er et godt punkt at opsummere de fremskridt, jeg har gjort i løbet af denne tid. Når jeg ser tilbage, ændrede jeg ikke kun mit vigtigste programmeringssprog, men ændrede også mit arbejdsmiljø og den måde jeg tænker på kode på.

Jeg vil ikke gå i detaljer og forskelle mellem C ++ og Python, da der er mange ressourcer online, men snarere vil beskrive min egen oplevelse. Jeg håber, at dette indlæg ville være nyttigt for folk, der gennemgår den samme overgang, som jeg gjorde.

C ++ dykker, Python snorkler

C ++ har lyst til at dykke ned i de magiske mysterier i havet - det er smukt, men kræver mere læring og øvelse, og generelt er den afstand, du dækker, ikke så stor. Python er lidt som snorkling - du ser skønheden, så snart du stikker hovedet i vandet, men du går ikke meget længere ned. Du fortsætter med at svømme i lavt vand og kan nemt dække en lang afstand. Fra denne beskrivelse er det klart, at hvert af disse sprog skal bruges på det rette sted og tidspunkt.

Dykker ned i C ++ og overlever det

C ++ er strengere og straffer dig mere hårdt for dine fejl. Det er ikke en effektiv kodningssession, hvis du ikke har fået en overraskende segmenteringsfejl mindst en gang. Derfor kræver det en dybere forståelse af computeren, compileren og sproget. Når du går dybere, kan du virkelig se og blive imponeret over smukke ting som kompileringsprocessen og hukommelsesstyring.

Som C ++ -programmer plejede jeg mere om syntaks-tweaks og underlige eksempler. Jeg vidste altid, hvor jeg tildelte hukommelse, og hvordan jeg frigav den. De programmer, jeg skrev, var mere enkeltstående, da jeg foretrak at vide, hvad der foregik inde i min kode. Hovedideen var, at den kode, som en anden skrev, var mindre pålidelig, mere udsat for fejl og muligvis sprænge din hukommelsesforbrug.

Mine vigtigste hverdagsværktøjer var Vim med adskillige plugins til at skrive kode, GDB til debugging og Valgrind til analyse af min hukommelsesforbrug og fejl. Jeg kompilerede med g ++ og skrev mine egne Makefiles . Dengang følte jeg ikke, at en IDE ville gavne mig, men ville hellere sænke tingene og få mig til at miste kontakten med min kode. I eftertid stod jeg stærkt på kompilatoren for at finde mine typefejl .

Lav svømning i Python

En af de første ting, du skal lære, når du skifter til Python, er, hvordan man slipper taket - man ved ikke, hvad der sker under emhætten, hvor hukommelsen tildeles og frigives, og det er OK. Du opfordres også til at bruge kode, der er skrevet af andre, pakket i biblioteker, da det sparer dig tid og hjælper dig med at kode hurtigere. Det betyder ikke, at du har brug for at skrive kode, der er langsom hund og er afhængig af ikke-vedligeholdte og ikke-funktionelle biblioteker, men fokus er bestemt anderledes.

Da jeg begyndte at kode i Python, skrev jeg først C ++ - kode i Python. Det fungerede, men jeg fik ikke nogen fordel af sproget. Min kodning blev bedre, da jeg begyndte at skrive på en mere “Pythonic” måde og begyndte at bruge biblioteker og mere avancerede koncepter som generatorer, dekoratører og sammenhænge.

Som Python-udvikler har jeg tendens til først at se efter det bibliotek, der løser det aktuelle problem. Python har et rigt biblioteksøkosystem og samfund, der understøtter det. Der er biblioteker til praktisk taget alt. Her er nogle nyttige, som jeg bruger dagligt: NumPy til numeriske beregninger, OpenCV til computersyn, json til læsning af json-filer, SciPytil videnskabelige beregninger, sqlite3 til databaser.

Mit daglige værktøj er PyCharm (ja, en IDE) med IdeaVim- plugin. Jeg begyndte at bruge det hovedsageligt på grund af det faktum, at det er en kraftig debugger, som er meget venligere end standard Python debugger, pdb . Jeg bruger også pip til installation af biblioteker, som jeg har brug for. Jeg overvåger ikke min hukommelsesforbrug længere, medmindre jeg virkelig skal.

Nogle praktiske tip

Hvis du er en C ++ - udvikler, og du overvejer at begynde at kode i Python, her er mit råd til dig:

  • Slip af med gamle vaner - Stop med at bruge C ++ - kompilatoren som en debugger. Overoptimer ikke hukommelsesforbruget. Undgå at skrive C ++ - lignende kode. Og prøv på alle måder ikke at stole på typer.
  • Få nye vaner - Begynd at bruge biblioteker. Skriv pythonisk kode (men overdriv det ikke). Hold tingene læsbare. Brug mere komplekse begreber såsom generatorer / dekoratører / sammenhænge. Prøv PyCharm.
  • Brug almindelige C ++ - og Python-biblioteker - Nogle C ++ - biblioteker, som OpenCV og QT, har en Python-grænseflade. Det er let at begynde at bruge det samme bibliotek i Python snarere end at lære et nyt bibliotek fra bunden.
  • Glem ikke din oprindelse - Nogle gange er Python bare for langsom eller ikke optimal til opgaven. Dette er, når din C ++ - viden sparker ind. Det er mange måder ( SIP , ctypes osv.) At bruge C ++ - kode inde i Python.

Bundlinie

Uanset hvad andre siger, er det ikke let at skifte til et andet programmeringssprog, især til et sprog, der er fundamentalt anderledes end det, du er vant til. Tag dig tid til at lære, at grave ind, at opdage. Men vigtigst af alt skal du forstå, at ikke kun sproget skal ændre sig, men også din kodningsstil og arbejdsmetode.

Held og lykke!