Programozás kérdések és válaszok

Ennek a cikknek a létrejötte előtti hetekben belecsöppentem egy programozáshoz köthető nemzetközi Facebook-csoport életébe. Sajnos azt tapasztaltam, hogy ott az új tagok először írnak, utána olvasnak: felteszik a kérdéseiket, és nem olvasnak vissza még egy napot sem a csoport történelmében, hogy megtalálják a választ. Így gyakorlatilag naponta jelentek meg ugyanazok a kérdések. Összegyűjtöttem a válaszaimat a rendszeresen felmerült kérdésekre, azaz készítettem egy GYIK-ot, ennek rövidített, magyar változatát olvashatjátok most.

Ha esetleg túl alap információkat osztok meg, akkor örülj, hogy te már kezdőként is többet tudsz, mint annak a csoportnak a hangosabb része. 🙂

0. Miért is GYIK?
A GYIK a GYakran Ismételt Kérdések rövidítése, angolul FAQ, azaz Frequently Asked Questions (ha meg kiejted az angol rövidítést, akkor rájöhetsz, hogy az IT szakemberek mennyire szeretnek egyesével válaszolni az ismétlődő kérdésekre. :-))

1. Mi a programozás?
Kevésszer találkoztam életemben olyannal, hogy valaki ne tudta volna, mi az a programozás, és mit oktat a programozásoktató, de előfordult. Szóval a programozás a programok készítését, és nem a használatát jelenti.

2. Melyik a legjobb programozási nyelv? Melyik a jobb, x vagy y?
Nem létezik “legjobb” programozási nyelv. A programozási nyelvek valamilyen cél elérése érdekében jöttek létre. Anélkül, hogy tudnánk, mire szeretnéd használni, erre a kérdésre nem lehetséges válaszolni.

Hozzátartozik a sztorihoz, hogy akármit is akarsz végül programozni, először programozni kell megtanulnod, amire leginkább egy általános célú, „objektum-orientált” programozási nyelvet javaslok. A Java ilyen, a megtanulásában szívesen segítünk.

3. Mi a legjobb programozási nyelv egy kezdőnek?
A csoportban valószínűleg C és C++ fanok gyűltek össze nagy számban, ezért sokszor javasolták, mint kezdő nyelvet. Ezzel én nem értek egyet. (Mindenkinek megvan a maga véleménye, és azt tolja… :-))
Az analógia nem 100%-os, de jobb nem jutott eszembe: ha C-vel kezded a programozást, az kicsit olyan, mintha autóvezetés tanulása előtt megtanulnád, hogy kell autót szerelni. Kétségtelen, hogy jobban megérted az autó működését, és izgalmas dolgokat tanulhatsz, de – főleg, mivel a nyugati világban gyakorlatilag kézzel nem szervizelhetők az autók – nem sokat érsz vele, nem visz sokkal közelebb az autóvezetéshez. A C programozási nyelv használatához sok olyan részlettel tisztában kell lenni, ami nem szükséges a feladat megoldásához (és sok nyelvben nincs is rá szükség), de itt szükséges, hogy helyes programot tudj írni.
Ha C++-szal kezdesz, az olyan, mintha az autóvezetés tanulását egy Forma-1-es versenyautóval kezdenéd. Szupergyors, szuperjó, de ha nem értesz hozzá, két másodperc alatt felcsavarodsz a fára. Ahhoz, hogy kihozd belőle a lehetőségeket, nagyon kell érteni hozzá. És ahhoz, hogy elég jól érts hozzá, kb. 2-3-szor annyi tanulási idő kell, mint pl. a Javához. (Az “elég jó” alatt nem azt értem, hogy ki tudod íratni, hogy mennyi 2+2 eredménye, hanem ha érted a többszörös öröklést, a virtuális metódus táblákat, a template-eket, ismered az STL-t, az operátorfelüldefiniálás mindkét módját, a memóriakezelést (pointerek, destruktorok…) – bármit is jelentsenek ezek. :-))
Helyette amit javasolni tudok: Java, C# vagy Python.
Innentől még inkább személyes vélemény következik: én a Javat szeretem legjobban. Több, mint 10 éve ismerem, és nagyon jónak tartom abból a szempontból, hogy a fontos koncepciókat nagyon tisztán tálalja. (Ha analógiát szeretnék keresni rá, olyan, mintha egy beszélt nyelvben nem lennének kivételek.) És a TIOBE Index szerint pillanatnyilag (2018. április) Java területen van a legtöbb képzett mérnök, kurzus és ezzel foglalkozó cég (vendor) – kb. háromszor annyi, mint a másik kettő esetében. Megtanulod, és egy háromszor akkora közösség része lehetsz, mint a C# vagy Python megtanulásával.

