Blog

A Python mindenre (is) alkalmas, adat-fejnehéz témákban azonban különösen kiemelkedő – Interjú

06-REACT-ALAP-KEPZES

A Python mindenre (is) alkalmas, adat-fejnehéz témákban azonban különösen kiemelkedő – Interjú

A Python napjaink egyik vezető programozási nyelve, ami egyszerűsége mellett sokoldalúságával érte el sikereit. Különösen kiemelkedő azonban a nagy mennyiségű adatokkal dolgozók körében, legyen szó akár Data Analystekről, Data Scientistekről, vagy fejlesztőkről, akik számára fontos, hogy alkalmazásaik hatékonyan kezeljék a mögöttük meghúzódó adatbázisokat. 

Hogy pontosan mire is alkalmas a Python, miért éri meg most elsajátítani, illetve milyen lehetőséget kínál a fejlesztők számára, Dr. Faragó Csaba, az Interactive Brokers senior szoftverfejlesztőjével készült interjúnkból kiderül!

Miért a Python mellett tette le a voksát?

“A programozás történelmében talán most fordul elő először az, hogy az ajánlott első programozási nyelv és a legnépszerűbb programozási nyelv egybe esik: ez a Python. Így oktatási célra (már általános iskolás kortól) és karrier szempontból is hasznos választás. Emiatt döntöttem úgy, hogy ehhez a nyelvhez készítek oktatóanyagot.”

Dr. Faragó Csaba Python képzéseiről további információkat találsz honlapunkon, ahol többek között a részletes tematikáról is tájékozódhatsz!

 

Milyen egyéb technológiákat ismer? Melyikeket használja most aktívan?

„Hú, az első része a kérdésnek igen nehéz! Melyek azok a programozási nyelvek, keretrendszerek, könyvtárak, eszközök, amivel valaha programoztam? Elég hosszú és talán unalmas is lenne a felsorolás.

Jelenlegi munkahelyemen abban a szerencsés helyzetben vagyok, hogy a 3 legnépszerűbb programozási nyelvet használhatom: a Pythont, a Java-t és a JavaScriptet.

Korábban számottevő ideig foglalkoztam C++-szal, Scala-val, R-rel, és mivel a listát előbb-utóbb úgy is azzal kell befejezni, hogy „és a többi”, ezt most megteszem.

A kérdés viszont technológiára, és nem programozási nyelvre vonatkozott. No ez még inkább kinyitja Pandora szelencéjét, mert ebbe aztán szinte az összes alkalmazás, keretrendszer, könyvtár beletartozhat, amivel valaha találkoztam. A lista egyik végén ott vannak azok a technológiák, amelyek annyira alapvetőek, hogy az nem teszi különlegessé a fejlesztőt. Pl. valamilyen szinten illik mindenkinek ismernie mondjuk az SQL-t az adatbázisok használatához, vagy a HTML-t a webes fejlesztéshez.

A sok kis könyvtár felsorolása viszont túl unalmas lenne. A „kettő között” kell megtalálni azokat, amelyek nem nyilvánvalóak, de azért elég érdekesek ahhoz, hogy megemlítsem. Erre a részre szorítkozva sorolok fel párat. Big Datát fejlesztettem Sparkban, Scala programozási nyelven. Üzleti Intelligenciát fejlesztettem SSAS és PowerBI technológiákkal. Webes frontend alkalmazásokat fejlesztettem VueJS keretrendszerben. Webes backend alkalmazásokat fejlesztettem Spring Boot és VertX keretrendszerek segítségével.

Mi volt a legérdekesebb projekt és/vagy melyikre a legbüszkébb, amiben részt vett (ha publikus) és miért?

„A múltamból egyet tudnék kiemelni. Műszaki menedzser voltam egy kisméretű magyar egyesületnél. Én készítettem a projektterveket. Élveztem a munkát, viszont hiányzott a programozás. Szerencsémre a munkamennyiség túl nagyra nőtt, és kevés fejlesztő volt, így egy önálló komponens megvalósítását magamra vállaltam. A saját magam által elkészített specifikáció alapján valósítottam meg. Volt benne webes frontend, backend, adatbázis, adatkapcsolat egyéb rendszerekkel, tehát a programozás igen széles palettáját felölelte. 

