Régóta terveztem már, hogy én is leírom ezekről a gyakran feltett kérdésekről a meglátásaimat, véleményemet, de régebben mindig egy adott tananyag elejéhez fűztem hozzá, először a C++-os tananyaghoz, aztán a programozás gyorstalpalóhoz. Végül úgy döntöttem, hogy inkább legyen erről egy külön blogposzt.
Tartalomjegyzék
- milyen programozási nyelvet érdemes tanulni?
- hogyan kezdjek el programozni?
- elveszi-e a mesterséges intelligencia a programozók munkáját?
- milyen szintű matek kell a programozáshoz?
- milyen hardver ajánlott a programozáshoz?
- elavul a tudás?
Néhány alapvető gondolat, tanács
- jellemzően nem lehet néhány hónap alatt alaposan megtanulni programozni, sok embernek évek kellenek, tehát ne add fel, legyél kitartó
- munka mellett is tanulhatsz
- nem baj, ha apránként tanulsz, de mindig ismételd át a régebbi ismereteket
- akár lehet szükséges de önmagában nem elégséges feltétel, hogy sok pénzt akarsz keresni, a programozást szeretni is kell, illetve ne számíts arra, hogy gyorsan meggazdagszol belőle, a legtöbb embernél (akik annyira azért nem zsenik) ez hosszútávú befektetés, persze elképzelhető, hogy valaha lesz olyan, hogy dől a lé, te pedig hátradőlhetsz (vagy legalább nem kell már olyan erőbedobással tanulni mint az elején), de az is elképzelhető, hogy ez csak soká lesz
- ha az elején úgy érzed, hogy ez nem neked való, később még megszeretheted
- az sem baj, ha csak hobbiból csinálod, lehet, hogy egyszer mégis eljutsz arra a szintre, hogy esetleg ebben dolgozz
- elképzelhető nem fogsz tudni azonnal elhelyezkedni egy alapozó tananyag, vagy egy bootcamp tanfolyam elvégzése után, az én tanácsom: akkor is tanulj tovább
Több tanfolyamot is elvégeztem már, több embert korrepetáltam, néhány gondolat ezzel kapcsolatban:
- sokan elvégeznek egy bootcamp tanfolyamot, de ha nem tudnak vele viszonylag hamar elhelyezkedni, akkor inkább ejtik az egészet
- sok tanfolyamon elmondják, hogy nem elég elvégezni a tanfolyamot, gyakorolni kell, saját projekteket csinálgatni, mármint a tanfolyam közben is meg utána is
- ha valaki nem tud önállóan nekiállni tanulni, akár az is megoldás lehet, hogy elvégez egy másik tanfolyamot is, de mint ahogy lejjebb is majd, itt is ajánlom a HackerRank és hasonló gyakorló oldalakat
- és amit a tanárok többsége nem győz hangoztatni: rengeteg tehetséges ember van, de sok ember egyszerűen nem tart igényt arra, hogy tanuljon
Milyen programozási nyelvet érdemes tanulni?
Szerintem ezek közül valamelyiket:
- webfejlesztés (több nyelvből áll, lásd lejjebb)
- Java
- C#
- Python
- mobilalkalmazás fejlesztés (Kotlin vagy Swift)
A Java és C# főként asztali számítógépes ablakos programok készítéséhez használható (Windows, Linux), illetve OS X illetve MacOS operációs rendszeren a Swift használható ugyanerre.
A Java és a C# előfordul webszervereken is (backend fejlesztő), ezekkel a nyelvekkel is meg lehet valósítani egy honlap vagy egy webapp háttérlogikáját a klasszikus PHP helyett.
A webfejlesztés alapvetően ezekből a nyelvekből áll:
- HTML
- CSS,
- Javascript, Typescript
- PHP
- MySQL
(Igen, a HTML és a CSS nem programozási nyelv, hanem csak leírónyelvek, de ez most nem lényeg).
Esetleg PHP helyett (vagy tudásra vágyóknak mellett):
MySQL helyett vagy mellett:
- NoSQL
Illetve további függvénykönyvtárak, frameworkok, amikből egyet-egyet jó ha tudsz:
/*Webfejlesztéshez tartozó nyelvek, függvénykönyvtárak, keretrendszerek felsorolásának vége*/
Mit érdemes még tanulni?
- git
- Linux
- shell script, esetleg powershell
- DevOps (Docker, Kubernetes, AWS)
Miért ezeket ajánlom?
- Magyarországon (és talán más országokban is) ezekkel a legkönnyebb elhelyezkedni
- ezekből nem feltétlenül kell nagyon profinak lenni, illetve nem kell 5-10 éves tapasztalat az elhelyezkedéshez
- ezekhez van a legtöbb tananyag, segítség az interneten
- ezeket viszonylag könnyű megtanulni más programozási nyelvekhez képest (pl. a C vagy C++ nyelveket sokkal több idő megtanulni)
- ezekhez van a legtöbb más programozók által megírt megoldás alapvető vagy hasznos feladatokhoz (itt az úgynevezett függvénykönyvtárakra, frameworkökre gondolok)
Természetesen nem muszáj ezek közül a nyelvek közül választani. Szinte bármilyen programozási nyelvet meg lehet tanulni, de érdemes a következőkön elgondolkodni:
- milyen hamar szeretnél ebben a szakmában elhelyezkedni (pl. ha fiatal vagy, és akár éveket is tudsz gyakorolni, az teljesen más, mintha munka mellett tanulsz és belátható időn belül szeretnél szakmát váltani)
- mi a célod egy programnyelv megismerésével (pl. szeretnéd-e megérteni alaposabban mi hogyan működik)
- tudsz-e gyorsan tanulni akár nehezen érthető dolgokat, vagy csak apránként tudsz haladni
Vannak, akik arra esküsznek, hogy jobb inkább egy nehezebb programozási nyelvet megtanulni, vannak, akik azt tanácsolják, hogy egy nehezebb programozási nyelvben (pl. C, C++) érdemes megtanulni az alapokat, utána azokkal az alapokkal könnyebb lesz átállni sok más nyelvre. És természetesen olyanok is vannak, akik
Olyat is hallottam már, hogy ha valaki visszamehetne az időben, akkor egy nagyon ritka programozási nyelvet tanulna meg, mert arra biztos van kereslet. Szerintem is jól hangzik, de nem vagyok benne biztos, hogy attól még könnyű bekerülni.
Ez a honlap segítséget nyújthat abban, hogy az egyes programozási szakterületekhez pontosan milyen programozási nyelveket, egyéb dolgokat érdemes megtanulni.
Nem biztos, hogy ezt a tananyagot mindig tudom frissíteni, ha esetleg megváltozna az, hogy milyen programozási nyelvekkel lehet munkát találni. De azt mindenképp tudom ajánlani, hogy érdemes nézegetni az álláshirdetéseket, azokból viszonylag jól le lehet szűrni, hogy mik az elvárások.
Hogyan kezdjek el programozni? Mit tanuljak utána? Hogyan helyezkedjek el?
Először ezeket tanuld meg, úgy, hogy írsz rá példakódokat: alapvető utasítások, változók, elágazások, tömbök, ciklusok, függvények, osztályok/objektumok, (dinamikus) polimorfizmus.
(A webfejlesztésben ezek előtt először a html és a css nyelvet tanuld meg).
Nem árt ha megtanulsz debuggolni, az adott programozási nyelvhez, vagy fejlesztői környezethez (IDE-hez) járj utána, hogy hogyan működik a debugger.
Nem árt, ha megtanulod kezelni a gitet, inkább parancssorban, de elég azután miután már kicsit beleástad magad a programozásba.
Online tananyag autodidakta módon
Hadd reklámozzam be a saját tananyagaimat:
- Programozás kezdőknek, C++, Javascript példákkal
- Webfejlesztés - alapvető tudnivalók
- C++ - első lépések
Amiket még ajánlok:
- Kódbázis (youtube)
- A&K Akadémia (youtube)
- Letscode.hu (youtube)
- freeCodeCamp
- SoloLearn
- CodeSignal
- Tamás Kiss-Vincze (youtube)
- nyelvek.inf.elte.hu
BootCamp tanfolyam
- Ruander
- Prooktatás
- netacademia.hu
- Codecool
- Progmasters
Mit tanuljak a tanfolyam után?
Tanulj algoritmusokat:
- Kódkurzus (youtube)
Tanulj adatbáziskezelést:
- SQL, noSQL, PostgreSQL
Oldj meg gyakorló feladatokat pl. ezeken a honlapokon:
Készíts el ilyesmi alkalmazásokat (jellemzően grafikus felületen, de egyeseket akár parancssorban is el lehet készíteni):
- todo list
- stopperóra, ébresztóóra
- számológép
- naptár
- lottózó
- sudoku
- tic-tac toe
- aknakereső
- snake
Illetve ami sosem árt, bár manapság már gyakran tananyagok része szokott lenni, ezek nagyjából rokon fogalmak:
- clean code, design patterns, coding standard, best practices, core guidelines
A C++ programozós tananyagomban összegyűjtöttem néhány ilyet, ami ide kattintva elérhető, de természetesen vannak benne C++ specifikus témák is.
Hogyan helyezkedj el?
Nézegesd sokat az álláshirdetéseket, nézd, hogy mik az elvárások, próbálj azokra tanulni. Vannak tananyagok állásinterjúra való felkészülésre is, akár azokat is átnézheted (programming interview questions).
A ChatGPT-től, vagy a DeepSeektől is kérdezhetsz, akár leírhatod, hogy mik az elvárások egy munkahelyen, és készítsen neked olyan teszteket, amik felkészítenek téged a bekerüléshez.
- Lokálhoszt (youtube)
- Tomcat videója (youtube)
Elveszi-e a mesterséges intelligencia (AI) a programozók munkáját?
Bár nehéz megmondani mi lesz 5 vagy 10 év múlva, de jelenleg az AI kb egy ankanereső szintű programot tud jól elkészíteni, egyelőre még nem jött el az az idő, amikor egy AI legenerál egy GTA vagy legalább egy Doom szintű játékot.
Azt mondják egyes okos emberek, hogy:
- ha valaki fejleszti a tudását, az programozó marad még az AI mellett is, sőt az AI inkább segíti a munkát, meg lehet kérdezni az AI-tól ha valamit nem értesz, vagy segítséget lehet kérni, ha valahol elakadsz
- ha valaki egyáltalán nem ért a programozáshoz, és AI-al generáltat programokat (úgynevezett Vibe Coding), akkor nagy hátrányt jelent, hogy az illető nem tud belenyúlni a kódba (abból fakadóan, hogy nem ért hozzá), nem ért hozzá, mert AI-al nem tudja teljesen testre szabni a programot úgy, ahogy szeretné, valamint egy ilyen program kódjában könnyen lehetnek hibák, sebezhetőségek, bonyolultabb programok esetén a kód sem lesz szép, illetve nehezebben lesz érthető egy ilyen kód emberek számára
- amíg csak forráskódot generál az AI, addig biztos, hogy kellenek programozók, legfeljebb akkor fog igazán változni a helyzet, ha az AI kész terméket (például futtatható programot) tud majd generálni
Ajánlom ezeket a videókat:
Milyen szintű matek kell a programozáshoz?
Egyrészt ez alapvetően attól függ, hogy valaki milyen területen szeretne programozni (vannak olyan területek, amik nem igényelnek különösebb matektudást).
Másrészt, nem egy programozó van, aki arra esküszik, hogy aki sokat foglalkozott matekkal, annak majd jobban fog menni a programozás. Erről jókat lehet vitatkozni, itt most ebbe nem megyünk bele.
Sok tipikus program egy adatbázisból kérdez le (jelenít meg), módosít, hozzáír, töröl adatokat, amihez biztosan nem kell egyetemi matek.
Szerintem elég tisztában lenni ilyesmikkel:
- mit jelent az, hogy páros vagy páratlan egy szám
- mit jelent a maradékos osztás (más néven egész osztás), pl egy szám akkor páratlan, ha 2-vel osztva 1-et ad maradékul, páros, ha 0-t
- mit jelent az, hogy egész vagy valós egy szám
- műveleti sorrend (pl. ha nincs zárójelezés, akkor a szorzást előbb végezzük el, mint az összeadást)
- mit jelent két vagy több szám átlaga
Néhány példa amik jellemzően nem szükségesek a programozáshoz:
- másodfokú egyenlet megoldóképlete
- legkisebb közös többszörös, legnagyobb közös osztó
- szögfüggvények (sinus, cosinus, tangens)
- függvények ábrázolása koordináta rendszerben
- egyenletek megoldása
- képletek, tételek megtanulása (pl. binomiális tétel)
- geometria (pl. kerület, terület), koordinátageometria
Előfordulnak olyan tanárok, tanfolyamok, akik vagy ahol előszeretettel adnak fel olyan programozási feladatokat, ahol matekfeladatok megoldásait kell egy programmal kiszámítani és kiíratni.
A programozásban sokszor fogunk találkozni a függvény (function) kifejezéssel, de a programozásban a függvény többnyire nem a matematikai függvényeket jelenti, hanem a programon belül egy részfeladatot, alprogramot.
Összességében tehát azt tudnám mondani, hogy középiskolai/gimnáziumi, sőt talán akár általános iskolai matek is elég lehet ahhoz, hogy valaki egy ilyen fent említett tipikus programot vagy egy weblapot elkészítsen, amivel akár már el is lehet helyezkedni, pénzt lehet vele keresni.
Felsőfokú matektudást igényő területek a programozásban:
- Adattudomány (Data Science) - statisztika, valószínűségszámítás, lineáris algebra.
- Algoritmusok, versenyprogramozás - gráfelmélet, kombinatorika, optimalizálás.
- Grafikus programozás, játékfejlesztés - vektorműveletek, 3D transformációk, trigonometria.
- Kriptográfia, információbiztonság - számelmélet, algebra.
- Mesterséges intelligencia, gépi tanulás - matematikai modellek, deriválás, vektorok.
- Szimulációk, fizikai modellek - analízis, numerikus matek.
- satöbbi
Ajánlom ezt a két magyar nyelvű videót is:
- Horváth Gábor - kell-e matek a programozáshoz? (videó)
- Horváth Gábor - matematika a programozásban (videó)
Milyen számítógép/hardver ajánlott a programozáshoz?
A tanuláshoz jellemzően elég lehet akár egy 10 éves számítógép/laptop is.
Erős gép jellemzően akkor szükséges, ha többmillió soros kódot kell fordítani, vagyis ha nagy programokkal dolgozunk.
Ha valaki anyagilag megengedheti, érdemes lehet programozáshoz és a szokásos otthoni tevékenységekhez (pl. képek, filmek, zenék, játék) külön-külön számítógépet/laptopot használni.
Félni kell-e attól, hogy elavul az a tudás, amit megszereztünk?
Ezt sokszor emlegetik a programozás kapcsán, hogy mindig frissíteni kell a tudást, de szerintem ha valaki egyetlen programozási nyelvet is megtanult elég alaposan, akkor sem lesz teljesen elveszve ha akár egy másik nyelvet kell megtanulnia, vagy ha a nyelv, amit megtanult, valamennyire megváltozik.