4. Mennyi ideig tart megtanulni programozni?
Mennyi ideig tart megtanulni gitározni? Mennyi ideig tart megtanulni egy idegen nyelvet? – ahogy az előbbi kérdéseknél is, a programozásnál is az a kérdés, hogy milyen szintre akarsz eljutni? Világhírű gitárművész lennél? – Egy élet is kevés. Tábortűz mellett el akarsz játszani egy-két számot? – Néhány hónap biztosan elég.
A programozás esetében az első néhány óra után már érdekes programokat tudsz majd összerakni, aztán ahogy haladsz előre, úgy tanulsz egyre izgalmasabb és izgalmasabb eszközöket. Egy idő után eljön az a pont, hogy egy cégnél hasznos munkát tudsz végezni. A fejlődés – jó esetben – itt nem áll le, egyre jobb és jobb leszel benne.

5. Tanuljak-e több programozási nyelvet egyszerre?
Elkezdenéd-e egyszerre tanulni a spanyolt és a portugált (ha egyikhez sem értesz)?
Én egyet választanék, aztán ha az elsőben már eljutottam egy „elég jó” szintre, akkor már megvan a gondolkodásmód, és akkor igazából a másik nyelven a különbségeket kell megtanulni.

6. Milyen készségek hasznosak a programozás megtanulásához?

  • olvasni kell tudni (előbb-utóbb angolul is)
  • némi logika
  • kitartás: a problémák megoldásához és a jobb programozóvá váláshoz.
  • türelem, hogy megtaláld a problémák megoldását
  • analitikus képességek: válaszolni arra, hogy “mi az igazi probléma?”
  • internetes információforrások megfelelő használata (Google, Stackoverflow)
  • analógiák megtalálása: ahogy Mark Twain mondta: “A történelem nem ismétli magát, de rímel.” – ez a programozásra is igaz: segít, ha két eltérő helyzet közt meglátod a hasonlóságokat.

Az első kettőt méri a programozási képességfelmérő tesztünk.
A harmadik és negyedik hozzáállás, tehát te döntöd el, hogy milyen vagy benne.
A negyediktől a végéig pedig programozástanulás közben is fejlődő tulajdonságokról van szó.

Persze mindezekben sokat segít, ha olyan tanfolyamot választasz, amiben élvezetes haladni. Ajánlom magunkat. Miért is tanulnál programozást vérrel-verejtékkel, ha élvezetesen is lehet?

7. A HTML programozási nyelv?
Számtalan vicces kép, mém született már arról, amelyben azt taglalják, hogy a HTML (amivel a weboldalakat készítik) nem programozási nyelv. De miért is? A programozási nyelvek egy csomó utasítást tartalmaznak, amelyek “csinálnak valamit”. A HTML adatok szerkezetét írja le, nem végez matematikai számításokat, nincs benne elágazás, feltétel, ciklus, változó, függvény… Ha nem tudod, mik ezek, nem gond, nálunk megtanulhatod, viszonylag gyorsan.

Az igazsághoz hozzátartozik, hogy nem túl rég bebizonyították, hogy a HTML5 + CSS3 mégiscsak az, bár én személy szerint nem sorolnám továbbra sem a programozási nyelvekhez. Jó lesz ő leíró nyelvnek is.

Pasztuhov Dániel