|
![]() |
Goran Paulin , 02. Veljača 2010
Jesmo li ljudi ili programeri?
|
Zašto?Često me pitaju "Kako naučiti programirati?". Ne sjećam se da me itko ikada pitao "Zašto naučiti programirati?" iako bi to, po zdravoj logici, trebalo biti polazno pitanje. Jesu li svi koji odmah skoče na "Kako?" već objasnili sebi "Zašto?" pa požuruju prijeći na stvar? Ako ćemo suditi prema praksi - nisu. Valjda je u evolucijskom ciklusu pojedinaca genetski predisponirano "programiranje" koje čuči u njima dok ne osjete "poziv". I onda, bez filozofskog "Zašto?", jednog dana samo zapitaju - "Kako?". I nastane tišina. No, zahvaljujući školskom sustavu, tišina ne potraje dugo. Već u osnovnoj školi može vam se ukazati odgovor na pitanje "Kako?". Zanimljivo je da ni njih ne zanima "Zašto?". Kad vas sustav uzme u "obradu", očekivat će se od vas da krajem osmogodišnjeg školovanja upravljate kornjačom crtajući linije na papiru. Došli ste do puberteta, "naučili" ste LOGO, a nemate pojma zašto.
I sad vas je već sram pitati. Imate druge probleme u životu, pubertet je prava ratna zona. Ali sustav počinje galamiti! Vrijeme je da se u vaš mozak preslika logika koju je osmislio Niklaus Emil Wirth, osobno. Negdje između materinjeg jezika, matematike i vjeronauka svladali ste i Pascal. Čestitke! Ne samo da znate razliku između "ije" i "je", izračunati napamet drugi korijen i nabrojiti sve goste posljednje večere - znate i razliku između Integera i Reala! Možda ste danas, puno godina kasnije, uvjereni da je potonji isključivo madridski nogometni klub, a integer je definitivno pao u zaborav... kao i Šimun Kananaj.
Naravoučenje: uvijek pitajte "Zašto?"! Dakle - zašto? Zašto naučiti programirati? I perilice programiramo, zar ne?Wikipedia kaže da je programiranje "vještina pomoću koje korisnik stvara i izvršava algoritme koristeći određene programske jezike da bi napravio računalni program". OK. To JE programiranje, ali krajnji cilj koji se u definiciji spominje ("da bi napravio računalni program") daje do znanja da se u definiciji misli na računalno programiranje. O tome i govorimo, naravno. Ali! Što je s perilicom za rublje? Video-recorderom? Mikrovalnom? I njih "programiramo", zar ne? I to, pogotovo perilicu i mikrovalnu, na ništa sofisticiraniji način od preklapanja sklopki u pionirsko doba računala. Nekako nam se proces uvukao pod kožu: vjerojatno jer je komotniji od odlaska do obližnjeg potoka da bi oprali robu ili paljenja vatre kremenom da bi pripremili jelo. Ukratko, programiramo ih iz potrebe. A i, budimo realni, nisu neka mudrost za "programirati". Okrenemo sklopku na željeno mjesto, pokrenemo "program" i stroj će učiniti sve ostalo. Dovoljno je znati koju opciju odabrati za konkretan slučaj. AKO je konkretan slučaj svila, ONDA je konkretna opcija ona za pranje svilene odjeće. Primijetite uvjetovanje.
Video-recorder, odnosno njegovi hi-tech nasljednici, znaju biti bitno složeniji. U praksi, mame su najčešće briljantni programeri perilica i mikrovalnih, ali kad uhvate daljinski u ruke, s namjerom da isprogramiraju snimanje omiljene im sapunice, Murphy se pobrine da nešto krene po zlu i situaciju obično spase potomci (a ne tata, kako bi se ishitreno moglo zaključiti). "Problem" spomenutih uređaja je u tome što kompliciraju postupak. Na raspolaganju su memorije (zahvaljujući kojima uređaj može sapunicu snimati sve dane dok smo na godišnjem odmoru, daleko od civilizacije), uvjeti (početak snimanja nije zadan vremenski nego se oslanja na signal za početak snimanja koji se, u naprednijim zemljama, emitira unutar TV signala - dakle AKO primiš signal, ONDA počni snimati) i još štošta. Ali i to se nekako svlada. Najčešće glasovnom naredbom: "Dragi, snimi mi sapunicu!". OsamdeseteNekoć, ne tako davno, računala su bila jednostavnija. I zvali smo ih "kompjuteri". Nisu prikazivala Flash, nisu multitaskala, nisu imala USB ni ugrađenu kameru... zlobnici bi mogli reći "Bili su poput iPada!". ;) Ali nisu. Bila su prozor u neistraženi svijet njih samih. I nisu nam davala puno izbora: nakon paljenja dočekao bi nas ekran na kojem bi obično pisala verzija BASIC-a i trepčući kursor. Mogli smo satima gledati u njega i čekati da se nešto počne događati. Ali ne bi se počelo događati baš ništa. Ovisila su o nama. Morali smo započeti komunikaciju. Diranje crno-bijelog televizijskog ekrana nije urodilo nikakvim znakovima inteligencije našeg sugovornika pa je sljedeći logičan korak bilo prebiranje po tipkama. Mogli smo natipkati bilo što. Recimo: "ZDRAVO!". I opet se ne bi događalo ništa. Ali prije ili kasnije, pritisnuli bi tipku RETURN/ENTER i tako, ni ne sluteći, započeli protokol Prvog kontakta! Naravno, na naše "ZDRAVO!" računalo bi odgovaralo porukom o grešci, obično nekakvim "syntax errorom". I što god mu kažemo, uzvratio bi istim: "Syntax error". Ideja o inteligenciji našeg sugovornika počela je hlapjeti.
Kažu: upornost se isplati. Uporno upisivanje "ZDRAVO!" i čitanje uvijek iznova iste "Syntax error" poruke i nije neki znak inteligencije. Ovoga puta naše. Sad kad znamo da računalo reagira na podražaje, moguće da postoji "nešto" na što nam neće uzvratiti iritantnim syntax errorom. Vjerojatnoća je bila na strani korisnika s engleskog govornog područja jer bi nerijetko i "HELP" (ali bez uskličnika) rezultirao porukom različitom od "Syntax error". Isto to, ali s uskličnikom, rezultiralo bi još jednim u nizu syntax errora. Već poluishlapljela ideja o inteligenciji sugovornika ponovo je poprimila čvrst oblik! Ono govori! Rezultat vikanja "upomoć" na starom dobrom engleskom, bio bi popis nekakvih riječi: INPUT, PRINT, PEEK, POKE... i bilo je beskonačno zagonetno dokučiti što zapravo taj popis predstavlja. Nije imao nikakvog smisla! A kad ljudima nešto nema smisla, što čine? Ponavljaju. I to obično podignutih obrva i širom otvorenih očiju. Već smo jednom prošli fazu u kojoj bi, nakon što čujemo "ma-ma" i "ta-ta" ponavljali upravo te slogove. Tako smo, malo po malo, spajajući akciju (AKO "ma-ma") i reakciju (ONDA dođe mama) učili jezik. Naoružani tim isksutvom, imamo samo jednu opciju: upisati neku od riječi koje vidimo na ekranu. I pritisnuti RETURN, naravno. "PRINT" zvuči nekako poznato (valjda zato jer smo čuli i za "printer"). Pokušajmo s tim. PRINT. RETURN. Ništa. Baš ništa? OK, kursor se premjestio u novi red, nije se ispisalo "Syntax error"... ali nemamo baš osjećaj da se nešto dogodilo. Ponovimo, za svaki slučaj. PRINT. RETURN. Opet isto. OK. Možemo zaključiti da SVAKI PUT kad upišemo PRINT i pritisnemo RETURN dolazimo u novi red. Nemam pojma što ćemo s tim zaključkom, ali barem možemo reći da smo dokučili obrazac ponašanja. I to je nešto. Ali taj "PRINT" ipak zvuči poznato. Zvuči kao... "piši". Piši što? Hmm... Probajmo ovo: PRINT TEST. RETURN. Opet isto - kursor u novom redu. U trenutku inspiracije poželjeli smo riječ nakon PRINT staviti u navodnike. PRINT "TEST". RETURN. Šok! Nevjerica! Kursor trepće dva reda niže, a povrh njega piše TEST. Ili smo pogodili što moramo napisati ili... što bi bilo da napišemo PRINT "ZDRAVO"? PRINT "ZDRAVO". RETURN. ZDRAVO. Wow! Radi! Kužim! Štogod piše nakon PRINT, u navodnicima, ispisat će se na ekranu! Genijalno! Mama, tata! Programiram! I tako krene. Ljetni prazniciPRINT oduševljenje splasne za nekoliko dana jer, ako malo bolje razmislimo, doista ne služi ničemu. Zašto reći računalu PRINT ZDRAVO, ako možemo napisati samo ZDRAVO, ne pritisnuti RETURN i gledati u to cijeli dan. Efekt je isti. Mda. OK, OK, možemo mi to. Na onom popisu bile su još neke riječi. HELP. ENTER. Pokušajmo... INPUT. RETURN. "Syntax error". OK, navikli smo. Slijedeći logiku PRINT-a, pokušavamo s INPUT "ZDRAVO". RETURN. "Syntax error". Možda bez navodnika? INPUT ZDRAVO. RETURN. Pojavljuje se upitnik! Ali štogod upišemo ponovo rezultira greškom. Veselimo se: nije "Syntax error"! Ovoga puta je "Type mismatch". Koji sad tip i s čim se ne podudara? Nedokučivo. Pokušat ćemo težim putem: nakon INPUT ZDRAVO unosimo sve što nam padne napamet. Izmoreni unošenjem riječi kojima smo iscrpili vlastiti vokabular, prisjetimo se što bi mogao biti smisao svemira i utipkamo: 42. Ha! Nema poruke o grešci. Nema ni povratne informacije, ali barem nije krivo. Što li je onda? Za sad znamo da radi s 42. Radi li s 41? Očekujemo da ne radi, ali... radi! I sa 100? Aha. I sa 1000? Yup. A radi li s milijun? 1000000. RETURN. "Overflow". OK, idemo nekud. Skupljamo različite poruke o greškama i ovo nam je već treća! Tko zna koliko ih ima... Sljedeće dane provodimo pogađajući zašto radi s 1000, ali ne i s milijun. Ima li praktičnijeg načina za to provjeriti nego upisati sve brojeve između 1000 i milijun? Čini nam se da nema pa krećemo od 1000 i hipnotiziramo sami sebe. INPUT TEST. 1001. RETURN. Radi. INPUT TEST. 1002. RETURN. Radi. I tako se smjenjuju godišnja doba. Onda se nađe netko pametan i taman kad smo stigli negdje do 65530 predloži: "Zašto ne promjeniš način traženja? Probaj s pola milijuna pa ako ne radi ni tada, probaj s 250 tisuća pa sa 125 tisuća... i tako prepolovljuj - ako postoji fiksna granica, na ovaj način ćeš najbrže dokučiti gdje je - sjećaš se da smo tako igrali pogađanje brojeva?". K vragu. SAD mi to kaže. Pola sata kasnije uslijedila je spoznaja o granici na 65535. Kud baš 65535? Možemo samo pretpostaviti da taj broj ima neko važno značenje u Kabali.
PRINT i INPUT mogli su biti zabavni cijele jedne ljetne školske praznike, ali većinu nas čekala je ipak nogometna karijera, a ne odgonetavanje ekranskih hijeroglifa. I tako stane. RTFMŠto smo isprogramirali, isprogramirali smo. A nismo isprogramirali ništa. Sve bi bilo puno jednostavnije da nam se dalo prolistati neku od knjižica koja je stigla s kompjuterom. Ako ne njih, onda barem neku od onih koja nam je na materinjem jeziku objašnjavala što nam je činiti - i to još s kvalitetnim primjerima! Meni je bila posebno draga ona s kolegom Pasarićem u mladim danima na naslovnoj stranici. :) U tim knjižicama sve je bilo lijepo objašnjeno. Pisalo je da je računalo u modu za programiranje i da će tamo ostati dok god ne utipkamo RUN i pritisnemo RETURN, nakon čega će se unešeni program pokrenuti i izvršiti. Tamo su napisane i sve NAREDBE koje računalo poznaje te njihova SINTAKSA: način na koji ih moramo pisati da bi ih računalo moglo razumjeti. Tamo je pisalo i sve o VARIJABLAMA u koje možemo privremeno pohraniti svoje podatke. Da smo pročitali samo to poglavlje, znali bi da nakon INPUT možemo, odvojeno razmakom, dopisati naziv varijable te da INPUT ZDRAVO računalo shvaća kao "Pitaj korisnika da unese broj i spremi ga u varijablu ZDRAVO". Pisalo je i da ako dodamo "$" govorimo računalu da varijabla nije numerička nego tekstualnu pa bi tako na INPUT ZDRAVO$ mogli odgovoriti i s "BOK!", a da pritom ne dobijemo poruku o grešci "krivog tipa" (jer kad računalo očekuje broj, ne želi prihvatiti ne-broj). Svašta je tamo pisalo i zato: RTFM! Lakoća odustajanjaKompjuter iz gornjeg primjera vjerojatno je odavno umirovljen na informatičkoj Floridi, u PEEK&POKE-u, a i njegov bivši vlasnik je u međuvremenu vjerojatno okačio kopačke o klin i otvorio kafić. Perilicu i mikrovalnu programira žena, video snimaju djeca i život je ponovo lijep. Ali kakve sve to ima veze s tipičnim Jabučarom? Ima veze utoliko što njemu nije ni na kraj pameti programirati. Sama ideja programiranja Maca graniči s herezom! Maca kupimo, raspakiramo (i pritom doooobro omirišemo!), spojimo na Internet i to je to. Pardon, nije. Moramo izvaditi i malu bijelu naljepnicu iz kutije i zalijepiti je na auto da user experience bude potpun. ;) Slijede godine uživanja u bezbrojnim aplikacijama koje se nude za Maca. Ako, nekim čudom, takva aplikacija ne postoji, nije nam strano prilagoditi se. Diplomirao sam strojarstvo, ali ne mogu koristiti AutoCAD na Macu? Pih. Diplomirat ću i arhitekturu pa ću koristiti ArchiCAD. Zapravo nisam nikad ni želio biti strojar. ;) Pravi Think Different bio bi u skladu s razmišljanjima kućnih programera u osamdesetima: ako ne postoji, napravit ćemo! No, budimo realni, u slučaju jednog AutoCAD-a danas je definitivno jednostavnije završiti i arhitekturu nego u one-man-band modu pokušati napisati AutoCAD za isto to vrijeme. Opciju korištenja AutoCAD-a na Mračnoj strani nećemo ni razmatrati koliko god bila praktična. :) Dakle, ljudi smo, nismo programeri? ZatoZar je moguće da ste baš vi (da, vi!) onaj sretnik ili sretnica čije su softverske potrebe apsolutno zadovoljene? Svi programi koje koristite rade baš onako kako bi radili da ste ih osobno dizajnirali? Ne prilagođavate se softveru, on se prilagođava vama. Proizvođači softvera koji opslužuju milijune korisnika čitaju baš vaše misli i u skladu s njima planiraju roadmap pojedine aplikacije. Binarna idila! Ili nije baš tako? :) Bez obzira za što koristite računalo, vrlo je vjerojatno da povremeno (često?) nailazite na situacije u kojima vam se čini da neki postupak obavljate suboptimalno. Ili, još gore, radite nešto što uopće ne bi trebali raditi - nešto što bi računalo trebalo napraviti UMJESTO vas. Možda se samo igrate. U tom slučaju, vjerojatno ste u pravu - niste i ne morate biti programer. Čak ni u onim rijetkim trenucima kreativne inspiracije kada pomislite da bi mogli osmiliti (ne nužno i napraviti) bolju igru, odoljevate porivu okušati se u tome. "Jer je komplicirano". A kad u World of Warcraft programirate macroe? To vam nije komplicirano? Nije bilo problem naučiti nekoliko naredbi i logiku kojom se koriste? "To je drugo". OK, drugo je, niste programer.
Možda samo radite u Photoshopu. Tamo se i tako većinu toga radi "rukama". Miš, tablet... oko, ruka. Ponekad se neke situacije počnu ponavljati pa si odlučite olakšati posao a actionima. Snimite action, playate action. Ne programirate? OK. Actioni su sjajni, imaju samo jedan bitan nedostatak: linearni su. Nije ih moguće kondicionirati pa tako banalne situacije tipa "ako je slika u landscape modu, odreži je ovako, a ako je u portrait modu, odreži je onako" dovode do toga da ćete morati potražiti neki programčić koji radi baš to. A ako vam treba to u kombinaciji s nekim od actiona? Nema veze, potrpit ćete. Prvo ćete obaviti jedno pa onda drugo. I uopće vas ne zanima da svoj dragi Photoshop možete programirati koristeći AppleScript ili JavaScript, iskoristiti blagodati automatiziranog odlučivanja i prilagoditi workflow svojim potrebama. Ne zanima vas čak ni kad je primjer ilustriran uvijek rado prepričavanom crticom iz života u kojoj se 4 sata "ljudskog" posla zamijenilo s 31 sekundom izvršavanja skripte? OK. Imate višak vremena u životu i iskreno vam zavidim na tome.
Možda ste Office-tip. Excel je vaš glavni alat i veseli vas biti kreativno ograničen kombiniranjem postojećih formula unutar cellova, pišući takve kobasice da pet dana kasnije ni uz najbolju volju ne možete shvatiti kako vaša tablica radi. Ali radi pa je ne dirate. I ne smeta vam što dio posla radite pješke? Iste podatke kopirate s Interneta svaki dan, koristeći kopipejst. Opušta vas? U redu. Ommmmmm.
Možda masterizirate DVD-ove? Svidio vam se DVD Studio Pro, rodila se ljubav na prvi pogled i nikad u životu vam nije zatrebalo skriptanje DVD izbornika jer vaši klijenti su jednostavni ljudi. Ne kompliciraju, ne traže puno, daju vam dovoljno vremena da odradite posao i plaćaju na vrijeme. Zašto onda uopće razmišljati o nečem tako prljavom kao što je programiranje izbornika i to još u programskom jeziku koji je na nivou assemblera! Potpuno ste u pravu. Klijenti vole uniformnost, znati će cijeniti to što svaki sljedeći DVD nalikuje prethodnom. Osim toga, lakše će zapamtiti kako navigirati po izbornicima, a to je važno. Važno je, zar ne?
Možda često browsate kroz AppStore i primjetili ste da je programiranje iPhone aplikacija unosan biznis? Pali vam se lampica da bi mooooožda i vi mogli nešto, ovo, ono...? Vas ćemo preventivno na lomaču, naginjete herezi! A možda na svom Macu zapravo ne radite ništa. Imate ga samo zato jer lijepo izgleda. Respect! :) Sitnim koracimaPretpostavit ću (iako mi je svojevremeno eksplicitno rečeno da ništa ne pretpostavljam) da ste shvatili poantu. Čime god se bavili, dok god to radite s računalom, programiranje vam može samo pomoći. Pritom ne mislim na programiranje tijekom kojeg će (konačno!) nastati AutoCAD za Mac već na programiranje u svrhu rješavanja svakodnevnih problema. Ispravniji (i manje "strašan") termin bila bi "automatizacija". Korištenje Automatora je prvi korak u tom smjeru. Automator je, u teoriji, sjajan alat koji može, u skladu s nazivom, automatizirati puno toga. Ali kad se ALGORITAM "iskomplicira" postaje beskoristan i potrebno je koristiti "nešto" što se može uspješno izboriti s algoritmom na način da računalu objasni što zapravo od njega želite.
I tu počinje programiranje. Algoritam ne mora imati nikakve veze s računalima. I svi se njima bavimo. Svaki dan. Wikipedia za algoritam kaže da je to "konačan slijed dobro definiranih naredbi za ostvarenje zadatka". U vicu u kojem žena pošalje muža programera po maslac i na odlasku doda "ako ima jaja, kupi 10", muž se vratio s 10 maslaca. I nije pogriješio, držao se zadanog algoritma. :) Naš dnevni algoritam, krajnje pojednostavljeno, izgleda ovako nekako:
I funkcionira savršeno do vikenda. Ponekad smetnemo s uma da je neradni dan pa se, na auto-pilotu, nakon ustajanja počnemo baviti radnjama nakon kojih bi uslijedio odlazak na posao. Onda nam se upali lampica da je subota i vratimo se u krevet. Unaprijeđeni algoritam, koji uzima i vikend u obzir mogao bi glasiti:
Razlika je samo u početnom uvjetu kojim provjeravamo da li je vikend. Ako NIJE nastavljamo u sljedećem koraku, a ako JE, preskačemo nekoliko koraka i nastavljamo od kuhanja ručka. Kada ne bismo mogli "preskakati" korake, svaki algoritam bi se ponašao kao actioni u Photoshopu - bio bi linearan, uvijek bi se izvršavao istim slijedom. Zahvaljujući mogućnosti "skakanja", koja sadrži testiranje uvjeta (AKO) i potom definiciju što nam je činiti ako je uvjet zadovoljen (ONDA), možemo svakom algoritmu dati "inteligenciju" - kroz mogućnost odlučivanja. Htjeli ili ne htjeli, u stanju ste algoritmirati (pa čak i AutoCAD, ako se malo potrudite) bez ikakve dodatne obuke. Čini li vas to programerima? Ne čini - ali ste na dobrom putu. :) Kodiranje... ključeva?Svaki računalni program začinje se algoritmom. Bez obzira na kompleksnost budućeg programa algoritam u početku može biti krajnje jednostavan. Potom ga se "usitnjava" dok god se ne iscrpi svaka mogućnost na koju program putem može naići. Nakon što je algoritam gotov i provjereno dovodi do ostvarenja zadatka, moramo ga nekako "ubaciti" u računalo. Mnogi misle da tek tada počinje "programiranje", ali varaju se - "program" je zapravo sadržan u algoritmu, ono što slijedi je pisanje koda - kodiranje. Dovoljno dobar razlog da Apple svoju razvojnu okolinu (za programiranje) nazove Xcode, a ne Xprog. ;)
Kodiranje je zanatski posao. Njime se program (algoritam) prevodi u računalu razumljiv oblik. Kodiranje prestaje biti zanatski posao kada osoba koja kodira zapravo nema razrađen algoritam nego ga namjerava dokučiti "dok tipka". Tada kodiranje postaje izazov. :) Istina, postoje ljudi koji to mogu (John Carmack mi prvi pada na pamet), ali većina programirajući na takav način zapravo "programira" bugove. :) Dok algoritmiranje počiva na (zdravoj) logici, kodiranje počiva na sintaksi i semantici. U prijevodu: ono što napišemo mora biti napisano "gramatički" ispravno (sintaksa) i mora imati smisla (semantika). Primjerice: IN-PUT A ...nije "gramatički" ispravno jer računalo ne poznaje naredbu IN-PUT, već INPUT (bez crtice). I zato nam kaže "Syntax error". Dok je: INPUT A PRINT B ..."gramatički" savršeno ispravno, ali semantički pogrešno ako nam je namjera bila pitati korisnika da unese broj i potom ISTI taj broj ispisati - u gornjem primjeru korisnik unosi broj u varijablu A, a program ispisuje sadržaj varijable B (a trebao bi ispisati sadržaj varijable A). Računalo se ne buni jer je iz njegove perspektive sve u redu - ne tiče ga se semantika. Uredna sintaksa i semantika doveli bi nas do ovoga: INPUT A PRINT A Što i nije neka mudrost. :) Ali vrlo brzo se pretvori u mudrost jer različita sintaksa zapravo znači različite programske jezike, a različiti programski jezici svojom internom logikom diktiraju način implementacije našeg algoritma, odnosno semantiku. I tu ponovo osjetimo poriv baviti se nogometom, a ne programiranjem. Neki počeci su teži od drugihNekad nismo imali puno izbora. Postojala je samo miješana pizza, a sokove smo dijelili na crvene i žute. Računala su imala BASIC i BASIC je bio ono što se učilo i u čemu se programiralo. Danas imamo izbora, ali izabrati nije nimalo jednostavno. Nije jednostavno zato što od trenutka izbora do trenutka spoznaje da suvereno baratate odabranim područjem može proći dosta vremena - vremena provedenog u učenju. A nakon što sve lijepo naučite, može se dogoditi da je to što ste s mukom svladali - upravo izašlo iz upotrebe. :) Učenje programiranja pretpostavlja dvije kompomenente: učenje jezika u kojem ćete programirati i učenje APIja koje ćete prilikom programiranja koristiti. Učenje jezika podrazumijeva i učenje okoline (IDE - Integrated Development Environment) u kojoj ćete programirati. Tek ako imate odgovor na pitanje ZAŠTO bi uopće programirali, moći ćete pristupiti smislenom izboru svega toga. Generalno, 3 su razloga zašto programirati:
Ovo pod (3) odavno izumire (ako već nije izumrlo), a ovo pod (1) i pod (2) je u praksi postalo isključivo: oni koji programiraju za druge i od toga žive, nerijetko ne koriste to što su isprogramirali, a oni koji pišu skripte/aplikacije za vlastite potrebe ne olakšavaju drugima posao (jer su problemi koje rješavaju vrlo specifični) niti na tome zarađuju (poklanjajući skripte, ako su primjenjive širem krugu korisnika). Naravno, uvijek postoje izuzeci. HeretikUnatoč prethodnom zaključku da je spominjanje programiranja na Macu hereza, ta tvrdnja ne može biti dalje od istine. :) Kako drugačije shvatiti činjenicu da nakon što izvadite svoj novi Mac iz kutije i uljučite ga - možete početi programirati? OK, možda ne možete jer ne znate odakle bi krenuli, ali sastavni dijelovi vašeg OS-a su AppleScript i PHP - da spomenemo samo neke. Ako vam ni to nije dovoljno, skinut ćete s Appleovog weba potpuno besplatne Developer Tools i tako instalirati Xcode i sve prateće alate, uključujući Dashcode i Quartz Composer. Xcode će vam omogućiti programiranje u Javi ili u nekom od C jezika i staviti na raspolaganje vrhunske alate za debugging. No, prije nego nakrcate disk s gomilom radnih okolina koje ne bi stigli proučiti (a kamo li koristiti) ni za dva života, dogovorite se sami sa sobom što zapravo želite napraviti. Ako ste se odlučili za programiranje da biste sebi olakšali posao (1), vjerojatno imate na umu skriptanje neke postojeće aplikacije. U tom slučaju postojeća aplikacija diktira dvije stvari: jezik kojim je možete programirati i raspoložive APIje (Application Programming Interface - skup "protokola" koje koristite u programiranju kako bi upravljali s aplikacijom koju programirate). Primjerice, većina Adobeovih aplikacija je programabilna i to koristeći AppleScript, JavaScript i VisualBASIC. Pritom AppleScript radi samo na Macu, VisualBASIC samo na Windowsima, a JavaScript se identično ponaša na obje platforme te je, u ovom slučaju, optimalan izbor - pod uvjetom da vam JavaScript nije stran. Naravno, ako vam je JavaScript nepoznanica, a briljirate u AppleScriptu i ne namjeravate skripte koristiti pod Windowsima - nema razloga da ne koristite AppleScript. Dapače! AppleScript ima jednu veeeeeeliku prednost: njime možete upravljati s većinom aplikacija u vašem Applications folderu te ih povezivati - nakon što riješite banalan zadatak cropanja slike ovisan o njenoj orijentaciji u Photoshopu, vaša skripta može tako obrađenu sliku proslijediti Mailu i poslati na odabrane adrese iz Address Booka, a adrese odabrati pretražujući kriterije unutar jedne od vaših Bento baza.
I za AppleScript i za JavaScript (a i za VisualBASIC) ste vjerojatno već čuli, ali neke egzotičnije aplikacije imaju vlastite skriptualne jezike pa tako, primjerice, Maya ima MEL (Maya Embedded Language), a u novije vrijeme podržava i Python (koji spada među one jezike koji dolaze preinstalirani s Mac OSom). To u teoriji znači da Mayu ne možete uključiti u "globalnu automatizaciju" putem AppleScripta, ali, srećom, praksa je drugačija pa je moguće uspostaviti i komunikaciju između njih uz malo trikova i crne magije. I MEL i Python nisu vezani za Mac platformu pa će skripte pisane u njima raditi i na drugim OS-ovima. Zgodno! Blagodati programiranja za pojedinu aplikaciju (gornji primjeri) su u tome što morate svladati samo jedan jezik i, u većini slučajeva, samo jedan API (te konkretne aplikacije). Ako se pak odlučite programirati tako da svoju aplikaciju krojite od nule, ne koristeći postojeće aplikacije i njihove mogućnosti, slijedi najteži dio: junačka borba s APIjima. Učiti, učiti i samo učitiBorbu s APIjima odlično ilustrira algoritam programiranja za iPhone. :) Zanemarimo li administrativne zavrzlame koje Apple postavlja pred svakog iPhone programera (registracija, plaćanje godišnje licence...), možemo krenuti tako što instaliramo Developer Tools. Developer Tools instalira gomilu svega i svačega pa pomaže kad netko sa strane šapne: "Pssst! Xcode!" da bi znali odakle krenuti. Xcode je Appleov IDE koji se oslanja na brojne alate instalirane u sklopu Developer Toolsa (jedan od vidljivijih je Interface Builder - alat za dizajniranje korisničkog sučelja). Pomaže pročitati (i to barem dvaput!) neko štivo tipa "Xcode Unleashed" (Fritz Anderson) kako bi se upoznali s logikom rada u samom IDE-u. Nakon što se upoznamo s logikom IDE-a, od nas se očekuje da znamo programirati i to koristeći konkretan jezik, odnosno jezike. U slučaju iPhonea to bi bio Objective-C, uz malo "običnog" C-a. Ako se smatramo naprednima i volimo pedantno optimizirati vlastite aplikacije, svakako će nam pomoći i znanje assemblera. :) Ali zadržimo se ipak samo na C-ovima. Objective-C je "superset" (nadogradnja) običnog C-a. Drugim riječima, njega se obično ne uči od nule nego ga se uči tako da se svladaju samo razlike koje donosi u odnosu na C. A C znamo "od ranije". :) Ako ne znamo C, onda programiranje za iPhone nije najpametnija ideja - dok ne svladamo C. Sve opisano samo po sebi zvuči kao gomila posla, truda i utrošenog vremena, ali! Sve je to zapravo lakši dio. I sve navedeno je "reciklabilno" - Xcode, jednom naučen, možemo koristiti i za AppleScript programiranje (daje nam mogućnost izrade korisničkog sučelja, što koristeći ScriptEditor - osnovni alat za AppleScript programiranje - nemamo), a C (odnosno njegov "stil") je osnova mnogih jezika (pa tako i JavaScripta). Ono što nije reciklabilno su APIji. Jedna jednostavna iPhone aplikcija koja nekakve podatke prikazuje tablično može sadržavati bazu podataka, animirane izbornike i poneki zvuk koji pritom čujemo. Svaka od navedene 3 komponente zahtijeva da se upoznamo sa određenim APIjem: za bazu podataka, za animaciju i za zvuk. To, u praksi, znači pročitati dokumentaciju za svakog od njih kako bi spoznali koje metode ti APIji sadrže i kako ih možemo koristiti. APIja ima puno. Dokumentacije još više. I, najgore od svega - stalno se mijenja. :) Jedina dobra vijest je da nakon što shvatite čemu pojedini API služi, u budućnosti možete čitati samo "što je novo" i upute za konkretnu metodu koju planirate pozivati iz svog programa. Na žalost, ako, nakon što programirate animacije, to ne radite godinu dana i onda poželite nastaviti tamo gdje ste stali, shvatit ćete da vas je vrijeme pregazilo i da je pred vama ponovo gomila učenja jer su marljivi Appleovi inženjeri u međuvremenu sve izvrnuli. Ne zato jer nemaju pametnijeg posla već zato što je paleta proizvoda proširena s, recimo, iPadom pa je APIje trebalo prilagoditi tako da odgovaraju i njemu. TO je mučan dio. Jedini mučan dio, usudio bih se reći. :)
S druge strane, nisu ni APIji toliko nereciklabilni koliko se čine na prvi pogled - sve što svladate za iPhone bit će izravno primjenjivo i za iPad, a većinu svladanog možete koristiti u programiranju desktop aplikacija. No, što ako spadate među one programere koji programiraju NA Macu ali ne nužno isključivo ZA Mac? :) Takve možemo zvati Praktičnim programerima jer sama ideja programiranja JEDNE aplikacije koja radi na VIŠE platformi zvuči itekako praktično po pitanju umnožavanja potencijalnih prihoda od prodaje dotične aplikacije. U tom slučaju Xcode vam neće puno pomoći - njegova namjera je "deployment" aplikacije primarno na Appleovim platformama (Mac i ostale iĐiđe). Platformske igreMožda ste sretnik koji ideju više platformi doživljava kroz web pa ciljate na PHP? U tom slučaju nećete imati problema. Ali vjerojatnije je da ste (ne)sretnik koji cilja Windowse ili Linux.
Donedavno je taj problem rješavao samo jedan alat - REALbasic. Zapravo, REALbasic je rješavao još jedan problem - to je jedini (visual) BASIC za Mac. REALbasic je u mnogočemu sličan VisualBASICu (što će mnogi switcheri znati cijeniti), ali njegova ključna prednost je mogućnost deploymenta na Mac, Windows i Linux platformu. U praksi postoje problemi s optimizacijom GUI-a za pojedinu platformu, ali, uz malo više truda, i to je rješivo. Za razliku od svega prethodno nabrojenog: nije besplatan!
A ako vam je GUI presudan (i pomirili ste se s idejom da za komercijalno korištenje razvojne okoline platite licencu)? Onda zapravo imate samo jedno rješenje: Qt. Nokijina akvizicija većinu svojih aduta stavlja na ideju dosljednosti GUI-a neovisno o platformi. I, moram priznati, u tome imaju uspjeha. Na žalost, ako ste prethodno utrošili beskonačno puno sati u svladavanje Objective-C-a, razočarat će vas činjenica da Qt od vas očekuje da programirate u C++. :) O jeziku, rodeNo, nije sve tako crno. Ako ste doista svladali C, a nije vam strana paradigma objektno orijentiranog programiranja (OOP), C++ i/ili Objective-C svladat ćete tako da za par dana pročitate njihove manuale, zasukate rukave i počnete kodirati. Kao i u većini situacija u životu, i ovdje su dobri temelji ključ uspjeha. Programski jezici umiru, rađaju se novi, neki opstaju duže, neki kraći - u idealnom slučaju svladat ćete one koji su očiti kandidati za preživljavanje, kako bi vam novostečeno znanje što duže trajalo. C je i danas, 38 godina nakon nastanka, odličan temelj za "pravo programiranje". Bez obzira što je proceduralan (nije objektan!) utjecao je na oblikovanje većine današnjih "mainstream" jezika (C++, C#, Java, JavaScript, Perl, PHP...) pa je njihovo svladavanje kao učenje španjolskog nakon što prethodno svladate talijanski. :) AppleScript je pak svijet za sebe. Izrastao je iz još egzotičnijeg HyperTalka. Kad svladate AppleScript... svladali ste AppleScript. :) Niti će vam C pomoći u svladavanju AppleScripta niti ćete nakon što svladate AppleScript lakše svladati bilo što drugo. Ako želite u svojim skriptama žonglirati s postojećim aplikacijama na Macu i optimizirati workflow, AppleScript je itekako vrijedan truda, ali ako ciljate na programiranje aplikacije "od nule", definitivno nije sretan izbor. Naravno, najsretniji izbor je naučiti sve nabrojene jezike (i još pritom memorirati cijelu Encyclopediu Britannicu!), ali - život je kratak. Svodi li se izbor na AppleScript ili C? Ne, naravno. Nemoguće je dati univerzalnu preporuku odakle početi jer je to pitanje slično onome "Kojeg Maca kupiti?", a odgovor prvenstveno ovisi o tome kako i za što će se koristiti. To vrijedi i ovdje. Alternativna scenaMožda se niste prepoznali u ničemu od navedenog - vaš san je raditi igre. I to 3D igre. U tom slučaju mogao bih od srca preporučiti Unity (o kojem smo već pisali na Jabučnjaku), a vama da svladate JavaScript, C# ili Boo (da, i to je jezik iako se ne bih kladio da će preživjeti čitavo desetljeće) s kojima se u njemu programira. Osim što ćete moći na najelegantniji način ostvariti svoj san, dobit ćete i nevjerojatno široku paletu raspoloživog deploymenta: od Maca i Windowsa, preko iPhonea do Wiia i Xboxa (uz odgovarajuće licence!).
A ako se samo malo želite "poigrati"? Nemate namjeru učiti APIje, proučavati AppleScript... već ste naučili nešto malo JavaScripta za web i želite to nekako pametno iskoristiti? Probajte Dashcode - Appleov alat za razvoj Dashboard widgeta. Potrebno vam je malo znanja HTML-a, malo znanja JavaScripta i moći ćete zagušiti Dashboard widgetima vlastite proizvodnje! :)
I to vam je "preprljavo"? Vi bi nešto... vizualnije? Onda se probajte poigrati s Quartz Composerom. U njemu definitivno nećete "napisati" novu bazu podataka ili napraviti bilo što ne-vizualno (iako... možete). :) Ako vam se svidjelo Reasonovo "ubadanje kablova" u svrhu spajanja različitih zvučnih komponentni, Quartz Composer bi vas mogao zabaviti. U njemu, koristeći tzv. "patcheve" (komponente), možete spajati "izlaze" i "ulaze" koji zapravo predstavljaju tijek obrade podataka. Prvi patch vam može biti prihvaćanje ulaza s ugrađene kamere, drugi blur efekt, a treći prikaz svega toga na ekranu - rezultat je blurana slika s kamere, prikazana u realnom vremenu. Ljepota novonastalih Quartz "kompozicija" je u tome što ih možete spremiti i proslijediti kolegi programeru koji će ih "ubaciti" (doslovno, drag&drop) u aplikaciju koju izrađuje u Xcode-u i u prozoru će se odvijati ono što ste pripremili za njega. Da bude zabavnije, kolega programer se na vašu kompoziciju može "spojiti" iz aplikacije i kontrolirati pojedine parametre patcheva (ako ste mu to omogućili) - primjerice, količinu blura. Ako vam kolega programer nije pri ruci (a znamo da vlada deficit programera), zabavit će vas i korištenje vlastite kompozicije kao screen savera. A ako vam ni to nije dosta, možete kompoziciju proslijediti kolegi korisniku Final Cuta (tu, srećom, imamo suficit) da je iskoristi kao efekt za generiranje pozadine, tranziciju ili nešto deseto. :)
Mašta je jedina granica. A AppStore je, pokazuje praksa, može obilato nagraditi. DilemaI, nakon svega, što želite biti: čovjek... ili programer? ;) Komentara (54)
![]()
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Novo na JabučnjakuPrijava
VikalicaPoruka primljena: pred 8 sati, 3 min
Moraš biti prijavljen! Prisutni jabučari
Prijavljeni: zabac
Anonimaca: 7 AnketaApple novosti |
0.1459
Ja bi drage volje, samo moram nauciti programirati :D