Dr. Sheldon Cooper kő-papír-olló-gyík-Spock játéka

Sheldon, Agymenők

Sheldon, AgymenőkDr. Sheldon Cooper karakterét nem kell bemutatni. Ha a kockáknak döntéseket kell hozniuk, akkor az Agymenők (The Big Bang Theory) sorozatban többször is előkerül a kő-papír-olló-gyík-Spock játék.

A 2. évad 8. epizódjában – amelynek címe Fogd a nőt, és fuss! (The Lizard–Spock Expansion) – ismerjük meg a játékszabályt és rögtön alkalmazásra is kerül. Raj és Sheldon megpróbálja eldönteni, hogy melyik sci-fi sorozat a (leg)jobb, illetve Howard és Sheldon így próbálnak osztozni a vacsora maradékán. Végül az 5. évad 17. epizódjában – amelynek címe Itt a festmény, hol a festmény! (The Rothman Disintegration) – újra hallhatjuk a játékszabályt. Ekkor Kripke és Sheldon egy egyetemi iroda sorsáról (kié legyen) próbál dönteni.

A kő-papír-olló-gyík-Spock játékszabály

Vajon hogyan bővül ki a klasszikus kő-papír-olló játékszabálya további két kézjel/fegyver hozzáadásával? Íme a játékszabály videóban:

Íme a játékszabály szövegesen:

Az olló elvágja a papírt,
a papír bevonja a követ,
a kő agyonüti a gyíkot,
a gyík megmarja Spockot,
Spock eltöri az ollót,
az olló lefejezi a gyíkot,
a gyík megeszi a papírt,
a papír cáfolja Spockot,
Spock feloldja a követ,
a kő eltöri az ollót.

Ugye mi sem egyszerűbb? 🙂

A játékszabálynak számos grafikus ábrázolása is van. Ezeken többnyire irányított gráf csomópontjai mutatják a kézjeleket és a nyilak iránya mutatja, hogy mi mit győz le. Például a gyíktól Spock felé mutató jelzi, hogy a gyík megmarja (azaz legyőzi) Spock-ot. Íme az egyik ábra:

A kő-papír-olló-gyík-Spock játék szimulációja Java programmal

Az objektumorientált tervezés egyik lehetősége az öröklődés beépítése. Közös pontokat, funkcionalitást keresünk. Ezeket beépítjük az ősosztályba és az utódokban kiegészítjük, testre szabjuk. Kiindulunk az alábbi absztrakt Dontes ősosztályból:

A konstans DONTES tömb (indexelhető adatszerkezet) tárolja a kézjelek/fegyverek elnevezését. Ezek közül választ véletlenszerűen a  veletlenDontes() függvény. Az eredményt ki kell tudni írni a konzolra, illetve kezelni kell a döntetlent is. Ezekért közösen felelnek a dontesEredmeny() és a kiiras() függvények. A túlterhelt metódusokként létrehozott eredmeny() függvények kezelik a 2 illetve 3 játékos esetén a döntéseket. A háromparaméteres függvény visszavezet a kétparaméteres esetre. Utóbbi metódus – mivel absztrakt – csak az utódosztályban valósul meg. Így lehetővé válik a játékszabály többféle megvalósítása.

1. megoldás

Az első megoldás során adatszerkezet nélkül valósul meg a játékszabály a  KoPapirOlloGyikSpockV1 utódosztályban:

2. megoldás

A második megoldás során a játékszabályt konstansként deklarált MATRIX szomszédsági -, csúcsmátrix, kétdimenziós tömb adatszerkezet tárolja. Ez alapján döntést tud hozni a KoPapirOlloGyikSpockV2 utódosztály.

A játékmenetért felelős vezérlés

10 lépésből álló játékmenetet hoz létre az alábbi vezérlés:

Egyben tesztelés is: igazolja, hogy azonosan működik a két különböző megoldás.

Eredmény

Mivel minden véletlenszerűen alakul a játékban, ezért az alábbi csupán egy a sokféle lehetséges kimenet közül:

A bejegyzéshez tartozó teljes forráskódot – többféle változatban is – ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

