Co to je kod, kodovanie a podobne veci.

dalsie clanky o codovani:
 mmx
 sysparm
 datafile

Najprv by som zacal porovnanim diem s klasickym filmom. Film je dlhy pas s obrazkami a zvukovou stopou. Toto sa da prirovnat k obrazkom, hudbe a dalsim datam, ktore vyrobia pre demo grafici a hudobnici. Na to, aby ste si mohli film pozriet, potrebuje premietacie zariadenie. A to je prave to, co robi v pocitaci program, premieta nas "film" na monitor a zvukovu kartu. S tym malym rozdielom, ze filmova premietacka dokaze uz len zobrazit hotove obrazky z filmu, kym program moze s obrazkami rozne narabat, modifikovat ich a upravovat, teda z niekolkych obrazkov mozete vytvorit pomocou roznych matematickych funkcii celu sekvenciu obrazkov. Teraz by som sa pokusil zadefinovat pojem "kod" trochu formalnejsie.

Kod je program, teda postupnost instrukcii mikroprocesora. Kod vznika prelozenim zdrojovych textov pomocou kompilatora. Zdrojovy text vznika tym, ze ho programator (koder) napise v nejakom textovom editore.
Ak ste predoslemu odstavcu prilis nerozumeli, tak sa Vam to pokusim priblizit este trochu jednoduchsie. Programator pise akesi texty, ktore vyzeraju nejak takto:

-------- nahodny utrzok zdrojoveho textu ---------
pic1 = LoadJpeg("1.jpg");
for ( x = 0; x sizex*pic1->sizey; x++ ) {
pic1->picdata[x] = DodgeColor(pic1->picdata[x]); }
-------- nemyslite si, ze takyto kus kodu
              najdete v nasich demach :) ---------

Nase posledne demo WHY si vyziadalo okolo 402 kB zdrojovych textov, co bolo cca. 14000 riadkov. (cize cca. 3500 krat viac, nez ma ta vymyslena ukazka)
Tieto texty su potom pomocou kompilatorov prelozene na instrukcie mikroprocesora. Kompilatory su napriklad Microsoft Visual C++, Watcom C++, NASM, TASM, Turbo Pascal, GCC, DJGPP, atd...
Instrukcie mikroprocesora su vlastne tie prikazy, ktore napisal programator v zdrojovom texte, ale prelozene do reci pocitaca, pretoze keby mal kazdy prikaz prekladat zo zdrojoveho textu az pred jeho vykonanim, tak by to spomalovalo beh programu (a nepotrebovali by ste potom kompilator, ale interpreter), co je riesenie, ktore sa pri demach nezvykne pouzivat.
Este najnovsie sa vela rozprava o jazyku Java. Programy v Jave sa kompiluju do tzv. Java bytecodes, co su sice tiez instrukcie, ale nie instrukcie procesorov typu Pentium. A teda ked si pustite nejaku Java aplikaciu na vasom PC, tak to, ze aplikacia funguje aj na PC zabezpecuje interpreter tychto Java instrukcii. (iba principialne, prakticky existuju pre PC takzvane Java JIT (Just In Time) kompilatory, ktore prelozia Java instrukcie do instrukcii PC procesora). Inymi slovami, z pohladu spustania programu je Java pekny hybrid toho, co je vyssie spominane, ale z pohladu programatora je to programovaci jazyk, ako kazdy iny, jednoducho napisete zdrojovy text, a nechate nejaky Java compilator, nech sa postara o zvysok.
Takze pocitac vlastne vykonava prikazy, ktore mu napise programator.

A ako to suvisi s demami, grafikou, hudbou, atd... ?

Vsetka grafika, hudba, 3D modely a texty su len data. Pocitac vlastne s nimi nedokaze nic robit. Ak si chcete taketo data prezriet, resp. vypocut, tak tu prichadza k slovu program, ktore tieto data nacita, spracuje a posle grafickej, alebo zvukovej karte. Teda demo sa bez programu urobit neda. Pokial mate kresliaci program, ktory vam ponukne vytvorenie EXE suboru s obrazkom, a myslite si, ze tym padom sa vam podarilo zobrazit obrazok bez programu, tak ste na omyle. Totiz ten EXE subor obsahuje okrem vasho obrazku aj vopred pripraveny program, ktory obrazok vykresli. Je sice pravda, ze ste ho nemuseli programovat, ale je tam, a nezbavite sa ho.
Naopak demo bez grafiky a hudby sa urobit DA. Mozete napriklad na obrazovku kreslit nahodne farebne bodky, alebo ratat obrazky pomocou roznych matematickych funkcii.

