Itt a nyár és mivel lehetne ezt a legjobban megünnepelni, mint egy kígyóról elnevezett programozási nyelv bemutatásával. Következőkben tehát a Python programozási nyelvről lesz szó és annak lehetséges alkalmazásairól.


Miért tartsunk otthon Python-t?

Python pályafutása 1991-ben kezdődött el egy Guido van Rossum nevű fejlesztőnek hála, aki egy olyan általános programozási nyelvet akart készíteni, amit nagyon könnyen el lehet sajátítani és használni. Az elmúlt év tizedek alatt a Python nyelv az egyik legjobb és legnépszerűbb általános programozási nyelvé nőtte ki magát, amit bizonyít, hogy számos operációs rendszeren(linux, mac os) alapból megtalálható a nyelv. De nézzük meg, hogy mitől ilyen népszerű:
  • Egyszerűség: A nyelvnek az egyik legnagyobb előnye, hogy nagyon egyszerű és ezért például nagyon sok egyetemen a kezdő programozó legényeket Python segítségével vezetik be a programozás világába.
  • Dinamikus: Mint minden dinamikus nyelvnek úgy Python-nak is van egy beépített REPL-je, ami nagyon hasznos fejlesztésekhez, mivel a REPL segítségével nagyon gyorsan tudunk különböző függvényeket kipróbálni, illetve az általunk elkészített függvényeket is ki tudjuk vele próbálni.
  • Rugalmasság: A nyelv egyik nagyon jó tulajdonsága, hogy egyik programozási paradigmát sem erőlteti ránk, habár azt azért megjegyezném, hogy Python alapértelmezetten egy imperatív programozási nyelv, ezért érdemes aszerint használni. 
  • Támogatottság: A nyelvnek van egy nagyon jó kis dokumentációja van, amiből elég gyorsan még a nyelvet is el lehet sajátítani. Nem is beszélve, hogy a nyelv népszerűsége miatt számos fejlesztői környezet(IDE) támogatja a nyelvet.
  • Elterjedtség: A nyelv felhasználás területe hatalmas, mivel mind az iparban és akadémián is előszeretettel alkalmazzák. Ezért ne lepődjünk meg azon, hogy bármilyen felhasználási területhez találunk egy Python-os könyvtárat.
  • Modulok: A nyelvnek egy fontos tulajdonsága, hogy alapesetben minden fájl egy modulnak felel meg, ami a fejlesztés során nagyon hasznos tud lenni.
    • Na de jöhet a kérdés, hogy mi is a modul? A modulra gondolhatunk úgy mint egy tárolóra, ahol az egymáshoz kapcsolódó adatszerkezeteket és függvényeket tartjuk. Aki jobban jártas az OOP-ban annak úgy is mondhatom, hogy a modul gyakorlatilag egy singelton osztálynak felel meg. 
    • Jöhet a következő kérdés, hogy mire jók? Egyrészt fájlszinten elkülöníti a kódbázisunkat, másrészt viszont mivel a modulon keresztül elérjük a benne tárolt adat típusokat és függvényeket ezért elkerülhetővé válik, hogy OOP-t feleslegesen ne használjunk, mivel nem kell objektumot készítenünk a különböző adatok eléréséhez. Az már csak hab a tortán, hogy REPL-ből be tudjuk tölteni a moduljainkat és ezáltal REPL belül tudjuk a modulban lévő függvényeket tesztelni.



    Vigyáz, mert harap!

    Egyetlen programozási nyelv sem tökéletes és minél öregebb egy programozási nyelv annál több gondja lehet és sajnos a Python a több mint 25 évével sem áll másképp. Következőkbe 2 gondot említtek meg, amit a kezdőket megharaphatja:

    Verzió kavalkád

    Sok népszerű programozási nyelvvel ellentéteben a Pythonnak a fejlesztésének az irányát egyetlen fejlesztő választja meg, aki nem más mint a nyelv megalkotója vagyis Guido. Ha visszamennénk 10 évet az időben látnánk, hogy Guido boldogtalan, mivel szeretett programozási nyelvében vannak olyan hibák, amit csak úgy tudna kijavítani, ha a nyelvből kiadna egy olyan változatot, ami nem lenne visszafele kompatibilis. Ezért hát nagy nehezen ki is adja ezt az új változatot, ami végül egy hatalmas törést eredményez a nyelv felhasználóinak a körében, mivel a nyelvhez megtalálható csomagok a régi verzióban íródtak és azok nem működnek az új verzióban. Ezért ezeket a csomagokat kompatibilisé kell tenni, ami nagyon sok időt jelent. Így 10 év után már elmondhatjuk, hogy a nyelvnek a legújabb verzióját érdemes használni, mivel már elenyészően kevés inkompatibilis csomag van és mivel a nyelv régi verziója egy idő után már nem fog frissítéseket kapni.

    Csomagkezelő kálvária

    Általánosságban véve három fajta csomagkezelő létezik a világon:
    • Projekt szintű: Ebbe azok a csomagkezelők tartoznak, amik a telepítendő csomagjaikat egy bizonyos projekt könyvtárában töltik le és ezáltal minden projektnek külön-külön meg lesznek a maguk csomagjai. Emiatt könnyen előfordulhatnak redundanciák, vagyis hogy két projekt ugyanazt a csomagot használja és ezért az adott csomag mind a két helyen helyett foglal el a projekteknél, ahelyett hogy megosztanák a csomagot.
    • Rendszer szintű: Ebben tipikusan azok a csomagkezelők tartoznak, amik a csomagot az operációs rendszer szintjén telepítik és ezáltal az össze projekt látja a telepített csomagokat. Ebben az esetben az úgy nevezett verzió ütközés léphet elő, ami azt jelenti, hogy két projekt ugyan annak a csomagnak két különböző verzióját akarja használni, ami nem lehetséges, mivel rendszer szinten csak egy fajta verziójú csomagot lehet felrakni. Ennek két lehetséges megoldása van:
      • Legújabb verziójú csomag használata mind a két projektnél. Viszont ebben az esetben imádkozhatunk, hogy az újabb verzióval is működjön a régió verziót használó projekt.
      • Virtuális környezet létrehozása és használata, amivel el tudjuk kerülni ezeket az ütközéseket. Amikor rendszerszintű csomagkezelővel csomagot telepítünk, akkor gyakorlatilag csak annyi történik, hogy az operációs rendszerünk környezetét módosítjuk. A megoldás lényege, hogy az operációs rendszer környezete helyett ezeket a virtuális környezeteket használjuk a csomagok telepítésekor és ezáltal projekt szinten tudunk csomagokat felrakni, ha minden projekt esetében létrehozzunk egy-egy ilyen virtuális környezetet.
    • Hibrid: Ezek a csomagkezelők egyesítik a fenti kettő tulajdonságait és engedélyezik, hogy lokálisan(projekt szinten) és globálisan(rendszer szinten) is lehessen csomagokat feltelepíteni.
    Sajnos a Python csomagkezelője(vagyis a pip csomagkezelő) a rendszer szintűek közé tartozik vagyis rendszer szinten rakja fel a csomagokat és ezáltal verzió ütközést okozhat, ami nagyon sok kezdő Python fejlesztő életét keseríti meg. Python esetében ezek a virtuális környeztek az alapértelmezetten elfogadott megoldások és érdemes megtanulniuk a használatukat, ha már kényelmesebben érezzük magunkat a nyelvvel. Általánosságban érdemes a Pythonban lévő venv virtuális környezet kezelőt használni, de későbbiekben mutatok egy másik kicsit komplexebb virtuális környezet kezelőt.



    Hogyan érdemes Python-t tartani?

    Programozási nyelveknek az egyik legfontosabb eleme a fejlesztés segítő eszközök, amik elérhetőek az adott nyelvhez. Python esetében egyszerű dolgunk van, mivel nagyon sok ilyen eszköz áll a fejlesztők rendelkezésére. Általánosságban két fajta fejlesztési módszer van Python-hoz, ami más nyelvek esetében is elmondható:

    • Szövegszerkesztő + terminál: Ezt a módszert általában egyszerűbb programok esetében szokták alkalmazni, amikor felesleges a nehéz tüzérséget bevetni és elég a fejlesztésnek ez az egyszerű és gyors módja is. Python esetében rendkívül jól működik, mivel számos szövegszerkesztőhöz van nagyon jó Python támogatás és mivel terminálból futtatott REPL segít abban, hogy a kódunkat egyfajta gyorsan iteráló stílusba fejlesszük le. Én személy szerint ehhez VSC + Python extension-t ajánlom, mivel ez kombináció tudja a legegyszerűbben megadni a fenti leírtakat.
    • IDE: Az IDE-vel szemben az elvárás, hogy a lehető legjobban tudjon minket segíteni a fejlesztésben és hogy ne kelljen a felületét bármi miatt is elhagyni. Vagyis hogy a fejlesztés lébonyolításához megtalálható legyen benne minden segítség. Erre az esetre a Pycharm-ot tudom ajánlani, mert ez az egyik legjobb IDE Python-hoz és mivel van ingyenes változata. Aki zöldfülű, de ki akar próbálni egy IDE-t anélkül, hogy elveszne az opciók tengerében annak ajánlom a Pycharm leegyszerűsített változatát.



    Mire jó egy Python?

    Persze lehet mondani, hogy ez szép és jó, de mire lehet használni ezt a kígyót? Ősszintén szólva a válaszom az lenne, hogy majdnem mindenre, mivel Pythonnak tényleg sikerült igazi általános programozási nyelvé válnia az egyszerűségével és az elterjedtségével, de a következőkben az általam kipróbált felhasználási módokról lesz szó:

    Az ezermester Python

    Szerintem egyszer minden programozó találkozik egy olyan egyszerű feladattal, amit gyakran akár naponta el kell végeznie és amiről ordít, hogy simán lehetne automatizálni. Az ilyen esetekre tökéletes megfelel a Python, mivel platform független és mivel már alapból egy rakás operációs rendszer alapból tartalmazza a nyelvet. Az én esetembe ezek adatletöltések automatizálása illetve backup készítése és feltöltése egy adott cloud szolgáltatóhoz volt. Persze ezekre lehet találni fizetős szolgáltatásokat, de azok nem mindig tudják kielégíteni a speciális igényeinket. Nem is beszélve, hogy többe kerülnek, mintha mi magunk valósítanánk meg az egészet. Ezért akit érdekel a téma annak ajánlom az Automate the Boring Stuff with Python könyvet.

    Az adattudós Python

    Manapság talán az egyik legfelkapottabb állás az adattudósoké avagy data scientist-ék, mivel a munka lényege az hogy egy rakat adatból(avagy költőiben az adatok tengeréből) új értékes információt nyerjünk ki. Persze nem azért népszerű a munka, mert valami merőben új dolgot csinálnának, hanem azért, mert mostanság egyre több és több adat áll rendelkezésére bárki számára és ebben a rengeteg adatban elég sok értékes információ lehet elbújva, amit felhasználva szép kis profitot lehet bezsebelni. Az ebben a szakmában dolgozgatóknak 3 fajta tudásra van szükségük: gépi tanulás, statisztika és programozás. Ezek közül egynek az elsajátítása is elég nagy kihívás, ezért nem is meglepő, hogy az egyik legnépszerűbben használt programozási nyelv ebben a szakmában a Python nyelv, mivel egyszerűségének hála bárki gyorsan el tudja kezdeni használni.

    Akit jobban érdekel ez a szakma annak ajánlom, hogy az Anaconda Python-on alapú adat platformot, mivel a platformban benne van minden Python-os csomag, ami csak kellhet az adatelemzéshez, sőt még több is. Az Anaconda platformban azt szeretem elsőre, hogy benne van a Pythonnak nyelvnek a legújabb verziója és a régebbi verziója is és ezek úgy települnek fel, hogy nem bántják már a rendszerünkön lévő Python verziókat. Az Anaconda csomag legfontosabb része a conda nevű csomag és virtuális környezet menedzser, ami egy kicsit bonyolultabb, mint azok az eszközök, amik alapértelmezetten Python-hoz elérhetőek(pip és venv), de van hozzá egy nagyon jó kis dokumentáció ,szóval annyira mégsem vészes a dolog.

    Ha valakit jobban érdekel ez a téma annak ajánlom, hogy nézzen rá a scikit-learn Python csomag oldalára, mert nagyon jó kis dokumentáció van hozzá, amiben rengeteg példa van. Nem is beszélve, hogy ha valaki gépi tanulást akar tanulni, akkor érdemes alapból ezzel a csomaggal kezdenie. Ha netalán még a neurális hálókkal is akar valaki szórakozni, akkor annak ajánlom a keras nevű könyvtárat, mivel az összes közül ezt a legegyszerűbb használni.


    Záró szavak

    Python egy olyan szerszám, amit minden programozónak érdemes magánál hordania, mivel mindig adódhat olyan alkalom, amikor jól jöhet ha nálunk van. Tartsuk fejbe, hogy egy kósza szöget egy multifunkciós kalapáccsal is be tudunk verni, de általában véve érdemesebb egy egyszerű kalapácsot használni.

    Mostanság belekeveredtem a Sythwave hullámba szóval jöjjön egy kis muzsika a műfajból.