A feladat a Java SE szoftverfejlesztő tanfolyam szakmai moduljának 5-8. óra: Vezérlő szerkezetek, 9-12. óra: Metódusok, rekurzió, 13-16- óra: Tömbök, illetve a 17-24. óra: Objektumorientált programozás 1. és 2. rész alkalmaihoz kötődik.

Beszámoló: it-tanfolyam.hu STEM nyári tábor 2023

A STEM mozaikszó eléggé közismert: a tudományos-technológiai tudományágakat (természettudomány, technológia, mérnöki tudomány és matematika) foglalja egybe, interdiszciplináris megközelítésben. A STEM területén való elmélyedés során a hangsúly nem a mit tanulunk/tanítunk, hanem inkább a hogyan tanulunk/tanítunk. Nem azonnal ad kézzel fogható válaszokat, de kitartó próbálkozással – saját élménnyel – elérhető az eredmény.

Az it-tanfolyam.hu oktatói csapata 2023-ban először hirdetett STEM nyári tábort. Erről számolunk be röviden ebben a blog bejegyzésben. Tervezzük, hogy a jövőben rendszeresen fogunk szervezni STEM nyári tábort.

A STEM nyári tábor koncepciója

2023. nyarán 4 turnusban hirdettünk programozás fókuszú STEM nyári tábort:

  • 1. turnus: július 3-7-ig,
  • 2. turnus: július 10-14-ig,
  • 3. turnus: július 17-21-ig,
  • 4. turnus: július 24-28-ig.

Előzetes tudás- és igényfelmérést végeztünk, így alakítottunk ki 3 db csoportot, ezek: Java kezdő, Python kezdő, Python haladó. A kiinduló célcsoportot tanfolyamaink karrierváltó hallgatóinak gyermekei jelentették, akik mellé toboroztunk még. A korosztály a 16-20 éves diákok voltak a 11-14. évfolyamról. A 11-12. évfolyamosok közül sokan informatika, digitális kultúra érettségi előkészítő fakultációra jelentkeztek, jártak, járnak és ebből érettségiznek/érettségiztek. A már korábban érettségizett 13-14. évfolyamosok körülbelül fele az OKJ utód szakmajegyzékhez tartozó szakképzésben tanult.

Mindegyik turnus azonos tematikával valósult meg. Turnusonként 3 db párhuzamos, 10-12 fős csoportokat indítottunk. Voltak közös elméleti programok, szakmai kirándulás, illetve külön-külön Java és Python nyelven megvalósuló gyakorlati programok, valamint projektbemutatóra is sor került. Igyekeztünk érinteni sokféle STEM területet: fizika, kémia, biológia, csillagászat, térinformatika, mesterséges intelligencia, szimuláció, játékprogramok, matematika, orvostudomány; mindegyiket a programozáshoz kapcsolva. Végeztünk tervezést, kódolást, tesztelést is. Belefért némi pályaorientáció is.

A STEM nyári tábor órarendje

Turnusonként 4 oktató kollégával és vendégelőadókkal hétfőtől-péntekig minden nap 8 és 18 óra között biztosítottuk a jelenlétet, felügyeletet. 40 órában szakmai programokat (elmélet+gyakorlat) kínáltunk. Reggelenként és késő délutánonként 1-1 órában offline, egyéni vagy csoportos játékok voltak kipróbálhatók. Ez mindösszesen 50 órát jelentett. Délelőttönként 20, 30 és 60 perces programokat terveztünk, délutánonként 120 és 240 perceseket. Szerdára szakmai kirándulást, gyárlátogatást ütemeztünk be. Íme az órarend áttekintő formában:

Íme az órarend naponként lapozható formában, benne a részletekkel:

Előzetes tapasztalataink

Előzetes tapasztalatainkat több forrásból merítettük, inspirálódtunk:

Köszönetnyilvánítás

Köszönjük résztvevő diákjainknak az aktivitást, a lelkesedést, a sok-sok elgondolkodtató kérdést, az offline kapott/szerzett élményeket, a pozitív visszajelzéseket.

Szeretnék köszönetet mondani együttműködő partnereinknek: LEGO Manufacturing Kft., REGIO Játékkereskedelmi Kft., Revolt Kereskedelmi Kft., Pannon Kincstár Humán Szakképző Központ.

