Mielőtt elkezdesz programozni tanulni, gondold végig, hogy mit akarsz programozni

A programozás leginkább valaminek a felépítéséről szól, és sokkal könnyebb megtalálni a cél felé vezető utat, ha ismered magát a célt. Ha pusztán az a célod, hogy „megtanulj programozni”, anélkül, hogy konkrét elképzelésed lenne, hogy milyen programokat szeretnél írni, és hogy mindez hogyan fogja jobbá tenni az életed, valószínűleg csalódással és idegeskedéssel lesz kikövezve az utad.

Kicsit szégyellem bevallani, de én részben azért akartam informatikát tanulni, hogy ezzel bebizonyítsam, hogy okos vagyok. És hogy olyan munkám lehessen, mint az Okos Embereknek. Nagyon szerettem elméleti és matematikai kérdésekkel foglalkozni (ez a könyv például teljesen levett a lábamról fiatalságom meghatározó éveiben), és a programozás ebbe teljesen beleillett. Persze önmagában ez nem sokáig volt elég — amíg rá nem jöttem hogyan köthetem össze olyan dolgokkal, amik igazán érdekeltek; a zenével és az irodalommal.

És te mire szeretnéd használni a programozást? Weboldalakhoz? Játékokhoz? iPhone appokhoz? Egy startuphoz, amivel meggazdagodsz? Interaktív művészethez? Szeretnél jó benyomást tenni a főnöködre vagy csak szeretnéd automatizálni az unalmas és fárasztó feladataidat, hogy több időt tölthess vidrás képek nézegetésével?  Esetleg csak szeretnél jobb eséllyel indulni a munkaerőpiacon, jól mutatna a programozás az önéletrajzodban, vagy az egyetemi követelményekhez kell? Ezek mind helyénvaló célok. Csak legyél tisztában vele, hogy melyik a tiéd, és ennek tudatában tervezd meg a tanulmányaidat.

Nincs ebben semmi varázslat

A programozás is csak olyan készség, mint a többi. Mint a nyelvtanulásban, itt is meg kell tanulni a nyelvtant és elsajátítani a szókincset. Mint a matematikában, itt is különböző folyamatokat kell alkalmazni a különböző problémák megoldásához. Mint minden kézműves mesterségben vagy művészetben, itt is vannak bizonyos technikák, eszközök és bevált eljárások, amelyeket az emberek már régóta tökéletesítenek bizonyos feladatok elvégzéséhez, és amelyekről eldöntheted, hogy használod-e őket vagy változtatsz rajtuk kicsit, esetleg teljesen figyelmen kívül hagyod őket.

Van egy fickó, aki (egyébként nagyon okos, a többi írását nagyon szeretem, és többnyire egyet is értek velük) azt állítja, hogy éles határvonal húzódik az olyan emberek, akik „igazi programozó elmével” rendelkeznek és mindenki más között. Az utóbbiak nem rendelkeznek a megfelelő szellemi képességekkel, hogy ebben a szakmában boldoguljanak. Szerinte ez az éles mesgye a mutatókban és rekurziókban testesül meg (ezekről itt és itt olvashatnak a kíváncsiabbak).

Én még az iskolában tanultam a mutatókról és a rekurzióról, és amikor sikerült őket megértenem, az elmém szinte ugrándozott örömében — tulajdonképpen pont az ilyen szellemi gyönyörök miatt akartam megtanulni programozni. De az iskolai feladatokon kívül viszonylag kevés olyan alkalom volt eddig az életemben, amikor szükségem lett volna bármelyik fogalomra is ezek közül. És amióta másoknak is segítek a tanulásban, számtalan példát láttam már arra, hogy az emberek izgalmas és élvezetes projekteket készítettek el anélkül, hogy bármelyikről is hallottak volna már.

Semmi értelme azon szorongani, hogy Elég Okos vagy-e. Persze minél összetettebb vagy extrémebb feladatot kell megoldanod, annál nagyobb hozzáértésre lesz szükséged. De ez minden más területen is így van. Ha nem kizárólag a programozásból akarsz megélni, valószínűleg anélkül is meg tudod csinálni, amit meg szeretnél csinálni, hogy rekurzió-szakértő lennél.

Sosem működik elsőre

De általában másodszorra vagy harmadszorra sem

