Pasztuhov Dániel

Programozásoktatás

Programozásoktatás

Elakadtál egy problémával... hogyan tovább?

2018. május 04. - Pasztuhov Dániel

Elkezdtél tanulni egy programozási nyelvet, környezetet, és valamit nem sikerül megoldani: a te logikád szerint helyes, de a gép mégsem azt csinálja, amit szeretnél tőle. Vagy kiír valami hibaüzenetet, amit esetleg nem is értesz. Vagy nem is ír ki semmit, mégsem megy a dolog.

Jobb esetben megkérdezed a mentorodat - ha van kit -, de ő sem ér rá mindig, így nem árt, ha van valami a tarsolyodban hasonló helyzetekre is.

  1. Google. (Nahát! ;-)) Írd be a keresőbe, hogy éppen mit szeretnél megtenni vagy mi a hibaüzenet, felsorolva a környezeteket is, pl. “java array arrayindexoutofboundsexception” vagy “reactjs touch drag and drop” esetleg “spring data jpa dao” vagy ilyesmi. Saját tapasztalat, hogy mostanában 2-3 szó is elmegy a környezet megadására, viszont fontos, hiszen nélküle esetleg egy másik környezet megoldását találod meg.
    (Ide tartozik, hogy ha egyszerű kérdést teszel fel mondjuk egy csoportban / fórumon, akkor lehet, hogy LMGTFY választ kapsz, ami a “Let me Google that for you” rövidítése. Van rá weboldal is: LMGTFY. Egyszóval: Jó, ha megvan az alaptudásod az adott témakörben, és csak utána próbálkozol a Google-ben a konkrét kérdésre választ kapni.
  2. Ha már működik a program, és a hiba forrásának helyét keresed:
    1. Tesztkiírásokat tenni a programba, amikor kiírsz valamilyen információt a programról (pl. egy változó értékét) a konzolra (képernyő vagy böngésző console-ja). Az előnye, hogy minden környezetben használható, és gyorsan előállnak az információk, viszont azok köre szűkebb.
    2. Lépésenkénti futtatás. A legtöbb programozási környezet támogatja azt, hogy a programodat lépésről lépésre, soronként hajtsd végre, és minden sor után megállj, megnézni a változók, kifejezések értékét. Az információk köre széles, de a lépésenkénti haladás miatt nem túl gyors.
    3. Oszd meg és uralkodj!. Ez már egy haladó technika, a mérnöki problémamegoldás (egyik) kvintesszenciája. A lényegét hadd mutassam be mondjuk egy házimozi-rendszeren: Tegyük fel, hogy van egy lejátszónk, erősítőnk, hangfalunk, valamint kábelek a lejátszó és erősítő, illetve az erősítő és a hangfal között, és azt tapasztaljuk, hogy bár kép van, hang nincs. Hol lehet a hiba? Valójában bárhol: lehet, hogy a film, amit lejátszanánk, nem tartalmaz hangsávot, a kábelek valamelyike megsérült, az erősítőben romlott el valami, esetleg a hangfal ment tönkre… vagy valamelyik eszköz nincs bekapcsolva.

      Elsőként nézzük meg, hogy az erősítőnél (vagy inkább az erősítő előtti kábel végénél) van-e hang, ami kb. a rendszer felénél van. Ha van hang, akkor tudjuk, hogy a vizsgált pontig minden rendben, a hiba utána, azaz az erősítő, erősítő utáni kábel vagy a hangszóróban keresendő. Ha nincs hang ott sem, akkor az első felében valami gond biztos van (ezzel nem zártuk ki, hogy az erősítő utáni részben gond van-e).
      Menjünk tovább azzal az esettel, hogy az erősítőnél nincs hang. A következő lépés, hogy ezt a részt is megfelezzük: nézzük meg, hogy a lejátszó ad-e ki hangot (mondjuk egy fejhallgatóval). Ha itt sincs, akkor tovább kell haladni visszafelé, ha van, akkor a lejátszó utáni kábelben (vagy az erősítőben – attól függ, hol néztük) keresendő a gond.
      A kérdéses komponenseket mindig megpróbáljuk elfelezni és megnézni, hogy középen mi a helyzet.
  3. Ha nem működik a program és nem érted, miért nem:
    1. Elmész tusolni, alszol rá egyet. Ilyenkor a tudatos elme kikapcsol, és hagyja, hogy a tudatalatti elme megoldja a dolgokat. Ilyenkor jönnek álmunkban a felismerések (Friedrich August Kekulé is így járt a benzol molekula szerkezete kapcsán) vagy esetlen fürdés közben tör ránk a felismerés (az Arkhimédésznek tulajdonított – ám vélhetően hamis – történet szerint a fürdőben jött rá, hogy II. Hierón által rendelt koszorúban hogy lehet megmérni az arany mennyiségét). Egyszóval kapcsolódjunk ki!
    2. Rubber duck debugging.

      Fogj egy gumikacsát! Tedd fel a gépedre, és mintha élő ember lenne, mondd el neki a problémádat. Mire végzel, lehet, hogy megvan a megoldás is. Hogy miért? Az ember hajlamos ugyanazokat a gondolati köröket befutni újra és újra. Ha viszont valaki másnak kell elmondani, akkor az elejéről kezdjük és lépésről lépésre építjük fel, ami közben a gondolkodásunk is új utakra téved. Működik házastárssal, baráttal is!

Ha még csak tájékozódsz a programozástanulás lehetőségeiről, töltsd ki megújult, de továbbra is ingyenes programozási alkalmassági tesztünket! Ha jól sikerül, még ajándékot is kapsz!

A bejegyzés trackback címe:

https://programozasoktatas.blog.hu/api/trackback/id/tr2013889642

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

István Torma 2018.05.07. 07:30:24

Működik kutyával, macskával is! :D

444Hz (törölt) 2018.05.31. 02:03:54

A pite. :)
Ha látta valaki a MiB3-at, tudja, miről beszélek. :)

LalyPapa 2021.10.16. 17:28:37

Elakadtam egy problémával, mégpedig Python:
from datetime import datetime
idobelyeg = 1538797322
datum_ido = datetime.fromtimestamp(idobelyeg)
d = datum_ido.strftime('%-d')
print("A hónap napja =", d)

Erre azt mondja a PyCharm, hogy:
d = datum_ido.strftime('%-d')
ValueError: Invalid format string

Valakinek ötlet, hogy miért érvénytelen formátumú karakterlánc????
Amikor is '%d' nullával kitölti az egy jegyű szám előtti helyet, de én nem így kérném, hanem csak a számot?!
Köszi előre is!
süti beállítások módosítása