2010. március 11.

Logikai programozás nem programozóknak abszolút kezdő szinttől (prolog)

Azok akiknek az alapmotivációja maga a programozás, az informatika szeretete és/vagy a puszta érdeklődés, sokkal könnyebb elsajátítani egy programozási paradigmát. Miért? Nem tudom pontosan, de talán azért mert nekik a kontextus adott, egy új dolog tanulása maga a kontextus. A tanulás pedig már csak ilyen, kontextus függő. De mi legyen azokkal akik máshonnét közelítik meg a dolgot?

Ha ismersz már más paradigmákat (objektum orientált, funkcionális, procedurális meg ki tudja még mi van) akkor is nehéz lehet a logikai programozás, ha nem akkor is. Ez a rossz hír. A jó hogy lehet motivált a tanulási folyamat. A tanulás és a biflázás között az a legnagyobb különbség hogy a puszta "tény bevágás" nincs kontextusban. Történelem órára anno sokat kellett évszámokat, helyeket megjegyezni. Ilyenkor először listát készítettem, kártyát csináltam stb. Hamar rájöttem hogy ezzel nem tudok tuti eredményt elérni. Sokkal fontosabb a folyamatok megértése, ehhez kell a térkép és az évszámok tkp állomások a történetben. A "guru" programozók azért kenik-vágják a sok-sok nyelvet mert egyrészt okosak, másrészt sokat gyakoroltak, harmadrészt van egy sztorijuk amire felfűzik ezt a tudásukat.

A logikai programozás érdekes! Ha érdekel a története a Google a barátod! Megannyi elméleti motiváció ellenére vannak akik szeretnének programozni tanulni, vagy a programozásra mint eszközre tekintenek. Az én utam ebbe a csoportba sorolható. Először az egyetemen kaptam telibe a prolog-ot mesterséges intelligencián (nyelvészeknek, minimális szinten, amolyan olvasunk de nem csináljuk dolog volt ez). Nem ment. Levizsgáztam, kaptam egy ötöst "oszt annyi".  De valami megfogott. Filón már csak a logika érdekelt akkor és ehhez szerettem kapcsolni mindent. Egy kis okoskodással megtaláltam a Learn Prolog Now oldalt. Nem egy hú de eldobom az agyamat oldal. Viszont kezdőknek kiváló! Semmilyen programozási ismeretet nem követel meg az olvasótól. Alapos, szájbarágós és sok feladatot tartalmaz. Egy kis eligazítást is találsz a különféle prolog implementációkról, de én az SWI-Prolog híve vagyok, ha szeretsz azt telepíted :D

Ha megvan az alap, jöhet a móka! Nyelvészek, filozófusok előnyben, de ha csak szimplán érdekel a nyelv, akkor is jó pozícióban vagy. A fenti könyv szerzői jó munkát végeztek és nem hagyták abba. A Natural Language Processing Techniques in Prolog a legalapvetőbb számítógépes nyelvészeti fogalmakat tanítja meg és tovább mélyíti prolog tudásod. Logikai programozás logikai témában! Egyszerre két dolgot tanulhatsz és ez már tényleg érdekes. Ha szereted a logikát és tetszett amit eddig láttál akkor a következő lépés a Computational Semantics c. könyv/oldal (a szerzők majdnem ugyanazok).

Persze ettől még nem leszel "prolog guru", de egész jó alapot ad. És nem bébi problémákon gyakorlatozva, hanem valami hasznosat és érdekeset tanulva sajátítottad el az alapokat. Ha további gyakorlásra van szükséged ez a legjobb, ha nem, akkor jöhetnek a felsőbb stúdiumok! Az én listám a következő (amazon linkek!)
  1. Clocksin - Mellish: Programming in Prolog
  2. Covington - Nute - Vellino: Prolog Programming in Depth
  3. Sterling - Shapiro : The Art of Prolog
  4. Bratko : Prolog Programming for Artificial Intelligence
Az első kettőt érdemes kipróbálni, mindegy melyiket választod kb ugyanazt fedik. A Clocksin - Mellish a tulajdonképpeni standard könyv, amennyire én tudom, a legtöbb helyen ezt használják/ajánlják a tanuló fiataloknak. A második szerintem jobb, inkább van mihez kötni az anyagot. A harmadik nagyobb odafigyelést igényel, de szinte kötelező. Az elméleti oldalt erősíti és ha nem is olvastál mindent a fentiekből, konszolidálja a tudásodat. A negyedik nekem nem jön be, de úgy tűnik rajtam kívül mindenki szereti és érdemes belenézni.

