2012. június 29.

Számítógépes nyelvészet 101: Programozás

Sorozatunk korábbi részeiben áttekintettük hogy milyen matematikai és információtechnológiai alapismeretekkel illene magunkat felvértezni. Most érkeztünk el oda, amit mindenki triviálisnak tart; egy számítógépes nyelvész programozni szokott. Ellenben itt sem olyan egyszerű a helyzet, mint látni fogjuk.

Kimenet Kezdjük ismét a kimenettel! Induljunk ki abból hogy milyen környezetbe kell be illeszkednünk. Nem rég a mathbabe blogon megjelent egy érdekes írás Coding is like being in a band címmel, ami remekül rávilágít arra milyen amikor egy kutató komolyan programozni kezd. A szoftvermérnökség külön szakma, ha olyan szintre szeretnél eljutni mint egy jó programozó, valószínűleg nem sok időd marad másra. Egy számítógépes nyelvész dolga az hogy a programozókat maximálisan ki tudja szolgálni! Ehhez általában prototípusokat ad át, a kollégák rendelkezésére áll és gyakran csodálkozik azon hogy milyen okos emberekkel van körülvéve. Gyakran valamilyen szkript nyelven dolgozunk ki egy prototípust, ezt adjuk át a programozó kollégáknak, akik darabokra szednek minket miközben ötleteinkre alapozva valami nagyot alkotnak.

Mielőtt belebonyolódnánk abba hogy milyen készségeket kell kialakítanunk ahhoz hogy egy team tagjai lehessünk, érdemes elolvasni Peter Naur Programming as Theory Building esszéjét. Ennek alapgondolata az hogy egy szoftver fejlesztése során explicitté tesszük az alkotók tudását (egy adott területre vonatkozóan). Ennél szebben eddig még senki nem írta le ezt a folyamatot. Viszont a mi esetünk speciális!

Tudományos programozás A tudományos kutatás során sincs másról szó mint a tudásunk kódba öntéséről. Ellenben a tudományos programok nem termékek, hanem mankók. Nem általánosítanak, hanem specifikusan adott problémára, vagy problémahalmazra vonatkoznak. Sokszor parancssorból indítjuk a szkripteket és általában ún. batch processing a folyamat. Ez messze van pl. egy Word szövegszerkesztőtől, vagy egy Prezitől. A számítógépes nyelvészeknek azonban itt kell kezdeni!

Kezdő lépések A mai gyerekeknek (és idősebb érdeklődőknek) már nem jelent problémát hogy elinduljanak. Rengeteg jó minőségű, online elérhető, ingyenes tananyag várja a szellemi kalandokra vágyók tömegeit.
  • Codeacademy - érdemes itt kezdeni annak aki még nem programozott. A html és a javascript ismerete alap és egyben hasznos.
  • Udacity - Zseniális kezdeményezés. A bevezető kurzus Python-t használ, hét hét alatt egy saját kereső készítésén keresztül sajátíthatjuk el az alapokat. A haladóbb kurzusok lefedik a programtervezést, az algoritmusokat és még statisztikát is tanulhatunk. Mindezt a Google nagyágyúitól!
  • MIT OpenCoursware - az Introduction to Computer Science and Programming kurzus két verzióban érhető el, Python és Scheme nyelvekre. Habár bevezető, nem ajánlott teljesen kezdőknek.
Hogyan tovább? Mindenki ismer valakit aki huszanhat programozási nyelvben jártas és mindegyiket feltétlenül ajánlja. Biztos vannak ilyen poliglott emberek, de nekünk két nyelvet kell jól ismernünk. A Python és az R bőven elég kezdetnek. Az alábbi posztjainkban már szóltunk erről:
És persze ne felejtsük el az NLTK-t és a hozzá tartozó szabadon hozzáférhető könyvet. Ez az anyag önmagában is leköthet minket egy jó időre. Hozzá csapatjuk még a listához
ezeket a könyveket hogy lássuk miképp illeszkedik a sok elméleti okoskodás az ipari felhasználáshoz. Lássuk be, ekkora leterheltség mellett nem marad idő másra.

Ha tisztességesen megtanuljuk a Python-t és végigmegyünk a fent ajánlott köteteken, akkor egész jó képünk lesz arról hogy az elmélettől miképp jutunk el a megvalósításig. Ne feledjük azonban hogy olvasni nem minden, saját projekteken keresztül lehet a legjobban tanulni.

Az R segítségével képbe kerülünk korpusznyelvészet terén, valamennyire a számítógépes statisztikára is rálátásunk lesz. További motiváló tényező hogy sok gépi tanulással foglalkozó könyvhöz találunk R kódot a neten.

További csábító terület lehet a funkcionális és a logikai programozás. Erre külön posztban fogunk kitérni. Most inkább arra buzdítunk mindenkit hogy álljon ellent! Aki csak most vág bele a szakma elsajátításába, az inkább fektessen hangsúlyt a biztos alapok lefektetésére.

És még ez sem minden Az tudományos programozás közben törekednünk kell jó praktikák kialakítására. Használjunk verziókövetőt, ismerkedjünk meg a különféle programozási metodológiákkal (agile, TDD, stb). A Software Carpentry remek kiindulás pont azoknak akik a tudományos programozás felől közelítenek az iparhoz.

1 megjegyzés:

bpgergo írta...

https://www.coursera.org/course/nlp