Pokial sa teda rozhodnete robit dema, tak budete najskor potrebovat nejakeho programatora, alebo sa budete musiet naucit programovat. Programovanie ma velmi vela spolocneho s matematikou, a teda pokial nie ste kamarati s matematikou, tak vam neodporucam si s programovanim nieco zacinat. A pokial sa rozhodnete sa programovaniu venovat, tak ratajte s tym, ze na 95% vas to pohlti ako droga, a programovanie si vyzaduje velmi vela casu, takze je mozne, ze skoncite prave tak, ako mi - ludia, ktori sedia za pocitacom 12 - 16 hodin denne, a na ktorych si ostatny ukazuju tukajuc si prstom na celo. Toto sialenstvo sa vola PROGRAMATOR a lieci sa len velmi problematicky. Pokial Vas zaujem o programovanie trva aj napriek predoslemu varovaniu, tak by ste sa mali najskor poobzerat po nejakych informaciach ohladom architektury a principu fungovania pocitacov, dalej co je to pamet, ako sa v pocitaci ukladaju rozne udaje, ako obrazky a zvuky, (jednoducha odpoved znie "ako cisla", ale kolko tych cisel je, a co znamenaju je niekedy tiez dolezite), a potom si budete musiet zvolit programovaci jazyk, v ktorom sa budete ucit programovat.
Osobne z vlastnej skusenosti by som Vam odporucal zacat s programovacim jazykom LOGO, ktory ma len zopar prikazov a je naozaj jednoduchy. Ked na nejakom takomto jednoduchom programovacom jazyku pochopite, co su to funkcie, parametre, premenne, vstupy a vystupy, co je to algoritmizacia problemu, a naucite sa pouzivat niektore standartne algoritmy a casti programov, ako napriklad rekurzia, cykly, atd., tak potom vam odporucam prejst na programovaci jazyk C++, alebo Javu.

C++ je v dnesnej dobe naozaj standart, a kompilator pre C++ existuje takmer pre kazdy mikroprocesor. Java by sa mala v buducnosti stat velmi silnym nastrojom, pretoze programy v Jave by mali byt spustitelne na roznych typoch pocitacov bez toho, aby ste museli mat specialnu verziu programu pre dany typ pocitaca, ale ja osobne zatial Jave prilis nedoverujem, rozhodne este potrebuje nejaky ten cas, kym bude naozaj standartizovana, a kym program v Jave bude fungovat naozaj takmer vsade.

Este kde tu asi narazite na pojem Assembler. Assembler je subor znakovych ekvivalentov pre samotne instrukcie procesora. Cize je to vlastne nativny programovaci jazyk daneho procesora a preto sa lisi pre kazdy procesor (iny assembler je pre Pentium, iny pre PowerPC, iny pre SGI, Alphu, Sun, atd... takisto jednotlive modely Intelovskej rady 80x86 (386,486,Pentium,...) maju rovnaku len zakladnu sadu instrukcii a s kazdym novym typom je tato instrukcna sada rozsirovana o nove instrukcie (preto program vyuzivajuci specialne instrukcie procesora Pentium sa neda spustit na pocitaci s procesorom 486). Preto ucit sa programovat v assembleri je vacsinou strata casu, pokial neviete presne, ze CO a AKO sa ucit. Na druhej strane skuseny programator v assembleri dokaze vacsinou napisat uspornejsi a rychlejsi kod, ako ten, ktory vygeneruju kompilatory takzvanych vyssich jazykov (ako C++ a pod.). Ale kompilatory vyssich jazykov su coraz dokonalejsie a rozdiel v rychlosti medzi programom napisanym v assembleri a vyssom jazyku sa rapidne zmensuje. Kym koncom 80tych rokov boli programy v assembleri zvycajne 1.5 az 20 krat rychlejsie, nez ich ekvivalenty vo vyssich jazykoch, tak v dnesnej dobe dokazu kompilatory produkovat kod na urovni priemerneho programatora v assembleri, a len skutocny znalci procesora a experti na optimalizaciu dokazu v niektorych specialnych pripadoch dosiahnut aj dvojnasobne zrychlenie pomocou assembleru, ale v priemere su rozdiely 5 - 10% v rychlosti, teda vacsinou zanedbatelne.

Napriek tomu osobne programujem radsej v assembleri, nez vo vyssich programovacich jazykoch, pretoze mi pripada jasnejsi a krajsi, ale takyto nazor ma len velmi malo ludi, takze si radsej zistite sami, ze co vam viac vyhovuje.

Dufam, ze je Vam aspon trochu jasnejsie, ze kto je to programator, a co to znamena, ze programuje.

Ped / 7Gods demo group