2010. március 6.

Algoritmikus fejvadászat - ha nem vigyázol, rád találnak! Tippek kezdőknek (egy kezdőtől)

Nem tudom itthon mennyire elterjedt hogy nem éppen mesés tudással jelentkeznek emberek programozó állásokra, minden esetre viszonylag régi probléma ez a Lajtától nyugatra ahogy arról egy blog bejegyzés (2007-ből) és annak finomított változata (2010-ből) tanúskodik. A megoldás? Egyrészt az interjú technikák és az előzetes szűrés finomítása. Másrészt a "social coding" elemzése.

Tim O'Reilly-t követve a Twitter-en találtam rá egy érdekes blog postra. A szerző átköltözött Berlinbe és egy projekthez keresett embereket. Szokták mondani hogy egy állás megszerzéséhez bizony ismerősök is kellenek/kellhetnek. Nos gondolom igaz ez fordítva, ha valaki keres egy munkavállalót, jó szétnézni az ismerősök között. De mi van ha nincsenek még nagyon ismerősök? Ha valaki tud programozni, erre is van már megoldás: irány a gitHub! Ha nem ismered az oldalt, a lényege hogy ingyenes repokat (tárolókat) hozhatsz létre projektjeid részére, egyedül azzal a megkötéssel hogy annak tartalma nyilvános. Ehhez értened kell egy kicsit a git verziókövető rendszerhez is (de ez menni fog, ezzel a könyvvel). Nos, szerzőn ötlete az hogy ha valakit sokan követnek, sokan töltik le projektjeit, aktív az oldalon stb, akkor nyilván nem egy rossz programozó. Nem mellékes az sem hogy meg lehet nézni mit kódolt össze az illető. Ha bővebben érdekel a sztori, a legjobb ha elolvasod Charles Arthur, a Guardian tech-kolumnistájának, blog bejegyzését.

Mi ebből a tanulság? Nos ha te is egy olyan önbizalom hiányos kezdő vagy mint én, akkor itt az ideje összeszedni magadat (magunkat). Tanulni kell, programozni kell, akkor is ha unod, a könyöködön jön ki és legszívesebben olvasnál valami nagyon kúúl dolgot (pl Programming the Semantic Web, nálam ez lenne az). Viszont a jó hír hogy tanulás közeben simán nyithatsz egy github accountot. Feltöltheted a saját projektjeidet. Még nincsenek? Sebaj! Tanuld meg használni! Ezzel elsajátítod a git alapjait. Szerintem nem gáz ha "Hello world!" és hasonló bébi dolgok vannak a repodban. Keress érdekes projekteket. Klónozd git-tel, olvasd a forráskódot, próbáld meg módosítani. Ne add fel! Menni fog előbb-utóbb (én is ezt mondom magamnak). Ha nyomod a rails-t, itt az ideje hogy a heroku-n is megmutasd mit csináltál eddig. Nem kell szégyenkezni. Ha nem állítod magadról hogy te programozó vagy, hanem csak azt hogy szeretsz programozni tanulni, vagy csak szeretnél majd programozó lenni, egy ici-pici kis progi is megteszi. Minden jel arra utal, hogy az alapok elsajátítása fontos, ha ezt meg tudod mutatni, nyert ügyed van.

Sok nagyon jó közösségi oldal foglalkozik programozással. Én kettőt emelnék ki. Az első a stackoverflow. Aki tanul, az tud kérdezni! Sokkal inkább kérdéssel kezdődik. Itt rengeteg kérdés találsz, és még több választ. A legjobb ha tudsz olyat kérdezni ami felkelti a többiek érdeklődését. A jó kérdés pontokat ér, növekszik az elismertséged és tanulsz, ha nem adod fel, egy szép napon talán te is válaszolni fogsz egy szende kezdő kérdésére. A javablackbelt tkp egy kvíz oldal. Nem csak Java-ról, hanem jvm-en futó nyelvekről és ruby-ről is. Öveket kapsz, teszteket töltesz ki, és kérdést szerkeszthetsz te is. (Hasonló oldalak találhatók más nyelvekre is egy kis Google használat árán).