Az alkalmazás folyami szolgáltatásokról szólt: fel lehetett iratkozni olyan eseményekre, hogy egy hajó például elér egy folyamkilométert vagy kikötőt, és a hajózási társaság e-mail értesítést kap az eseményről. A programot megvalósítottam, szerintem jól sikerült, ráadásul alkalmam nyílt egy olyan dologra, amire a legtöbb fejlesztőnek nincs lehetősége. 

A titulusom továbbra is műszaki menedzser volt, és ilyen minőségben látogattunk el egyik projektmenedzser kollégámmal egy magyar hajózási társasági irodájába. Ott beszélgettünk a tulajdonossal projektről, és demonstráltuk a lehetőségeket. Próbaképpen feliratkozunk élő adatokkal az adott hajózási társaság hajóival kapcsolatos eseményekre. Amíg beszélgettünk, az egyik hajó pont beérkezett az egyik legnagyobb hazai folyami kikötőbe, és meg is jött az értesítő e-mail. Ez amiatt volt különleges, mert a legtöbb fejlesztő nem látja a saját programját élőben működni, a végfelhasználók társaságában, ráadásul úgy, hogy pont bekövetkezik élőben egy olyan esemény, ami az adott program szempontjából izgalmas. Ez egy olyan alkalmazás volt, amiben a tervezéstől az éles demóig végig ott voltam.”

Milyen célokra használható a Python? 

„Erre a kérdésre azt szoktam válaszolni, hogy a Python mindenre alkalmas, kivéve a webes frontendet, ahol csak JavaScript van.

Az viszont, hogy ténylegesen mire használják a Pythont, már más kérdés! Ez utóbbi valójában két dolgot jelent: a Pythonban megírt programok közül mi van többségben, illetve adott területen mekkora a Python részesedése.

Úgy látom, hogy a Pythont leginkább „adat-fejnehéz” témákban használják: adatfeldolgozás, big data, adattudomány stb. A legtöbb Pythonban megírt kód adathoz köthető, illetve fordítva: a felsorolt területeken a Python ott van az élvonalban. Pl. a big datában a Scala mellett, az adattudományban az R mellett.

De egyéb területeken is ott van az élvonalban. Például a webes backend keretrendszerek népszerűségi listájában egy PHP-s keretrendszert két Pythonos keretrendszer követ a dobogón, és már messze megelőzik pl. a Java-s Springet.

 

Egyszerűbb asztali alkalmazásokat és játékokat is lehet Pythonban fejleszteni, de arról nincs adatom, hogy az ebben a szegmensben megírt alkalmazások hanyadrészét fejlesztették Pythonban.

Vannak területek, ahol a Python még nem fészkelte be magát eléggé, bár az elvi lehetőség meg van hozzá. Ilyen például az okoseszközös alkalmazások fejlesztése.

Jellemzően hogy épül fel egy fejlesztési projekt, folyamatok és szerepkörök tekintetében?

„Ez nagyon cég- ill. projektfüggő. Cégről cégre, és azon belül projektről projektre, sőt, csapatról csapatra más-más lehet a módszertan. 

Mindegyik csapatnak van „főnöke”. A főnök valójában kettős szerepet játszik: egyrészt szakmai érdelemben a csapat feje, másrészt jelent ez egy főnök-beosztotti viszonyt is. Egyébként több helyen ez utóbbit kettéosztották: más volt a főnök a szó klasszikus értelmében, és más a szakmai vezető. A szakmai vezető megnevezése sokféle lehet, és már ez függ az alkalmazott módszertantól: architect, product owner, vagy csak simán menedzser.

A feladatokat valami módon kiosztják. Erre vagy van külön ember (pl. scrum master), vagy a vezető maga teszi meg. Az elején az időbecslésnek és a végén „számonkérésnek” is megvan a maga rituáléja, ami szintén projektfüggő.

Voltak projektek, ahol úgy éreztem, hogy túl sok erőforrás megy el a ceremóniákra, és olyan is, hogy azt éreztem, nincs eléggé jól megszervezve, és ennek következtében félremennek dolgok. Nem lehet egyértelműen kijelenteni, hogy egyik vagy másik módszer a jobb, emiatt nehéz ezt jól csinálni, és emiatt vannak jól megfizetve azok, akik igyekeznek jól csinálni.”

