Č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.
Zašto?
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.
|
Iako su mi kornjače simpatične, LOGO i ja nismo nikada bili prijatelji. Oduvijek sam se pitao da li bi se Wolfram snašao u njemu...
|
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.
|
Turbo Pascal: ovoga, srećom, nema na Macu. :)
|
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.
|
iPerilice! Samo za hard-core programere. :)
|
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!".
Osamdesete
Nekoć, 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.
|
Ja gledam njega. On gleda mene. Valjda me gleda. Gleda li me?
|
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 praznici
PRINT 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.
|
Mac je bio uskraćen za BASIC. Šteta.
|
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 odustajanja
Kompjuter 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?
Zato
Zar 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.
|
Warrior-programer! Što je sljedeće: Druid-administrator? :)
|
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.
|
Photoshop actioni: tako blizu upotrebljivosti...
|
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.
|
Formule u Excelu - tko ih ne bi volio!
|
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?
|
mov, and... Jump... uh?
|
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 koracima
Pretpostavit ć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.
|
Automator: bezbolan ulazak u svijet programiranja.
|
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:
- ustani iz kreveta
- odi na posao
- radi
- skuhaj ručak
- jedi
- zabavi se
- spavaj
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:
- ako je vikend skoči na 5
- ustani iz kreveta
- odi na posao
- radi
- skuhaj ručak
- jedi
- zabavi se
- spavaj
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. ;)
|
Xcode: uspjeli križanac file browsera i text editora. Ali svejedno u njemu nećete moći programirati u BASIC-u.
|
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 drugih
Nekad 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:
- da bi sebi olakšali posao (pisanje skripte/aplikacije za vlastite potrebe)
- da bi drugima olakšali posao (i, po mogućnosti, pritom zaradili)
- jer vas zabavlja :)
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.
Heretik
Unatoč 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.
|
/Applications/AppleScript/Script Editor - da ga ne promašite.
|
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čiti
Borbu 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. :)
|
Deseci tisuća stranica teksta. Koje se svakodnevno mijenjaju. :/
|
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 igre
Mož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.
|
BASIColjupci, samo za vas!
|
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!
|
Qt Creator. Alternativa Xcode-u. Kjut. :)
|
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, rode
No, 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 scena
Mož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!).
|
Unity: najbolje što se programiranju na Macu moglo dogoditi!
|
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! :)
|
Red HTML-a, red JavaScripta i... widget je spreman! Žličicu Vegete možete izostaviti.
|
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. :)
|
Samo spajam ove "kućice"? Mogu ja to!
|
Mašta je jedina granica. A AppStore je, pokazuje praksa, može obilato nagraditi.
Dilema
I, nakon svega, što želite biti: čovjek... ili programer? ;) |
Komentari
Ja bi drage volje, samo moram nauciti programirati
Sve to do ekstrema dovodi iPhone i App Store koncept. Njihov slogan: "Need a XYZ? There is an App for that..." mnogo govori i nije uopće daleko od istine! Kako je mnogo ljudi inertno po prirodi, naravno da se neće truditi učiti i raditi nešto što je netko već napravio - mada možda postojeća solucija i nije baš jako pametna i elegantna, tj. vi znate bolje! No, znači li to da ljudi sve manje programiraju? Ne bih rekao...
Prošli su pionirski dani programiranja. Danas je drugo doba, druge su potrebe i tehnike programiranja. Upravo mislim da je iPhone/iPad sjajan generator interesa da se mnogi vrate - ili započnu programiranje. Platforma je zatvorena i jasnih pravila (ponekad ograničava, ali je lakše raditi softver za takve strojeve) i nagrada za ostvarenu zamisao je velika! Ne! Tu ne mislim na novac koji se može zaraditi prodajom aplikacija na App Storeu, već na onu najveću nagradu - osjećaj zadovoljstva i ponosa kada nešto uspješno isprogramirate, kada izvadite svoj iPhone iz džepa i pokažete prijatelju kako mu vaša aplikacija može olakšati život.
Znam koliko sam se veselio vlastitim umotvorinama još na ZX Spectrumu i Atariju ST, a tek osjećaj kada kao mulac pobjedite na kakvom natjecanju! Danas "mulci" razbijaju programerske barijere, svako toliko čitamo koliko godina ima "najmlađi programer", a programiranje više nije opskurni taboo zahvaljujući modernim alatima. Nekada se one-man-program iranje uglavnom svodilo na Basic i sado-mazo alate kao što su npr. bili DEVS i MONS - tko je imao petlje pisati u strojnom kodu. Mene je vrijeme pregazilo, zadnje što sam isprogramirao su bile neke komplicirane Starcraft mape, a Warcraft makroe neću računati kao išta vrijedno hvale.
No, i dan danas se naježim kada vidim nešto dobro isprogramirano! Tu ne mislim na Adobijeve mamutske alate, pa čak niti na OS X ili fantastične iPhone aplikacije - mislim prije svega na lude Ruse i Skandinavce koji kodiraju nevjerojatne demoe u 64KB (da, samo 64 kilobajta) i slične čarobnjake strojnog koda i optimizacija. Njima kapa dolje!
Jednog dana vjerojatno će računala i sama programirati druga računala, a mi moramo paziti da se ne ulijenimo - jer bi nam se moglo dogoditi da izgubimo kontrolu...
Nadam se da će nekome ovaj grafikon biti zanimljiv - tek toliko da se vidi kakvu je pomutnju iPhone napravio u svijetu programiranja:
http://www.tiobe.com/index.php/paperinfo/tpci/Objective-C.html
Igor
A AutoCAD je nekad postojao, za Mac OS 9. Ako se ne varam, bilo je to u vrijeme R12, ili R13 možda. Sjećam se toga pouzdano, jer mi je manual bio pun napomena tipa "korisnici AutoCAD-a za Mac ovu funkciju ne mogu koristiti / ne trebaju / ...".
Nažalost, odlučili su ne razvijati verziju za OS X. Ali predomišljaju se u zadnje vrijeme...
Inače, ja se mogu pohvaliti da još nisam skroz zahrđao. Osim Visual Basic for Applications (mahom za MS Access, nešto manje za MS Excel), radim i u nečem tako egzotičnom da ga se čak ni Đipi nije sjetio: AutoLISP! Na Macu baš i nemam potrebe programirati, ali tko zna, možda se i to promijeni...
al je svejedno super!
osim onog dijela "vjerojatnoća" kosa mi se digla na glavi hahaha
Povremeno odradim poslić u asembleru i C-u za mikrokontrolere .
Ne može se opisati gušt kad nešto napišeš od nule, bez pomoći OS-a, BIOS-a, raznih dll-ova, librarya i slično, nego i npr. najosnovniju obradu tipkovnice moraš sam napisati, detektirati što je pritisnuto, ispisati na display svojom rutinom, a ne nekim gotovim print, printf, writeln i slično...
Naravno, kad se projekti zaredaju i postanu složeniji, onda ti guštevi polako nestanu i sve počne biti rutina, pa se skoro sve rješava gotovim rutinama iz raznih librarya, inače ne bi bilo novaca od toga.
Uglavnom, s guštom sam pročitao članak
I sam sam poceo programirati, samo da ubrzam dosadne stvari, ali automator brzo dosadi; applescript nisam ni takao. Knjigu iz C-a sam kupio ali trenutacno skuplja prasinu. Unix shell i Perl rulz!!!
Naklon!
Inače, i meni je ASM uvijek bio najdraži. Svoj sam diplomski rad (adaptivni fuzzy algoritam upravljanja elektromotorom) napisao u MC68030 asm-u, a par godina kasnije sam i neke puno krupnije stvari upravljao kontrolerima na istom procesoru.
Nažalost, aplikacije za "normalna" računala odavno se više ne može (tj. ne isplati) pisati u asm-u...
Moj "OPL Corner"
http://edo-vucurovic.blogspot.com/
EPOC32 OPL (Psion Revo, 5mx, netBook)
http://viewplus.myfreeforum.org/
S80 OPL (Nokia 9300,9500)
http://tech.groups.yahoo.com/group/FileNote/
Pozdrav iz Splita,
Edo
@Smayoo&Windows7: Potpisujem sklonost assembleru, i meni je bio favorit, pogotovo u vrijeme MC680x0.
@Djuro genijalac: "Još ako znaš sve o čemu pišeš" - a čuj, naletio sam na to na gugletu pa rekoh: da prepričam.
Većina ljudi misli da se samo "standardna" računala programiraju, međutim vrlo složeni programi se mogu napraviti čak i za čip od 6 noži ca (ima seriju takvih PIC-eva).
Ovo je razvojni alat kakvog koristim u poslu:
http://www.mikroe.com/en/tools/easyavr5a/ ,
nadam se da će nekoga zainteresirati za programiranje "računala na čipu". Sam čip košta za jednostavne namjene 10-50 kn, a čuda se mogu napraviti.
Ja sam hardveraš u duši
Osim toga, ne smatram najsretnijim pristupom ni učiti u školi (osnovna, srednja) teoriju programiranja na "apstraktnom" nivou. Mi smo u srednjoj "programirali" na papiru: profesorica bi zadavala zadatke, a rješenja (programe) smo pisali u bilježnici (interpreteri/k ompajleri su nam bili vlastiti mozgovi). I nikad mi nije bilo jasno kakve koristi ima učenik koji tom metodom svlada... bubble sort. OK, svladao je jednu apstrakciju, može se posvetiti sljedećoj (dešifriranje hijeroglifa?), svakako će, na neki način, pomoći "razvoju mozga". Ali, pobogu... kome je to zabavno? Ne bi li bilo praktičnije već u školi, čak i kada se radi o programiranju (a ne "informatici", kao širem pojmu) podučavati "primjenjeno programiranje"? Pa onda svaki novi "apstraktni algoritam" (onaj za sortiranje, onaj za traženje najkraćeg puta...) bude zapravo vrlo konkretan odgovor na učenička pitanja kako riješiti pojedini problem koji vide i doživljavaju kao rješivi izazov.
Nema nam druge nego uvesti Unity u škole... na Macovima, naravno. A lemilice i "računala na čipu" možemo pustiti za One Koji Žele Znati Više. Njih ćemo u startu naučiti assembler.
Uglavnom, neko od profesora tamo je upitao face iz ministarstva kako će naučiti djecu nečemu kad nemaju ni računala u pojedinim školama.
Odgovor vodećih ljudi iz ministarstva je, citiram:
"Kolega, ako ne nauče u osnovnoj školi, naučit će u srednjoj. Ako ne nauče u srednjoj, naučit će na fakultetu. A ako ne na fakultetu..."
i onda se frajer počeo cerekati profesorima u lice.
Taktika "tko vas je.e".
Urezalo mi se u pamćenje.
Srećom danas računalo za male novce kupiš na pijaci uz domaći sir, vrhnje, jaja i slično, pa se može probati doma.
Đipi - činjenica je da programiranje bez primjene nema smisla, ali ja ipak smatram da je prva stepenica učenje programiranja na apstraktnoj razini kako bi ljude naučio strukturiranom razmišljanju. I kako bi ih naučio pravilno postaviti algoritam, plan podataka i aplikacije. Najčešća stupica primijenjenih programera je u tome da su odmah u startu fokusirani strogo na konačni cilj - primjenu. I onda pišu brzi i prljavi kôd koji najkraćim putem dolazi do kratkoročnog cilja. E, a onda nakon par mjeseci korištenja ispliva što sve treba promijeniti i doraditi, ali aplikacija je tako kriš-kraš napisana da je praktički treba započeti od nule da bi se to moglo implementirati.
Promatraj to isto kao i matematiku. Matematika sama radi sebe ne služi ničemu, ali nitko nije savladao niti fiziku, ni kemiju, niti njihove nadogradnje, a da prije toga nije savladao matematiku.
I, da ne bude zabune, ne zastupam ideju da bi sad baš svi trebali zasukati rukave i pisati vlastiti softver. Daleko od toga.
Ali od programiranja se napravilo toliki bauk, a nikad nije bilo lakše ne samo programirati (sljedeći upgrade Xcode-a će vjerojatno čitati misli programeru - većinu ostalih featura su mu već implementirali) nego i (a ovo je posebno bitno!) *naučiti programirati* nego danas. I da, postoji puno više opcija odakle krenuti nego nekad i veća mudrost je u startu odabrati hoće li se "programiranje" (kao metoda) učiti na primjeru PHP-a, C-a ili... u terminalu nego svladati logiku koju se može podučiti u jedno popodne te joj dodati vokabular od čak 30-ak (!) riječi koliko ih ima jezik poput C-a.
@Smayoo: Apsolutno se slažem da se ne može daleko bez osnova, a one JESU apstraktne (u odnosu na znanje koje imamo prije nego se upustimo u, ovdje konkretno, programiranje). Međutim, ono na što pokušavam ukazati je mogućnost korištenja "vizualizacije" da bi se ta apstrakcija približila Onome Tko Uči. Što će lakše shvatiti: algoritam bubble sorta "izučen" tako što se utipkao kod, unijeli testni podaci i pročitalo output (sortirani brojevi) ili isti taj algoritam vizualiziran postupkom samog sortiranja (da, mogli bi pratiti korake kroz debugger i gledati kako se mijenjaju varijable, što nije loše - u osamdesetima :->). Nekad je taj dio vezan uz vizualizaciju (ne moramo nužno govoriti o grafici, možemo govoriti i o zvuku ili bilo čemu različitom od gledanja samog koda!) bio pain in the ass jer nije bilo trivijalno ni prikazati sprite na ekranu, a kamo li vizualizirati podatke "da nam bude lakše percipirati što se zbiva". Ali danas JE trivijalno - s pravim alatom. Onaj tko krene od Xcode-a imat će isti problem kao i programeri nekad: okruženje traži apstrakciju, debugger je jedini prijatelj. Vizualne komponente (korisničko sučelje) može pomoći (prvenstveno zato jer se brzo gradi i relativno lako kontrolira), ali ipak zahtijeva nijansu "previše" predznanja. Ali onaj tko krene od Unitya (nije plaćena reklama, časna riječ :->) puno će brže vidjeti odnos između koda i onoga što taj kod radi, pa makar sortirao kuglice koristeći isti onaj bubble sort s početka priče.
Quartz Composer, lišen koda (do jedne granice) je fantastičan poligon za heklati algoritme i uživati u rezultatima - vizualno.
"Windows7, pisali smo već o tome ovdje. Potraži temu o učenju u forumu Razno. Moj je stav i tada bio - da, istina je da su škole loše opremljene, ali veći je problem da je jako malo profesora koji zaista imaju volje sami učiti da bi djecu poučili."
Tko god zna nešto o informatici, a ostane raditi u školi, nije pametan.
Privatno se dade zaraditi nekoliko puta više novaca nego u školi. Treba podignuti plaću profesorima, pa bi u škole došao motiviran kadar.
Velik je problem naći profesora matematike, fizike i informatike. Gradivo na fakultetu je preteško da bi se čovjek kasnije spustio na razinu 7. i 8. razreda. uz nikakvu plaću. To je već problem društva u cjelini.
Ne bih htio dalje ovdje, ništa novo nisam rekao, da ne blatim temu, da ne mičem fokus s teme članka.
A programera je malo, za biti programer (kao i bilo što drugo), čovjek mora imati ono nešto u sebi.
Želim ugodan ostatak večeri ekipi, ja se neću više uključivati komentarima na ovaj članak.
GP je napisao lijep članak, zainteresirao ljude i to je bitno
teoretska, idealna krivulja postignuća/učen ja data je izrazom x=0.
Dakle, krivulja bi trebala biti što strmija (u najmanjem vremenu naučiti što više).
Ako se želi "što manje strma" krivulja učenja, onda ne treba učiti ništa (y=0).
Ne se ljutit na mene
Tako da smo oboje u pravu, svaki za parametre koje smo odabrali.
Ja sam za y odabrao količinu znanja, a za x standardno proteklo vrijeme.
Neću više majke mi, pljuck- hrač i žvaku iza ramena
Ivor je upravo objavio na MK izvješće s Mobile Mondaya i dao link na snimku svoje prezentacije - mene je oduševio njegov inovativni dock(?) za iPhone koji pomaže pri spašavanju unesrećenih...
GP-a recimo zanimaju lego roboti, preporucam mu da baci oko na www.arduino.cc jer vjerojatno ni ne zna sto propusta i kakve sve danas postoje mogucnosti. Ja se vec dugo spremam uhvatiti se toga ali nemam vise to gdje ugurati u ionako krcatu satnicu.
A sto se programiranja tice, moram kao i obicno ubaciti notu negativnog (ili realnog). Programiranje danas nije na cijeni, tako da se bolje time baviti iz hobija nego profesionalno.. .osim za app store, jer tamo svaka glupost prolazi
Kroz desetak dana bih na oglasnik mogao ponuditi tiskane pločice za njega, ako netko bude zainteresiran, pa i dijelove u kompletu. Samo za članove Jabučnjaka, po proizvodnoj cijeni, po jedan komad. Jabučnjak mi nije mjesto gdje želim profit. Jedino kontroler je upitan, nisam detaljno pogledao web od arduina, trebam ih kontaktirati da vidim uvjete nabave predprogramiran ih kontrolera sa upečenim firmwareom. Ako ima zainteresiranih , probat ću organizirati.
Ali! Dobro da si spomenuo robotiće - i oni su "vizualni" u kontekstu inputa/outputa. Ne pada mi na pamet zabavniji način za nekome objasniti A* algoritam od toga da zapravo programiramo robota koji mora doći od točke A do točke B pri čemu su između posijane nekakve prepreke. Osim toga, sama ideja upravljanja s robotima može uvući u priču i onaj dio populacije kojem hardver (ne nužno na nivou lemilice :->) nije stran.
A ovo "Programiranje danas nije na cijeni" mi fakat nije jasno jer je itekako na cijeni, samo ovisi o razlici između programera i "programera", a to dalje diktira što se zapravo programira i koliko je to netko voljan platiti. Gro današnjih "programera" su kopipejst programeri. I činjenica je da programirati možeš "naučiti" tako da preskočiš osnove i počneš na webu tražiti rješenja konkretnih problema koje implementiraš u, recimo, vlastiti web. Gledano "sa strane" - programiraš. No, to što te strah zadirati u kod da nešto ne polomiš (jer ne kužiš kako radi), to je već drugi par rukava. No, bolje krenuti i od toga nego ne krenuti uopće pa kad/ako se rodi "ljubav", kopipejster uvijek može pohvatati osnove i doživjeti Prosvjetljenje.
I zainteresiran sam za plocice... (LEGO mindstorm 2.0 set kosta prek 2.500 kn)
A kaj se tiče rješavanja problema u snu, Smayoo, i ja to znam napraviti ili se to i meni zna(lo) dogoditi. Iako, ja se nisam nikad budil uz frenetične urlike, nego bih sam ujutro zaključil da sad znam rješenje i da mi se čini da sam to sanjal....
Nije da te kritiziram ali onaj algoritam ljudskog života ima jednu grešku za vikend. Ne možeš skuhati ručak ako se nisi dignuo iz kreveta zar ne :-))), osim ako pod time ne podrazumjevaš da si ženu poslao da kuha ručak, ali to je posve drugačiji algoritam i malo ga je teže napraviti :-)))....
1. ustani iz kreveta
2. ako je vikend skoči na 5
3. odi na posao
4. radi
5. skuhaj ručak
6. jedi
7. zabavi se
8. spavaj
/bow
Dva!
A ovo mi je posebno zanimljivo: "Ne znam možda suluda ideja moći, u stilu ja zamislim on napravi " - planirao sam o tome pisati u članku i odustao u zadnji čas da ga ne pretvorim u sociološku studiju. No, sad kad si već načeo temu - tu svakako ima nešto. Programiranje nam omogućava totalnu kontrolu okruženja koje sami kreiramo. Za one koji se imaju ambicije igrati Boga (tko nema? :->), vjerojatno je programiranje odličan "holodeck" koji MOGU prakticirati u stvarnom životu. William Wright vjerojatno zna ponešto o tome.
jesmo li ludi ili programeri
pa meni se čini da je to isto....
programeri su kao zidari samo što ih neki neke još dobro plaćaju, istočna europa je već krenula sa gadnim dampingom a kad krenu indijci i kinazi sa znanjem i organizacijom, tada će biti gotovo. moje mišljenje je da je to kulturna stvar tako da se to neće desiti već sutra nego kad odraste ova generacija koja sada živi u nekom blagostanju... znači za 20-30 godina.
nekada je važilo da ne može naprviti ništa što mogu 5 amera uz mnogo pizze i kokakole.... danas nema više toga programeri su topovska hrana
smrt fašizmu!
U tome nema ništa loše jer nema smisla da ljudi rade poslove koje zapravo ne moraju raditi. Barem ne za novac. Sve to gledano iz perspektive Star Trek utopije, naravno.
Usput mi se pali lampica da bi ovom članku dobro došao nastavak koji objašnjava paradigmu objekata (s obzirom da su danas svima puna usta objektnog-progr amiranja) na trogodišnjaku razumljiv način i pritom ukazuje na činjenicu kako se današnje aplikacije, unatoč tome što su objektno programirane, ustrajne u tome da se same ne ponašaju kao objekti nego kao zatvoreni svemiri. A lijepo nam je Wirth prije puno godina, s Oberon OS-om, pokazao kako bi se objekti trebali ponašati da količina (redundantnog) programiranja počne težiti nuli.
I - daleko od tog da je sve napisano. Naravno da jest ako u današnje vrijeme ideš pisati (još jedan) text editor, spreadsheet, web browser... jer si umišljaš da možeš bolje od onih par tisuća što su to već odradili prije tebe.
Ali postoji more stvari koje nisu nikad napisane jer ranije jednostavno niti je razvoj spoznaje bio na razini da korisnici unaprijede način razmišljanja, niti su računalni resursi bili dovoljni da se nešto napravi. I na kojima itekako vrijedi radii, kad bi se između mase foliranata moglo pronaći dobrog programera, a da pri tom čovjek izgubi manje vremena, nego što bi izgubio da se sâm upusti u razvoj.
http://blog.anscamobile.com/2010/02/flash-iphone-and-beyond/
Meni svejedno hendla li iPhone flash dok je VNC-a.
Pročitao sam članak i zapravo je cijeli samo uvertira za hvalospjev Coroni, koja s Jobsom nema nikakve veze. I koliko god dobro izgledala na prvi pogled, na drugi, za $99 godišnje "članarine" (uz isto toliko Appleu za developersku registraciju, s publiciranjem u AppStoreu na umu), dobiješ nekakav middleware (da ne kažem "bastarda" :->) koji pokušava premostiti jaz između ActionScripta (!) i iPhonove nativne platforme, pri čemu programiraš u Lui i ograničen si na 2D aplikacije koje NE koriste sistemske UI komponente. Uz obećanje da će biti bolje u sljedećim verzijama. Ne sumnjam da će se popraviti, ali nisam siguran koliko je pametno naizgled si skratiti dio procesa učenja nativne platforme i njenih APIja da bi se kontinuirano kaskalo s mogućnostima programiranja jer nakon što Apple implementira nešto novo, Corona to tek mora prevesti u svoj Lua-conformed API. :/
I da, Coronine aplikacije imaju manji footprint od, recimo, Unitya, ali bez obzira na razliku u cijeni licence (i uz činjenicu da je Unity, po novom, besplatan za razvoj, barem u Indie verziji - licenca je potrebna samo za publiciranje, što je fer), Unityev JavaScript bit će dovoljno blizak Flash programerima da se u njemu ne izgube, a njegovih 7+ MB koda u kojem je sam engine i nije neki overhead osim ako autor ne planira publicirati "Hello World!" aplikaciju.
slika: http://school.anhb.uwa.edu.au/personalpages/kwessen/web/stories/MSBasic1.gif
Osim što na poslu sjedim od iPhone (programera, drugi frend je baš friško kupio Touch da se upozna s Xcodeom i cijelom Apple okolinom, pa jedva čekam vidjeti njegove prve eksperimente obzirom da znam koliko je dobar u drugim programskim alatima...
http://en.wikipedia.org/wiki/Lazarus_(software)
Jako stabilna platforma, isti kod se kompajlira na Windowsu, Linuxu ili Macu a rezultat je jako optimizovana aplikacija koja koristi native widgete. Lazarus je inace open source Delphi klon tako da ko je nekada znao Pascal lako ce se uklopiti.
Cak bih predlozio i prikaz Lazarusa (posle malo istrazivanja naravno).
Pozdrav!