2010. március 26.

Számítógépes nyelvészet - bejegyzés tervezet (Segíts ha tudsz!!!!!)

Tervbe vettem hogy egy (vagy két) blogbejegyzést szentelek a számítógépes nyelvészetnek/természetes nyelv feldolgozásnak. Szokásomhoz híven nem hard core programozóknak és számítás tudoroknak szánom az ismertetőket, hanem érdeklődő nyelvészeknek/filoszoknak.

Alapvetően két irányt képzelek el, az egyik a szabály-alapú megközelítés, a másik pedig a valószínűségi irányzat lenne. Tehát prolog és haskell (ezekről viszont már írtam, de nem árt az ismétlés), ill. R és python. Ezekhez van anyagom. Ha a kedves olvasónak is vannak anyagai, olvasott könyvet és ajánlaná, ismer olyan nyilvános honlapot ahol érdekes dolgok vannak stb, kérem szépen lépjen velem kapcsolatba! Egy komment, vagy a honlapomon keresztül megtalál a Facebookon/Twitteren és az e-mail címemet is megtudja.

2010. március 25.

Funkcionális programozás nem-programozóknak (könyvek és honlapok)

A logikai programozás után most a funkcionális paradigma elsajátítására buzdítok mindenkit. Habár nehéz, mindenképpen megéri, különösen a logika iránt érdeklődőknek.

Ha érdekel pontosan mi is az a funkcionális programozás, a wikipedia szócikke remekül összefoglalja miről is szól ez a paradigma. Érdemes megtanulni, az újdonság miatt és nem mellesleg azért is mert egyre több hirdetésben keresnek hozzáértő embereket (legutóbb az Ericsson hirdetését láttam).

Nagyon sok nyelv forog most a köztudatban, pl. Erlang Scala Clojure LISP. Mindegyik nagyon jó, csak nem könnyítik meg a kezdő dolgát. A Haskell egyszerű szintaxisa és remek támogatása ideális a kezdő számára (és persze akár ipari felhasználásra is). Persze az előbb említett nyelvek is szépek és jók, csak szerintem kutya nehezek egy kezdőnek és nincs még sok könyv/oldal ahol megfelelően tálalt információt találhatsz.Két implementációt érdemes figyelembe venni, GHC és Hugs.

Én a GHC-t ajánlom (azon belül is inkább a Haskell Platformot), mivel tkp az az "industry standard". A Hugs viszont pont oktatási célokra készült és a legtöbb könyv/tutorial őt használja. A döntés rajtad áll,  mindegy melyiket választod, az elején nem befolyásolja a munkádat. Dönts, telepíts, és csapj bele a lecsóba!

Említettem a Haskell nagyon jól dokumentált, sok anyagot találhatsz a neten. Érdemes kutakodni és akár az IRC csatornára is felmenni néha. Sajnos egy idő után az ember kinövi az ingyenes anyagokat és a pénztárcájába kell nyúlnia (ha nem akar szerzői jogokat sérteni), de nem szabad abba a hibába esni hogy mindent el akarsz olvasni és mindent be akarsz szerezni. Válaszd ki hogy mi felel meg a te érdeklődésednek és habitusodnak. Ha érdekel egy könyv a Google Books segítségével lapozz bele (vagy az Amazon-on). Többet ér ha egy könyvet végig dolgozol, mintha ötön végigfutsz!

Ingyenesen elérhető anyagok.
Learn You a Haskell for Great Good!
Nem árt egy kis programozási ismeret mielőtt elkezded, de tutira szeretni fogod. Alapos és nem túl lapos összefoglalás.
Real World Haskell
A könyv! Elsőnek nehéz, talán másodiknak is, de jó referencia. Különösen az első négy-öt fejezet ajnálott.
Computational Semantics with Functional Programming
Filoszok és nyelvészek számára kötelező. Programozási ismereteket nem tételez fel az olvasójától, viszont alapvető logikai (nem józan paraszti észre gondolok itt, hanem pl a Ruzsa könyvre) ismereteket viszont igen!
The Haskell School of Music
A cím önmagáért beszél. Paul Hudak a Haskell egyik alkotója nagyon sokat tett a nyelvért és annak oktatásáért. Egyik mániája a multimédia programozás (Lentebb híres könyve). Szerintem nem könnyű olvasmány, viszont érdekes és sokat tanulhatsz belőle.

Hasznos könyvek