Amikor először vágsz bele a programozásba, nagyon hamar találkozol az élménnyel, hogy azt hiszed, hogy mindent úgy csináltál, ahogy kellett, kétszer átnézted a kódot, és még mindig_nem_működik. Ötleted sincs, hogy honnan kezdd a hibakeresést, és a megjelenő hibaüzenet (ha vagy olyan szerencsés, hogy egyáltalán kapsz ilyet) akár annyi is lehetne, hogy „cseszheted”. Ezen a ponton könnyű feladni, és eluralkodhat rajtad az érzés, hogy soha nem fogsz rájönni a hibára, és egyáltalán nem is neked való ez az egész. Én pont így éreztem, amikor az első C++ programomat írtam: lefuttattam, és a kemény munkával elkészített kódomat a következő szavakkal üdvözölte a C++: „segmentation fault” (szegmentálási hiba).

De ez olyan gyakran előfordul minden rendű és rangú programozóval, hogy semmit se mond az intelligenciádról, műszaki hozzáértésedről vagy a programozói pályára való alkalmasságodról. Tapasztalni fogod kezdőként és gyakorlott programozóként is. Csak az fog változni, ahogyan reagálsz rá.

Azt figyeltem meg, hogy a kezdő és haladó programozók között egy bizonyos hit a legnagyobb különbség: a gyakorlottabb programozók hisznek abban, hogy a dolgok egy logikus és megtalálható hiba miatt nem működnek, hogy a hibákat ki lehet javítani, és hogy létezik megoldás a céljuk elérésére. Nem mindig egyértelmű, hogyan juthatunk el a „nem működik”-től a „működik”-ig, de némi türelemmel többnyire sikerül.

Mindig lesz valaki, aki szerint nem jól csinálod

A kapcsos zárójelet új sorba kell írni. A kapcsos zárójelet ugyanabba a sorba kell írni. A behúzáshoz használj tabulátort. De a tabulátorok gonoszak. Használj tárolt eljárásokat („stored procedures”), de ne használd őket. Mindig írj megjegyzést a kódodhoz. De a jól megírt kódnak nincs szüksége megjegyzésekre.

Egy adott problémának szinte mindig több megoldása van, nincs egyetlen „helyes út”, amit követni kell. Sok programozó nagyon jól meg tudja magyarázni, hogy miért kellene mindenkinek úgy csinálnia, ahogyan ő csinálja, de ettől ez még nem azt jelenti, hogy az az Egyetlen Igaz Út. Szembeszállni azokkal, akik szerint rosszul csinálom, aztán azon gondolkodni, hogy vajon igazuk van-e, nagy stresszforrás volt a karrierem kezdetén.

Ha egy csapattal dolgozol együtt ugyanazon a kódon, akkor szinte biztos lesz valaki, aki beleköt abba, amit csinálsz. Néha persze teljesen igazuk van, és mindig érdemes utánanézni, hogy hátha éppen tényleg Rosszul Csinálod. De néha egyáltalán nincs igazuk, vagy csak egy régebbi, jelentéktelen nézeteltérés tör fel belőlük. Ilyenkor a legjobb megoldás megegyezni egy szerkesztési útmutató („style guide”) használatában, és elfelejteni az egészet.

Persze ha te éppen azok közé tartozol, akik kifejezetten szeretnek régóta tartó, de jelentéktelen kérdésekről vitatkozni (ez nektek szól, nyelvtancsőszök), akkor jó helyen jártok.

Mindig lesz valaki, aki szerint nem vagy igazi programozó

A HTML nem is programozás. Aki nem vi-t használ, nem veszi komolyan a programozást. Az igazi programozók tudnak C-ben is kódolni. Az igazi programozók nem használnak Windows-t. Van, aki sosem fog tudni megtanulni programozni. Inkább ne tanulj meg programozni. Te nem vagy számítógépes programozó (én viszont igen).

A „Programozás” mindenkinek mást jelent, és a szó jelentése az idővel is változik. És kicsit ironikus módon pont azokat az eszközöket, csomagokat és új keretrendszereket illetik a „nem igazi programozóknak való” címkével, amelyekkel egyszerűbben és gyorsabban tudnak a kezdő, sőt haladó programozók is fejleszteni. (Lásd: „Az igazi programozó visszatér”)

Emögött egy olyan félelem áll, hogy ha „akárki” programozónak hívhatja magát, a szó elveszíti az értelmét. De szerintem kifejezetten kártékony ilyen mértékben óvni a szakma tekintélyét.