Előbb-utóbb jól jöhet neked, ha csatlakozol egy nyílt forráskódú projekthez. Ehhez kell egy kis alaptudás, (habár a Firefox estén ez sem nem kötelező) de hamar bele lehet jönni. Jó kódot olvashatsz, sokat tanulhatsz. Kezdetben nyilván bug report, bug tracking és társai jöhetnek szóba, de szerintem ez nem gáz, valahol mindent el kell kezdeni.

Ha nem két perc alatt akarsz mester lenni, bele kell vágnod. Ezek mellett segíthet egy blog ahol megosztod velünk tapasztalataidat (nem kell irigykedni, egyrészt amit te már meg tudsz írni az a te tudásod, előttünk jársz benne, másrészt neked is érdeket hogy értelmes kollégáid legyünk.), twitter-en kövess érdekes embereket, próbálj meg érdekes dolgokat megosztani (előbb-utóbb lesznek követőid). Viszont egy dolgot jegyezz meg, semmi nem pótolhatja a rendszeres gyakorlást! Az online láthatóság felelősséggel jár, ismered meg önmagad, a tudásodat, ne félj, tanulj és élvezd.

2010. március 5.

Firefox, te is jobbá teheted!

Mindenki kedvenc böngészője, a Firefox :D, egy alapítvány által koordinált nagyrészt önkéntes (és egyben nagyrészt ingyenes) munka eredménye. A legtöbb ember azt hiszi hogy csak programozók járulhatnak hozzá a projekthez. Pedig mindenki tehet valamit. Akár csak annyit hogy Firefox-ot használ, vagy kiéli kreatív hajlamait. Nem kell semmilyen programozási ismeret, csak Te!

A legalapvetőbb dolog, hogy ha probléma adódik, és előjön a párbeszéd ablak, szépen küld el a jelentést. Ha tudsz valami értelemest hozzászólni, írd be a megjegyzésedet (ha nem, akkor is jelents). Ezzel nagyon fontos információhoz jutnak a fejlesztők és ennek eredménye egy jobb böngésző.

Ha ennél is tovább mennél, akkor minden megerőltetés nélkül telepítheted a TestPilot bővítményt. Vegyél részt a különböző tesztekben, töltsd ki a kérdőíveket stb. Fontos hogy olvasd el a "Privacy Policy" azaz az adataid felhasználását taglaló részt. Nem hiszem hogy bármi rosszra használnák az adataidat, de jó tudni hova (USA) és milyen adatok kerülnek. Számomra megnyugtató tudni hogy jó kezekbe, anonimizálva kezelik az adatokat, ha ez sem nyugtat meg, akkor elárulom hogy aggregálva is vannak az adatok (elvileg nem lehet visszavezetni tehát hozzád).

Ha van designer vénád és kedved van egy kicsit alkotni, akkor több lehetőséged is van. Egyrészt a Firefox 3.6 bevezette az ún Persona-kat, melyekkel a böngészőt lehet testre szabni. Próbálj ki néhányat, ha tetszik, készíts egy sajátot és oszd meg másokkal itt. Mi lenne ha tovább mehetnél ennél és újra gondolhatnád magát az egész böngészőt? Megteheted! A MozillaLabs rendszeresen ír ki Design Challenge-et, amin kiélheted álmaidat. Nem kell programozónak lenni, sokkal inkább kreatívnak és persze józan paraszti ész (felhasználó központú gondolkodás) és egy kis HCI/interaction design véna kell és bele is vághatsz.

Nincs mentség, te is tehetsz valamit amitől jobb lehet egy fontos dolog. Kérlek légy aktív és segíts, a lehetőség adott, és nagyon ki ráfordítással sokat is el lehet érni.



2010. március 2.

ScribeFire

Eddig a Drivel-nevű blogszerkesztőt használtam, ami egészjó, most a ScribeFire nevű Firefox kiegészítőre tértem át.

Sokkal jobban tetszik mont a Drivel, mival a böngészőben nyílik meg, annak alsó felét foglalja el. ez lehtővé teszi hogy írás közben böngészhessek és a vágólapra ctr-c-zet url-t pl alapból beilleszti linknek ha linket akarok készíteni. Eddig ez nyert, de még mindíg probléma számomra hogy nem tudom hogyan cimkézhetném fel a bejegyzéseimet. (Ezt pont sikerült megtalálnom a jobb oldalon egy fül alatt, szóval boldogság és öröm ha sikerül publikálnom az oldalt.)