Végül szeretnék köszönetet mondani minden oktató kollégámnak konstruktív részvételüként, kitartásukért a projekt teljes életciklusában. A tervezési, a szponzorszerző, a promóciós és a megvalósítási szakaszokban egyaránt 2023. április elejétől július végéig. Kiemelem korábbi és az aktuális projekthez kötődő tananyagfejlesztési tevékenységüket. A sikeresen lezárt projektünket augusztusban kipihenjük. 😉

Murphy törvénykönyve – görbe tükör IT szemmel

Arthur Bloch népszerű könyvéből gyűjtögettem néhány szösszenetet. Biztosan sokaknak ismerős. A címe: Murphy törvénykönyve, avagy miért romlik el minden? A gondolatokat itt-ott kiegészítettem a programozásra, szoftverfejlesztésre jellemző szemléletmóddal. Ezt a blog bejegyzést április 1-jén tesszük közzé. Nem véletlenül. 🙂 Az alap Murphy-törvényből induljunk ki: „Ami el tud romlani, az el is romlik.” Következzen 13+1 bölcsesség.

„Semmi sem olyan egyszerű, mint amilyennek látszik.” Pláne, ha az ügyfél úgy gondolja, hogy ezt az apróságot bizony 4 perc alatt megoldja egy ügyes fejlesztő.

„Minden több időt vesz igénybe, mint gondolnád.” Ha csak egy paraméter típusát változtatod meg egy metódusban, akkor az biztos, hogy lavinát indít és a forráskódban sok helyen kell módosítanod.

„Ha többféle dolog is elromolhat, biztos, hogy az romlik el közülük, amelyik a legnagyobb kárt okozza.” Elegendő belegondolni abba, hogy egy WordPress-ben lehet bármennyi bővítményed, amik általában gond nélkül frissülnek, de egy apró PHP frissítéstől összedől az egész weboldal.

„Ha rájöttél, hogy egy művelet négyféle módon mondhat csődöt, s mindegyiket kivéded, menten fellép az ötödik.” Hiába készülsz fel minden input adatra, billentyűzet- és egéreseményből adódó problémára. Egy webes űrlap esetén, egy macska mindig átfuthat a billentyűzeten. Teljesen váratlanul.

„Semmit sem lehet a kétbalkezesek ellen bebiztosítani, mert a kétbalkezesek rendkívül találékonyak.” Egy tesztelő mindig tud olyan tesztesetet produkálni, amire senki sem gondolt korábban a tervezésnél, megvalósításnál, dokumentálásnál. Bár egy kicsit sántít ez a gondolat, mert egy tesztelő messze nem kétbalkezes, hanem tudatosan csinálja, amit csinál. Legalábbis remélem.

„Ha javulni látod a dolgokat, akkor valami fölött elsiklottál.” Amikor azt érzed, hogy ez a sprint végre most elkészül határidőre, akkor az utolsó napon, órában, percben tutira borul valami.

„Ha egyszer összekutyulódott valami, a kijavítására tett minden kísérlet csak rontani fog rajta.” Pláne, hogy mindenhol, még a jól megtervezett osztálykönyvtárakban is van legalább egy leggyengébb láncszem.

„Amit ember összerakott, előbb-utóbb szétesik.” Amikor azt gondoljuk, hogy egy jó dátumkezelő funkciót kiválóan megterveztünk, rommá teszteltünk, akkor bezzeg nem 3,9 év múlva jön egy szökőév…

„Egy esemény előfordulásának valószínűsége fordítottan arányos bekövetkezésének kívánatosságával.” Azt kár feltételezni, hogy a jogszabályok, végrehajtási rendeletek ritkán változnak. Pedig gyakran építünk sok-sok funkciót ezekre építve szinte bármilyen szoftverben, webáruházban.

„Nyomás alatt a dolgok tovább rosszabbodnak.” Pedig kipróbáltuk az legkritikusabb adatbázis táblát 1000 db tesztadattal, de arra nem számítottunk, hogy élesben napi 500 rekord kerül bele és ugye előbb-utóbb eljön a havi zárás annyi adattal, amire nem készültünk fel. Ugyanilyen, ha nem skálázható webtárhelyen futó WordPress-re irányítunk intenzív marketingkampánnyal sok-sok látogatót és akkor egyszer csak összeomlik a weboldal a váratlan nagy terhelés alatt.

