C programozás oktatás kezdőknek
Kérdésed van? +36 70 410 1763 info@c-programozas.hu

Gyakorlat teszi a mestert?

Megtanulni programozni nem mindenki számára egyforma nehézségű feladat. Vannak, akiknek könnyen, de vannak, akiknek nagyon nehezen megy. Programozást tanulni nem úgy kell, mint egy történelem leckét, nem lehet lezárni két óra alatt. A programozás elsajátítsa egy hosszú és kemény folyamat, amihez sok gyakorláson át vezet az út.

Saját programozói tapasztalat szerzése

Tapasztalatom szerint a legtöbb diák azonnali sikerélményeket szeretne a programozás tanulás során, ami természetes, hiszen a sikerélmény nagyon fontos, hogy adjon erőt mélyebbre ásni az adott nyelvben és növelje a programozói önbizalmat. Minden esetben javaslom a tanítványaimnak, hogy az órán megoldott feladatokat oldják meg újra önállóan is, majd egy hét múlva ismét, majd két hét múlva megint, egészen addig, amíg saját erőből többször is képesek lesznek megoldani a feladatokat. Ismételni fontos, hiszen még a mondás is úgy tartja, hogy ismétlés a tudás anyja.

Én úgy gondolom, hogy egy programozónak az a legnehezebb feladata, hogy a nagy problémákat leegyszerűsítse, valamint megtalálja azt az utat, hogy az elemi részfeladatokból felépítse a teljes programot. Ezt rutin nélkül nem lehet hatékonyan elvégezni. Rutint pedig magabiztos programozási tudással lehet szerezni, amit pedig kitartó gyakorlással.

„Ismételni unalmas, abban nincs kihívás.
Ezt a feladatot már többször megoldottam.
Adj nekem egy másik feladatot, amin gyakorolhatok.”

Sokszor hallottam ehhez hasonló kifogásokat, pedig ha egy szakmát valaki profi szinten akar űzni, annak gyakorolnia kell. Szinten kell tartania magát. A sikerhez nem kell sok. Elegendő kisebb algoritmusokat vagy példaprogramokat időről időre újraírni, főleg azokat amik gyakran előfordulnak a programozás során. Ezek kialakítják a programozási tapasztalatot és a sikerélmény mellett a magabiztosságot.

Sokan ismétlés és tanulás helyett mintákat keresnek, korábbi megoldásokat bújnak, és ami talán a legrosszabb, a Google keresőt hívják segítségül, és olyan kódokat használnak, amikről fogalmuk sincs, mit jelent, de mivel működik, felhasználják ahelyett, hogy egy kicsit használnák az eszüket. Ezzel a megoldással pont a rutint veszítik el, hiszen nem gondolják át, nem látják át, és sok esetben nem is értik a saját programjuk logikáját.

Egyszerűbb programozási gyakorlatok ismétlése

Az egyszerűbb programozási feladatok gyakorlása elősegíti a programozási gondolkodás elmélyítését, és segít profibbá válni. Ennek élő példáját saját magamon is tapasztaltam. Amikor elkezdtem egyetemistáknak programozást oktatni, akkor ugyanazokat a rutin feladatokat napi szinten minden csoporttal meg kellett oldanom. Rövid idő eltelte után észrevettem, hogy a saját kódom összeszedettebb volt, nem kellett gondolkoznom az elemi feladatrészeken (ciklusok, elágazások, minimumkeresés, rendezés, inputellenőrzés stb.), mert már úgymond rutinból jöttek. Miközben az elemi részeket gépeltem, az agyam már máshol járt. Előre gondolkoztam a programok megírása közben, ezáltal a sebességem gyorsabb lett, a programozási hibáim száma pedig jóval kevesebb.

 Egy tapasztalt programozó is hasonlóan vélekedik:

„Újra és újra megismételed a gyakorlatot, hogy az agyad és ujjaidat megtanítsd, hogyan reagáljanak és mozogjanak. Ahogy gyakorolsz, a mozdulataid, sőt maguk a megoldások is finomodhatnak, és hatékonyabbá válhatnak.”
Robert C. Martin: Túlélőkönyv programozóknak, 6. fejezet

Bob bácsinak teljesen igaza van. Ha még a legnagyobb programozóknak is szükségük van ismétlésre, akkor azoknak meg főleg, akik most ismerkednek a programozással és annak rejtelmeivel. Nem kell órákat fordítani ezekre a készségfejlesztő gyakorlatokra, elegendő csupán napi pár perc ahhoz, hogy megfelelő szinten tartsa a szakmai tudást.