Milyen feladatokat kell/lehet ellátni junior, medior és senior fejlesztőként? Milyen skillek kellenek ehhez?

„Ez egy érdekes felvetés, ugyanis fejlesztőként nemigazán látok éles határokat a felsorolt szenioritási szintek között. Mindenki junior, amikor rákerül egy új projektre. Talán egy szenior gyorsabban belerázódik egy újabb projektbe, mint egy junior, ezt látom leglényegesebb különbségnek.

Azt gondolom, hogy technikailag nincs jelentős eltérés: mindenkinek ismernie kell magát a nyelvet és a legfontosabb könyvtárakat, késznek kell lennie megismerni a korábban nem látott könyvtárakat, illetve megérteni a kódot. Ilyen tekintetben nincs érdemi különbség junior és szenior között. Ami a kettőt megkülönbözteti, az inkább a munkához való hozzáállása. Visszaemlékezve a junior önmagamra: nem tudtam proaktívan fellépni, sodródtam az árral. Ma már van egy félig képzeletbeli, félig valós listám arról, hogy egy új rendszer esetén mit szeretnék megtudni ahhoz, hogy komfortosan mozogjak benne.

Itt a következőkre gondolok. Mindegyik szoftvernek van forráskódja, ami egy verziókövetőben található. Kell hozzáférés a verziókövetőhöz. A kódot le kell tölteni, le kell valahogy fordítani és el kell tudni indítani. A projekt intenzíven használhat olyan keretrendszert, könyvtárakat, amelyeket nem ismerek; ezeket meg kell tanulni. Mindegyik projektnél van feladatkezelő, dokumentum kezelő; ezekhez kell hozzáférés.

Általában van code review eszköz is, illetve egy folyamat, hogy azt hogyan használják. Többnyire vannak dedikált tesztrendszerek, amelyekhez kell hozzáférés. Nagyrészt van valamiféle adatbázis is. Az új verziókat valamilyen rendszer szerint kiadják. A rendszert valahol üzemelik, és valahogy beüzemelik. A folyamatnak van módszertana, ami lehet formális vagy informális; ezt meg kell ismerni. Egy szenior fejlesztő tisztában van az ilyesmivel, míg egy juniornak jobban kell fogni a kezét az elején.”

Kíváncsi vagy, mire használja a Pythont egy tech lead, egy Data Scientist és egy senior szoftvermérnök? Egy korábbi cikkünkben áttekintettük a Python fejlesztésben rejlő lehetőségeket!

Hogyan lehet proaktívan gyorsítani a szintlépési folyamatot?

„Jó lenne erre azt válaszolni, hogy sokat kell tanulni és egyre több feladatot meg kell oldani, és megy az magától. A tapasztalatom sajnos az, hogy ez nem így van. A probléma a „skatulyázás”: az ember belekerül egy skatulyába, és onnan nagyon nehezen tud kimozdulni.”

A junior szintről medior szintre lépéshez nem tudok jobb módszert annál, hogy a fejlesztő elhelyezkedik valahol, dolgozik 2-3 évet, majd vált. Persze minden váltásnál érdemes minél több tapasztalatot magával vinnie a konvertibilis technológiák területén . 

TIPP: Tech stacked bővítésében online, mentorált képzéseink is sokat segíthetnek. Előre összeállítottunk például több tanulási útvonalat is, amleyekkel az alapoktól akár a haladó szintig bővítheted tudásodat gyakorlati feladatokon és rendszeres oktatói konzultációkon keresztül. 

“Ebben a szakmában a folyamatos tanulás elengedhetetlen. Javaslom mindenkinek, elsősorban a junior és medior kollégáknak, hogy fordítsanak időt, energiát az adott projekten használt eszközök, technológiák, könyvtárak megismerésére. Különösön a népszerűekre, hogy ha ismét találkoznak ezekkel, akkor magabiztosan tudják alkalmazni őket.”

Milyen technológiákat érdemes/szükséges elsajátítani a Python fejlesztéshez? Miért?

„Érdemes ezt az egészet absztrakciós szintekre bontani, és ez nyelvfüggetlen.