The Haskell Road to Logic, Maths and Programming
Nagyon hasonlít a CS with FP-re, a szerzők között is van átfedés. Célja az alapvető logikai érvelés (és a funkcionális programozás alapjainak) megismertetése. Alapvető logikai ismeretekkel bátran belevághat minden filosz és nyelvész meg egyéb bölcsész.
The Haskell Shcool of Expressions
Hudak híres könyve. Kicsit régi, ezért mindenképpen vess egy pillantást a könyv oldalára a neten. A szoftvert nem volt egyszerű telepítenem, de nem lehetetlen (és te biztos ügyesebb vagy nálam). Multimédia programozás felől közelít, de nem könnyű olvasmány ez sem. Nem tételez fel sokat az olvasóról, csak annyit hogy figyelmesen olvas és gondolkodik. Ez bizony sok! Nem szájba rág, hanem gondolkodtat, ami sok könyvről nem mondható el.

Algorithms: A Functional Programming Approach
Nem éppen kezdőknek való olvasmány, viszont ha megvannak az alapok, bátran belevághatsz. Szerintem sokkal érthetőbb a funkcionális paradigma segítségével tanulni ezt a témát mint ezt bonyolítani még objektum orientált cuccokkal...

2010. március 12.

Lehet játék a tanulás - legalábbis a programozás alapjainak elsajátítása

A programozás - legalábbis az én véleményem szerint - ma már nem egy valami különös, távoli szakma, hanem egy lassan de biztosan egy eszköz. Egyre több szakma magas színvonalú művelése követeli meg hogy alapszinten tudjon a szakember programozni. A kezdő lépések megtételében segíthet az Lifelong Kindergarten :: MIT Media Lab által 8-16 évesek számára kifejlesztett Scratch programozási környezet idősebbeknek is.

Ha nincs időd olvasni, akkor röviden: Magyar nyelven is elérhető, ingyenes/szabad szoftver Windows, Mac, Linux rendszerekre. Tutoriálok az oldalon. Könnyű, semmilyen tapasztalatot nem igényel.

Hosszabban pedig elmondom miért tartom jó ötletnek a Scratch-et. Emberközelivé teszi a programozás alapjait és egyben szórakoztató. Olyan mintha megtanulnál elmesélni egy történetet. Vannak szereplők (itt sprite-nak hívják), háttér (a tér amiben a sztori játszódik). A szereplők érintkeznek egymással, ill. a környezetükkel (vagy akár a felhasználóval), ehhez amolyan kapcsolókat kell összebarkácsolni. Ennyi!

Miért nagy szám ez? A közgazdászok, pszichológusok, szociológusok és nyelvészek is egyre jobban támaszkodnak matematikai modellekre, használnak statisztikai csomagokat (SAS, STATA, SPSS, R, Python + SciPy stb) illetve készítenek (vagy jó lenne ha készítenének) vizuális modelleket. Ezek kezelés ha nem is profi progmatos végzettséget követel meg egy minimális programozási ismeretet feltételez. Ha valaki magyar szakon szeretne R-rel kvantitatív lexikográfiai elemzést végezni és azt szép ábrákkal prezentálni egy előadáson vagy egy cikkben, a legjobb ha az R statisztikai nyelvet veszi igénybe. Igen, de aki magyar szakos, annak valószínűleg nem olyan nyilvánvaló hogyan kell programozni. A Scratch viszont meggyorsítja a tanulást! Ha egy HTML - CSS vonalon mozgó Adobe fan szeretne flasht programozni, és gyönyörű grafikákat készíteni, nem kerülheti el az ActionScript-et, vagy akár a Processing-et. Ha nem tud/akar belecsapni a lecsóba, akkor természetes egy olyan dolgot megtanulni ami könnyű és rávezet a következő lépésre.

Akkor hogyan is lehet elkezdeni? Nos a Scratch oldala rengeteg tutorialt tartalmaz. A "Projects" fül alatt pedig szabadon böngészheted mások alkotásait. Le is töltheted, megnézheted mások milyen megoldásokat alkalmaztak. A legjobb ha regisztrálsz és te is megosztod másokkal műveidet. Ha akarsz egy jó könyvet, akkor Bagder: Scratch 1.4: Beginner's Guide könyve a legjobb. Élvezetes, projekt alapú megközelítést használ és nem is olyan hosszú.

Pár napot megér a dolog. Az én első művem a Monty Hall probléma vizualizációja volt, hogy játékosan tesztelhessem tényleg tendenciózusan hibáznak az emberek ebben a helyzetben. Előkerestem, feltöltöttem, beágyaztam (Habár nem javítgattam rajta, kicsit gagyi angollal van, de megmutatni hogy két nap alatt mire lehet jutni megfelel.)  Röviden a problémáról itt a wikipedián, és itt a kísérletről.

Learn more about this project

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.)