„Amikor nem fizetnek, gyakorolj – azért, hogy aztán jól meg akarjanak fizetni.” 
Robert C. Martin: Túlélőkönyv programozóknak, 6. fejezet

Mi az a programozási Kata?

A Kata a harcművészetekben ismert gyakorlatsorozat. A harcos elképzelt ellenfelekkel harcol, és a gyakorlatok folyamatos ismétlése segít neki memorizálni a helyes mozgást. A programozásban azokat a gyakorló feladatokat nevezzük Katának, amik abban segítenek, hogy a gyakran előforduló programozási problémákat elsajátítsuk.

Nézzünk néhány gyakorló feladatot a programozás tanuláshoz. A megoldás során ügyeljünk arra, hogy a lehető legtisztább és legegyszerűbb kódot készítsük el.

1. KataFizzBuzz

Készítsünk programot, amely kiírja a képernyőre a számokat 1-től 100-ig. Ha a szám 3-mal osztható, akkor azt írjuk helyette, hogy "Fizz", ha 5-tel osztható, akkor pedig azt, hogy "Buzz". Ha 3-mal és 5-tel is osztható a szám, akkor pedig "FizzBuzz"-t.

Nehezített változat: Egy szám akkor "Fizz", ha 3-mal osztható, vagy benne van a 3-as számjegy, és akkor "Buzz", ha 5-tel osztható, vagy benne van az 5-ös számjegy.

2. FooBarQix

Kérjünk be egy számot a szabvány bemenetről 0 és 1000 között. Ha a megadott szám nem megfelelő, akkor jelenítsünk meg egy erre utaló hibaüzenetet, és kérjük újra.
Ha a szám osztható 3-mal, írjunk a szám helyett "Foo"-t.
Ha a szám osztható 5-tel, írjunk a szám helyett "Bar"-t.
Ha a szám osztható 7-tel, írjunk a szám helyett "Qix"-et.
Minden 3, 5, illetve 7 számjegy helyett írjunk "Foo"-t, "Bar"-t, illetve "Qix"-et.

Például:
6 => Foo (osztható 3-mal)
15 => FooBarBar (osztható 3-mal, osztható 5-tel, van benne 5-ös)

Nehezített változat: A nullákat is jelöljük, helyettesítsük őket * karakterrel.
Például:
101 => 1*1
105 => FooBarQix*Bar
10101 => FooQix**

3. KataPotter

Van egy 5 részes könyvsorozat. A kiadó úgy dönt, akciót hirdet. Egy könyv 8 euróba kerül. Ha a sorozat két kötetét veszi meg a vásárló, akkor 5% kedvezményt kap a végösszegből. Ha 3 részét veszi meg, akkor 10%, ha 4-et, akkor 20%, ha mind az 5-öt, akkor pedig 25% kedvezményt kap.

Figyeljünk azonban, hogy ha pl. 4 kötetet vesz, amelyből 2 azonos című, akkor 10% kedvezményt kap a sorozat 3 kötetéből, de a 4. kötetet 8 euróért kapja.

Optimalizáljuk a programot úgy, hogy mindig a lehető legnagyobb kedvezményt adja a vásárlónak.

Ügyeljünk tehát arra is, hogy ha pl. 2-2 példányt vesz az első, második és harmadik kötetből és 1-1 példányt a negyedik és ötödik kötetből, akkor valójában nem az 5 * 8 * 0.75 + 3 *8 * 0.90, hanem a 4 * 8 * 0.8 + 4 * 8 * 0.8 árszámítással jár jól a vásárló.

4. KataRomanCalculator

Adjunk össze két római számot. Ne számokkal, hanem sztringekkel oldjuk meg a feladatot. Pl. XIV+LX=LXXIV.

Szabályok:
Az I, X és C számjegyekből több is állhat egymás mellett pl. I=1 II=2, III=3.
Az I, X és C számjegyek megelőzhetik a V, L és M számjegyeket, ekkor ki kell vonni a kisebbet a nagyobból, pl. IV=4.
Az I, X és C számjegyekből maximum 3 állhat egymás mellett, pl. II+II=IV
A V, L és D számjegyekből maximum 1 lehet egy számban, pl. D+D=M.

5. KataNumbersInWords

Számlákon és szerződésekben a számokat betűkkel is ki kell írni a félreértések elkerülése végett. Írjunk programot, amely a számokat szavakkal leírja, és fordítva.

6. KataAnagram

Írjunk programot egy adott szó összes kétszavas anagrammájának létrehozására.

A feladatok forrása a codingdojo.org, ahol még további érdekes feladatokat találhatsz.

Ha segítségre van szükséged a fenti feladatok C nyelven történő megoldásához, keress bizalommal.
Sok sikert, és jó gyakorlást kívánok!