Az első szint maga a nyelv. A modern programozási nyelvek többsége – nyelv szinten – kb. ugyanazt tudja: mindegyikben megtalálhatóak az imperatív programozás alapelemei (változók, feltételkezelés, ciklusok, függvények stb.), általában lehet objektumorientáltan programozni, és tipikusan van lehetőség funkcionális programozásra is.

A következő szint a könyvtárak, melyek lehetnek belsőek és külsőek. Programozási nyelvtől függetlenül léteznek adatszerkezetek (pl. listák, halmazok, szótárak), valahogy lehet adatbázishoz kapcsolódni, webszervert készíteni illetve másik webszerverhez kapcsolódni, tudni kell feldolgozni a jövő-menő adatokat, általában van lehetőség grafikus felület programozására, és a sort még lehetne folytani. Ezek azok a dolgok, amelyeket mindenképpen érdemes ismerni, függetlenül attól, hogy milyen programozási nyelvben dolgozunk és azon belül mit csinálunk.

Pythonban abban a szerencsés helyzetben vagyunk, hogy nagyjából eddig a szintig teljesen szabványos, általában belső könyvtárakkal meg tudjuk oldani mindezt.

Végül a harmadik szint az, amivel foglalkozunk. Ott már nem elegendő körülbelül ismerni a használt technológiát, hanem egy-egy részterületbe nagyon bele kell magunkat ásni.

Mindezek mellett, képletesen merőlegesen, ismernünk kell az alkalmazott technológiákat: az integrált fejlesztőkörnyezetet, a verziókövetőt, a code review eszközt, a dokumentumkezelőt stb.

Az itt felsoroltak függetlenek a programozási nyelvtől; Pythonra ugyanúgy érvényesek mint bármi másra.”

Mi a kedvenc feature a munkája során használt technológiá(k)ban? Miért?

„Ezt így nehéz megmondani, mert nagyon sok kisebb-nagyobb jó ötlettel találkozok a munkám során. Már szinte fejben meg is alkottam egy ideális programozási nyelvet, amelyben benne lennének a különböző helyekről összeollózott, szerintem jó dolgok. Az egésznek a vázát persze a Python képezné, de ott is látok olyanokat, amelyek „Python mércével mérve” legalábbis nemigazán tartok jónak, és más rendszerből emelném át; akár egész régiekből.

De ha nem magára a programozási nyelvre gondolok, hanem a használt eszközökre, én ott sem egyetlen feature-t emelnék ki, hanem inkább azt, hogy a gyakran előforduló dolgokat jól ismerjük az általunk használt rendszerben. Például tudjuk a fájlok között keresni, egy változó vagy függvény deklarációjára ugrani, debug módban indítani a programot, lépkedni benne stb. Ezen alapvető apróságok stabil ismerete szerintem sokkal hasznosabb, mint mondjuk egy különleges feature.

De hogy ne menjek el teljesen a kérdés mellett, említek egyet, amit talán kevéssé ismert, nem túl bonyolult, és igen hasznos, ráadásul nyelvfüggetlen. A kedvenc általános célú (tehát nem programozásra használt) szövegszerkesztőm a Notepad++. Annak van egy egész jól használható beépített makró lehetősége, ami arról szól, hogy „felvételt készít” a felhasználói interakciókról, majd azt „le lehet játszani” később. Ügyesen alkalmazva igen gyorsan lehet mechanikusan szöveget átalakítani a segítségével.”

Mennyit változott a technológia azóta, hogy először megtanulta, napjainkig?

“Ez a kérdés vonatkozhat a számítástechnikára úgy általában, illetve magára a Pythonra. Először az egyikre válaszolok, utána a másikra.

A számítástechnika szédületes fejlődésen ment keresztül az elmúlt évtizedekben; a történelemben nem ismert még egy ilyen exponenciális fejlődés, amit a számítástechnika produkált néhány évtized alatt. Példák sokaságát lehetne mondani, hogy hol tartottunk 1990 környékén, amikor elkezdtem ezzel foglalkozni, és hol tartunk ma, 2022-ben. És mennyit fejlődött a számítástechnika ennyi idő alatt, összehasonlítva más iparágakkal: járműipar, építőipar, mezőgazdaság stb. Vagy összehasonlítva tetszőleges 30 évnyi fejlődéssel, bármikor a történelemben korábban. Talán a második világháború 6 éve kivétel ez alól, amikor egységnyi idő alatt még többet fejlődött a világ, csak sajnos akkor nem az emberiség általános jóléte volt a cél.