„Ha n számú alkatrészre van szükség, éppen n-1 van raktáron.” Ez – főleg – akkor (is) igaz, ha egy SCRUM csapatban az alkatrészt kollégának tekintjük. Még szűkebb keresztmetszet, hogy legyen releváns tapasztalata is az aktuális problémához és éppen érjen is rá. És persze ne holnap menjen el a konkurenciához/külföldre dolgozni f+1 fizetésért és ne holnapután üsse el a villamos.

„Legjobban azzal ébreszthetsz magadban új gondolatokat, ha leragasztasz egy levelet.” Korszerűsítve és adaptálva a gondolatot: miután lenyomtad a Deploy gombot egy webalkalmazás aktuális változatának publikálásához, akkor biztosan eszedbe jut, hogy mit kellett volna még beletervezni, fejleszteni a szoftver aktuális verziójába. Nem baj, hamarosan kiadjuk majd a következő frissítést is.

Eddig volt 13 bölcsesség. Azzal akartam zárni, hogy a +1-edik bölcsesség elromlott, hiszen biztosan erre is érvényes a Murphy-törvény, de inkább írok még egyet. Még jó, hogy „Murphy optimista volt”. 🙂 Ez a szerencsénk. Mi lenne velünk, ha pesszimista lett volna? 🙂

Szoftverfejlesztő mémek

IT mémek

IT mémekAz IT kockáknak speciális humorérzéke van. Nekünk külön kategóriákba sorolható mémek készülnek és persze magunk is gyártjuk időnként. Az alábbi összeállítást szabadon keresgélve a weben szedtem össze és csoportosítottam a szoftverfejlesztés, programozás ismert szakterületeihez, folyamataihoz kötődően. Nem fordítottam le angolról magyarra a szövegeket. Aki érti, úgyis érti. Aki nem, úgyis továbbgörget. Enjoy!

Alapelemek, ciklusok

Az algoritmusok alapvető építőelemeivel, egyben a strukturált programozás alapfogalmaival illik tisztában lenni. Ismerni kell ezek működését, egymásba ágyazásának lehetőségeit. Szekvencia, szelekció, iteráció. Időnként döntéseket is hozni kell. Néha úgy érezzük, hogy túl korán, néha pedig későn. Érezzünk rá, mikor jó. Sosem árt lezárni egy-egy blokkot és tudni jól egymásba ágyazni amit kell. Azért a metódusokkal csínján kell bánni.

IT mém 1

Tisztázni kell bizonyos dolgokat

Nem érthetünk mindent és persze nem érthetünk mindenhez. A dolgokat különböző szemüvegen át látjuk, hiszen eltérő tapasztalatokkal rendelkezünk. Persze hasznos, ha egy csoportban értjük egymást, vagy legalább egy valaki tisztában van az ügyfél igényével. J Például a webfejlesztés során el kell fogadni, hogy vannak látványos, azonnali élményt nyújtó változtatások (pl.: design), és hosszú távon megtérülő háttérmunkák (pl.: technológiai SEO).

IT mém 2

Tervezni is tudni kell(ene valakinek)

Azért nem árt a precíz, pontos, konkrét feladatspecifikáció. Mindez akár több szinten is megfogalmazva: fokozatosan közeledve az ügyfél bölcsészmondataitól a kockaságig. Hasznos, ha nem csak a határidő motivál. Nyilván a pénz is. 😉 Érdekek mindig ütköznek, de ezt is meg kell tanulni elfogadni/kezelni. Néha csupán az erősebb kutya esete áll fenn, néha a hatáskörig is megy a történet.

IT mém 3

Ne feledjük: mindenki mást gondol