Használd azokat az eszközöket, amikkel a legkönnyebben fel tudod építeni, amit akarsz. Nincs azzal semmi baj, ha Stencylben vagy GameMakerben készíted el a játékodat. Az is teljesen rendben van, ha a programozás alapjaival a HTML-en vagy az Excel Macros-on keresztül ismerkedsz meg. Azzal dolgozz, amivel úgy érzed hosszútávon is szívesen dolgozol majd.

Ahogy belejössz a programozásba, előbb-utóbb úgyis érezni fogod, hogy ezek az eszközök már inkább korlátoznak, mint segítenek, és el fogsz indulni a haladóbb eszközök irányába. De az esetek többségében nem érdekli az embereket, hogy milyen a kódod vagy milyen eszközöket használtál — csak a végeredmény számít.

Az azon való aggódás, hogy mennyire vagy hiteles „kocka”, tönkre fog tenni

Lásd feljebb. Régen, főleg a suliban, sokat aggódtam amiatt, hogy vajon az öltözködésem, megjelenésem, a könyvek, amiket olvasok, vagy akár a szoftver-beállításaim eléggé megfelelnek-e az „igazi kocka” imázsnak (és így vajon érdemes leszek-e arra, hogy befogadjon a tech közösség). Rengeteg energiát pocsékoltam erre, és miután úgy döntöttem, hogy elengedem a kérdést, sokkal hatékonyabbá váltam.

Ezt mindenképpen jegyezd meg: annak, hogy mennyire illesz bele a különböző „geek” szubkultúrákba, semmi köze nincs ahhoz, hogy mennyire jól tudsz megtanulni programozni. Ez pláne igaz, ha egyébként valahol mélyen már te is tudod magadról, hogy sosem fogsz teljesen beleilleni ezekbe a körökbe. Az energiáidat fektesd inkább az alkotásba. Ha pedig a kockák vitathatatlan etalonja vagy, akkor tartsd ezt észben, amikor valaki más „hitelességét” méregeted. A látszat néha csal.

A kitartás fontosabb, mint a módszer

Dunát lehetne rekeszteni a cikkekkel, amik azt ecsetelik, hogyan „kell” elkezdeni programozni tanulni, és rengeteg különböző megközelítéssel lehet találkozni. Tanulhatsz  könyvből, interaktív feladatokon keresztül vagy mások kódjának kijavításával. És persze számos választási lehetőséged van, hogy melyik programnyelvvel szeretnél kezdeni, és mindegyiknek lesznek támogatói és ellenzői.

Az „önképző” programozó tanfolyamokkal és műhelyekkel általában az a baj, hogy miután vidáman végigszáguldottál az alapokon, a dolgok hirtelen sokkal bonyolultabbá válnak. Azt már tudod, hogyan jeleníts meg pár sornyi szöveget egy oldalon, de ötleted sincs, hogyan foghatnál neki egy „igazi”, hasznos projektnek. Ettől úgy érezheted magad, mint aki eddig csak vakon követte az utasításokat, anélkül, hogy tényleg megértette volna — és persze mindezért a tananyagot fogod okolni.

Ezen a szinten a rendelkezésre álló útmutatók vagy internetes anyagok nagy részével még nem igazán tudsz mit kezdeni, mivel ezek többnyire már valamivel gyakorlottabb programozóknak szólnak. A helyzetet tovább bonyolítja, hogy általában „azt sem tudod, hogy mit nem tudsz”. Ezen a ponton azt sem egyszerű kitalálni, hogy mit lenne érdemes következőnek tanulni.

Ebbe a falba mindenképp bele fogsz ütközni, függetlenül attól, hogy milyen utat választottál a programozás elsajátításához, és csak egy dolog tud rajta átsegíteni: a kitartás. Próbálj ki új dolgokat, gyűjts minél több információt, és találd ki hogyan tudod összerakosgatni a projektedet. Sokkal nagyobb eséllyel jársz sikerrel, ha tisztában vagy azzal, hogy miért akartál megtanulni programozni.

Ha türelmesen rakosgatod egyik téglát a másikra, előbb-utóbb fel fog épülni az a ház. Itt jön képbe az a bizonyos hit, amiről korábban beszéltem. Ha hiszel benne, hogy a kellő türelemmel egy idő után rá fogsz érezni a programozásra, akkor szinte biztos, hogy ez így is lesz.

Az eredeti angol nyelvű cikket itt olvashatod.