Ugyanakkor az a furcsa, hogy az alapok teljesen ugyanazok. A processzor legalul nem tud érdemben többet, mint biteket lépteti jobbra-balra. Vagy a web alapja, a HTTP protokoll szintén érdemben nem változott: a kliens kérdez, a szerver válaszol. Meglepő, de az elképesztő és emberi ésszel nehezen felfogható fejlődés mögött az alapvető dolgokban nincs jelentős előrelépés.

A Python használatának alapjait akár már néhány hét alatt elsajátíthatod. 3 hetes alapozó képzésünk ideális azok számára, akik most ismerkednek a programozás világával, a Python nyelven kívül ugyanis egy alapvető fejlesztői gondolkodásmódra is szert tehetnek általa. Átfogó Python képzésünkön pedig arra helyeztük a hangsúlyt, hogy átadjuk az önálló fejlesztéshez szükséges programozói ismereteket. Így mélyére ásunk az adatszerkezetek kezelésének, az imperatív, az objektumorientált és a funkcionális programozás lépéseinek is, miközben az elsajátított elméletet egy valós projektfeladat elkészítésén keresztül gyakoroljuk. 

A Pythonnal először 2005-ben találkoztam. Akkor egy konkrét célra kellett, pár hónap alatt lefejlesztettem benne egy komponenst, és utána nagyjából 2020-ig nem is találkoztam vele. Mivel nagyon kis részét használtam csak 15 évvel korábban, így személyesen érdemi összehasonlításom nincs. Emlékeim szerint sokban hasonlított a mostani Pythonra, különösebben nagy változáson tehát nem ment keresztül, inkább lassú de határozott fejlődésként jellemezném. Mégis, mi történt ez a 15 év alatt, hogy az alighogy TOP10-be került nyelv lényegében a legnépszerűbb lett? Szerintem maga a nyelv nem változott annyit, hogy ez indokolná (bár voltak fejlesztések), hanem a világ változott meg körülötte. Tudnunk kell a Pythonról, hogy ez egy úgynevezett interpretált nyelv: az utasításokat a rendszer egyesével értelmezi és hajtja végre. 

Ez borzasztó lassú futást eredményez, akár ötvenszeres szorzót is egy jól optimalizált C++ kódhoz képest. Csakhogy nem mindegy, hogy egy műveletre egy másodperc helyett közel egy percet kell várni, vagy egy ezredmásodperc helyett öt századmásodpercet. Az ezredforduló körüli tipikus hardveren inkább az előbbi volt jellemző, a maiakon meg inkább ez utóbbi. Így az a programozási nyelv, ami nem volt egy jó választás az akkori hardvereken, ma már jó választás lehet, ugyanis a jó hardver ma már olcsó, míg a programozó ideje drága.”

Milyen módszereket használ a tudása naprakészen tartására?

Tanítva tanulni a legjobb tanulási módszer. Azzal, hogy készítem a Webuni számára a kurzusokat, nekem magamnak is részletesen utána kell járni az érintett területeknek. Ezzel én magam is nagyon sokat profitálok, nemcsak a hallgatóim.

A másik fontos dolog, amit itt megemlítenék az az, hogy szinte folyamatosan belefutok kisebb-nagyobb keretrendszerben vagy legalább könyvtárba, amit korábban nem ismertem, és azt kénytelen vagyok megismerni, megtanulni ahhoz, hogy el tudjam végezni a munkámat.”

Oktatóként mik azok a módszerek, amikkel a leginkább tudja motiválni a hallgatóit, illetve megkönnyíteni a tanulási folyamatot? 

„Például az alapkurzusban mindegyik anyagrészt felépítése ugyanolyan: elméleti alapozó + live kódolás (döntőrészt 3 feladat) + ugyanannak a programnak a továbbfejlesztése + teszt (nem triviális, de azért könnyen sikerélményt hozó kérdésekkel) + 2 házi feladat (ami a példák alapján általában megoldható). Abból indulok ki, hogy én magam szeretem a stabilitást, hogy egy új anyagban is vannak „mankók”, amire számíthatok, és bízom abban, hogy ez a hallgatóimnak is elnyeri a tetszését.”