Mivel a különböző kapcsolódó szakterületeken tevékenykedő szakemberek szókincse eltérő, így ezekből gyakori és tipikus félreértések születhetnek. Ha a fejlesztés hosszabb ideig tart, akkor menet közben is változhatnak – és változnak is 😉 – az igények. Célszerű lenne folyamatokban gondolkodni és feltenni némi empátiával azt a kérdést, hogy igazából mit is akar az ügyfél? Vajon milyen problémát szeretne megoldani, milyen folyamatot tenne könnyebbé a fejlesztendő/karbantartandó szoftverrel? Egy bizonyos szint felett az interdiszciplináris megközelítés elengedhetetlen. Visszacsatolás során kiderül(het), hogy az ügyfél hogyan használja a szoftvert. Lehet, hogy teljesen másképpen, mint ahogyan gondolnánk. Örök bölcsesség: a tervezésre fordított idő később mindig többszörösen megtérül.

IT mém 4

IT mém 5

Módszertanok

Előbb-utóbb eljön az a szint, ahol már a különböző módszertanok is megjelennek. Ezekhez is alkalmazkodni kell. Minden fejben kerül helyre. Ezek többnyire a folyamatokhoz, a napi/heti munka szervezéséhez/ütemezéséhez is kapcsolódnak.

IT mém 6

Amikor már végre kódolunk…

Sokféleképpen mérhető/értékelhető egy fejlesztő munkája. Nyilván nem kilóra, például a megírt forráskód sorainak számával. Persze egy komplex szempontrendszernek lehetnek/vannak kvalitatív és kvantitatív mutatói.

IT mém 7

… kiderül, hogy persze semmi sem könnyű

Sosem az számít, hogy milyen hatások érnek bennünket. Az a fontos, hogyan reagálunk ezekre. Semmi sem könnyű, de természetesen erről is különbözőképpen gondolkodunk. Helyén kell tudni kezelni a dolgokat és akkor minden fenntartható hosszú távon. A programozást elkezdeni sosem késő, vagy másképpen: nem lehet túl korán kezdeni? Mindez nézőpont kérdése.

IT mém 8

A tesztelés sem árt…

Legyünk tisztában a tesztelés alapjaival és folyamatával is. Ha lefuttatjuk még egyszer az összes tesztesetet, azzal biztosan nem rontunk el semmit. 😉

IT mém 9

… ahogyan némi dokumentáció sem

Sokan és sokszor nem szeretünk dokumentálni. Bárki bármit mond és tapasztal, a dokumentálás szükséges és hasznos. Ugye senki sem gondolta, hogy ebből a mém gyűjteményből Chuck Norris kimaradhat? 😉

IT mém 10

Többnyire mindez csoportmunkában zajlik

Tisztában kell lennünk a helyünkkel a csoportban: feladatkör, pozíció, felelősség, szerep, kommunikáció. Három fontos kulcsszó: konfliktuskezelés, időmenedzsment, érdekérvényesítés. És persze a hatékony csoportmunkához szükséges soft skillek is előtérbe kerülnek. Kevesek működnek alapból/ösztönösen jól együtt csoportban, a többségnek ezzel tudatosan foglalkoznia kell. Ne éljünk a tipikus csoportmunka hozzáállással: „megcsináltam”, „elrontottuk”. Ezzel megvolt a kötelező cicás kép, már triplán is. 😉

IT mém 11

Tudni kell tanulni is a programozást

A programozási nyelvek csupán eszközei annak, hogy amit kigondoltunk, megterveztünk, modelleztünk, azt megvalósítsuk és működjön asztali gépen, böngészőben, telefonon. Elveket, koncepciókat is meg kell érteni. Kihagyhatatlanok az alapvető algoritmusok, adatszerkezetek. Meg kell ugrani az objektumorientált paradigmát is. A funkcionális paradigma is egyre népszerűbb. Hasznos, ha a tanulás során el tudjuk fogadni a tapasztaltabbak véleményét, javaslatait. Többnyire elsőre nem alkotunk tökéleteset, de minden hibából tanulunk. Tudomásul kell venni: nincsenek átugorható lépcsőfokok. Egyszerűen kell egy kritikus tömegű önálló gyakorlás és utána jön a sikerélmény.

IT mém 12

Ha elszántad magadat és szoftverfejlesztést/programozást tanulnál Java nyelven, akkor jó helyen jársz. A Jelentkezés lapon követheted, mikor indulnak csoportjaink.