Milyen új technológiát sajátítana el szívesen? Miért?

“Hú, nagyon sok minden rajta van a TODO listámon, az adattudománytól a mobilos fejlesztésen át a mikrovezérlőkig, de sajnos az én napom is 24 órából áll. Jelenleg azokat tanulom meg, ami szükséges a munkámhoz, és majd ha ez befejeződött, akkor talán lesz időm csökkenteni lista hosszát.”

Mit ajánl azoknak, akik most akarnak belevágni a Python fejlesztés elsajátításába? Mit csinálna másképp, ha most vágna bele?

„A Python megtanulását 2020-ban úgy csináltam, hogy végigfutottam kb. 1 óra alatt a W3Schools tananyagát, és ezt ma sem csinálnám másképp. Ezt viszont nem tudom a most kezdőknek ajánlani, mert nekem ehhez volt több évtizedes programozási tapasztalatom és korábban ismertem a Pythont, szóval inkább csak ismételtem.

Viszont ha kilépünk konkrétan a Python területéről, és programozásról beszélünk úgy általában, akkor tudok olyat mondani, amit a korábbi önmagamnak mondanék, és  jó szívvel mondok azoknak is, akik most teszik meg az első lépéseket: legyen egy hobbi projektjük! 

Tehát egy olyan alkalmazás, amit valahogy elkezdenek, folytatnak, kiegészítenek, újrakezdenek, és egyre jobbá, szebbé teszik. A felmerülő problémákat próbálják meg megoldani, ill. tanuljanak meg segítséget kérni. Mindig legyen egy olyan változata, amit meg lehet mutatni másnak. Szerintem ez nagyon motiváló és nagyon hasznos is tud lenni!”

Egyszavasok

  • Név – Csaba
  • Titulus – szoftverfejlesztő
  • Iroda vs Home office, vagy hibrid? – hibrid
  • Kávé vs Tea, vagy energiaital? – kávé
  • Milyen gépen dolgozik? – Dell
  • Hány monitort használ?- 1
  • Dark vs Light fejlesztői környezet? – Light
  • Magyarul vagy angolul kommentel? – angolul
  • TAB vagy SPACE? – space

Hírlevél feliratkozás

Az adataim megadásával elfogadom a Cubix Institute of Technology adatkezelési tájékoztatóját.
Oszd meg, ha tetszett:
Facebook
Twitter
LinkedIn
Email

Saját blogposztot szeretnél megosztani?

A jelentkezéshez töltsd ki az űrlapot

Vendégcikk beküldése

Add meg elérhetőségeidet, valamint csatold be az általad megosztani kívánt tartalmat.

Az adataim megadásával elfogadom a Cubix Institute of Technology adatkezelési tájékoztatóját.

Beiratkozás most!

Vezetéknév *
Email *
Keresztnév *
Telefonszám *
Válassz kezdés időpontot
Fizetési mód *
Számlázási név
Irányítószám
Cím (utca házszám)
Ország
Város
Cégnév
Adószám

* Az adataim megadásával elfogadom a Cubix Institute of Technology adatkezelési tájékoztatóját.

Are you interested, but have a few questions?​

Fill out this form and we will get back to you and answer all your questions.

Please select form to show
By providing your data, you accept the Cubix Institute of Technology Privacy Policy.

Szeretnék értesülni a következő elérhető tanfolyam időpontjáról.​

Az adataim megadásával elfogadom a Cubix Institute of Technology adatkezelési tájékoztatóját.

Érdekel, de van néhány kérdésem.

Add meg elérhetőségedet és hamarosan jelentkezünk további információkkal a képzéssel kapcsolatosan.

Az adataim megadásával elfogadom a Cubix Institute of Technology adatkezelési tájékoztatóját.

Are you interested, but have a few questions?​

Fill out this form and we will get back to you and answer all your questions.

Please select form to show
By providing your data, you accept the Cubix Institute of Technology Privacy Policy.

Enroll Now!

Fill out this form and we will get back to you and answer all your questions.

First Name *
Email *
Last Name *
Phone number *
Choose starting date
Payment Method *
Billing Name
ZIP
Address
Country
City
Company
TAX Number

* By providing your data, you accept the Cubix Institute of Technology Privacy Policy.