Bog, moje ime je Nick Parlante, a ovo je nastava o svojstvima računala. Kako ona funkcioniraju, što mogu, a što ne mogu raditi. Ne traži se nikakvo predznanje o računalima. Namijenjena je svima. Dakle prije nego što započnem, želio bih se, kratko, zahvaliti Google-u na podršci mojim ranim istraživanjima na ovu temu, koja su u konačnici pomogla u kreiranju ove nastave. Također kratka napomena o obliku. Nastava se ne sastoji samo od videa. Uz svako poglavlje videa postoji i neka vrsta pisanog dokumenta, kojeg ću listati, pomicati, na ekranu, koji prati izlaganje i sadrži dijagrame, primjere koda i slične stvari. Dakle, vi možete u bilo kojem trenutku prelaziti s videa na dokument ako želite ponovo pročitati obrazloženje ili isprobati neki primjer ili slično. Postoji velika razlika između gledanja kako ja nešto radim i pokušaja da to sami napravite. Moj savjet bi bio: Puno puta, na kraju poglavlja imati ćemo vježbe. Tada, prije nego što probate odraditi vježbe, odlučiti da li ste spremni odmah prijeći na vježbe ili se želite vratiti na dokument i malo sami eksperimentirati s primjerima da učvrstite svoje znanje. Tek toliko da znate da vam ta mogućnost stoji na raspolaganju za svako poglavlje. Rekao bih da je temeljna jednadžba računala: računalo je "moćno" plus "glupo". Moćno u smislu da računala mogu obaviti na milijarde operacija. Ona rade nezamislivo brzo. Ali, operacije su "glupe" u smislu da su operacije koje računalo izvodi u suštini vrlo jednostavne, one su potpuno mehaničke. One nemaju ništa što bi mi opisali kao inteligentni (čovjekov) uvid u to na čemu rade. Dakle ta čudna kombinacija, na neki način, velike moći kombinirane s nekom vrstom mehaničke ograničenosti (gluposti). Taj obrazac postati će kristalno jasan dok budemo obrađivali ove male primjere koda, kako bi se na neki način poigrali u računalnom svijetu. Sad sam malo provokativan, na neki način ismijavam računala. "O da, ona su glupa", ali u drugu ruku vidimo da su računala ... ona su vrlo korisna. Na neki način to je ono o čemu ova predavanja govore. S jedne strane ulaženje u, na neki način zabavan svijet računala koji je pomalo mehanički onda ga povezivati sa stvarima poput email-a i MP3 zvučnih zapisa. Stvarima koje su u realnom svijetu vrlo uobičajene. Pokušavati povezati ta dva svijeta i pokazati kako računala funkcioniraju i kako se to uklapa u svijet. Moj cilj je da kad odradite nastavu kako računala rade i kako se uklapaju u svijet. I da ne budete zastrašeni računalima. Da ne mislite o njima kao nekakvoj magiji, neshvatljivoj kutiji. Imam također i skriveni plan. Premalo ima u svijetu onih koji se bave računalnom znanošću. Postoji velik broj problema za koje bi željeli da budu riješeni ali jednostavno nema dovoljno ljudi koji bi napisali programe za sve njih. Dakle, moj skriveni plan je da, otvarajući vam pogled u računalni svijet i način kako on funkcionira, vi otkrijete da ste zainteresirani nastaviti se baviti računalnom znanošću i dalje. Dakle prva približan uvid u koji želim ući: Kako računala funkcioniraju? Iznutra je računalo pogonjeno kodom. Mi ćemo detaljnije o tome kasnije. Ovo bi trebao biti samo prvi uvid. Napravio sam ovdje malu sliku računala. Kod unutar računala sastavljen je od ovih jednostavnih naredbi. Jedna naredba mogla bi biti da se zbroje dva broja, izračuna se koliko je 1 više 1 ili da se provjeri da li je 2 manje od 10. To je ono što računalo radi, na prvi pogled ono samo izvodi ovu listu naredbi. Svaka je instrukcija vrlo jednostavna i računalo jednostavno izvodi jednu po jednu s liste, ali ih izvodi izuzetno velikom brzinom. Svaka instrukcija ima neku vrstu određenog mehaničkog dojma. Rekao bih, da nas ovo vodi prema prirodnom pitanju koje glasi: Ako ... ako računalo samo mehanički izvodi niz instrukcija, kako je moguće da ono obavlja tako mnogo korisnih stvari u svijetu. Imam ovaj dijagram za taj slučaj. Na desnoj strani zamisliti ću neke korisne mogućnosti poput uklanjanja "crvenih očiju" ili instant messaging-a. Reći ću radi pojašnjenja da morate znati da su vaš mobitel, vaš digitalni fotoaparat, sve su to računala. Dakle na desnoj strani imam korisnu mogućnost: "uklanjanje crvenih očiju", a na lijevoj strani imam računalo, koje upravo izvodi svoje, kao što znate, jednostavne mehaničke instrukcije. Što je ono što povezuje ova dva pogleda? A odgovor je to je u suštini računalno programiranje. Postoji osoba računalni programer, koji u početku ima ideju. O, trebam ukloniti efekt "crvenih očiju", to bi bilo vrlo korisno. Oni koriste svoju kreativnost i svoju imaginaciju da smisle što bi računalo moglo korisno obaviti. I tada, ono što programer radi je da strukturira i razdijeli taj problem, tako da ga računalo može obaviti. Oni instruiraju računalo, i strukturiraju stvari tako da to računalo može obaviti tu korisnu stvar. To je ono što programiranje jest. I u stvari za bilo koju korisnu stvar koju izvodite svojom digitalnom kamerom ili svojim mobitelom ili svojim računalom, u pozadini stoji osoba koja je omogućila da se to dogodi. Sviđa mi se ta kombinacija. Na neki način programer, osoba, unosi svoju kreativnost i svoj pogled na svijet i razmišljanje o stvarima koje bi bilo korisno napraviti i to je njihova polovica problema. A računalo donosi ono u čemu je računalo dobro. Rekao bih da je računalo dobro u tome što je u konačnici prilično jeftino. Računalo je u stanju izvoditi ove instrukcije vrlo, vrlo brzo i tako u konačnici dobivamo ovu lijepu kombinaciju. To je na neki način razlog što tako veliki broj računala u svijetu izvodi tako mnogo korisnih stvari. To pokazuje da je ovo dobro partnerstvo između ljudi i računala. Na svoj način ovaj dijagram je pomalo sažetak ovih predavanja. Posjetiti ćemo na lijevoj strani da vidimo, pomalo, da vidimo kako izgleda računalni svijet. I pogledati na vezu između tih i aktualnih mogućnosti koje ste koristili i donekle razumjeli kako se računalo uklapa u svijet i omogućava da se stvari obave. U drugom dijelu ovog poglavlja započeti ću izvoditi male primjere koda. I moram kazati da će to zahtijevati nešto strpljenja. Početi ću pisati kod ... i naš prvi primjer biti će vrlo jednostavan. On neće obavljati ništa blistavo. Rekao bih da je to pomalo kao LEGO kockice. Svaki komad koda koji naučimo predstavlja dodatnu kockicu, i s vremenom ćemo biti u mogućnosti sastaviti ih zajedno i napraviti prilično zgodne stvari. Međutim u ovih prvih nekoliko poglavlja stvari ..., negdje moramo započeti, i ovi prvi primjeri su vrlo jednostavne. Molim vas stoga za strpljenje i obećavam da ćemo postići nešto zgodno s ovim materijalom U stvari, ovdje stavljam malo nagovještaja, kroz nekoliko sati predavanja započeti ćemo raditi specijalne vizualne efekte. Poigrati ćemo se poznatim, tu prikazanim, majmun-mjesec-banana problemom. Samo malo naznake gdje ćemo dospjeti. Ali ono što ćemo raditi danas su vrlo jednostavni komadići koda. Za ove vježbe kodiranja koristiti ćemo programski jezik zvan JavaScript. JavaScript je vrlo popularan jezik. Izvodi se u web pregledniku (browser-u) što ga čini iznimno popularnim. To je i razlog koji ga čini pogodnim za ovu nastavu. Jer radi, jer mi radimo u web browser-u, moguće je da naš kod funkcionira vrlo jednostavno. Koristiti ćemo JavaScript plus još neke dodatke koje sam dodao samo za ova predavanja. Tako ovo neće izgledati baš kao profesionalni JavaScript kod. Raditi ćemo na dijelovima koda koji je u konačnici vrlo kratak, tek toliko da ukažemo na poantu onog što pokazujemo i pomalo istražimo računala, ali bez dovlačenja puno "prtljage" koja bi bila nužna za pisanje kompletnih profesionalnih programa. Evo dakle mog prvog primjera. Ono što će kod napraviti za nas je ... imamo ovo pravokutno područje i ovaj tekst u okviru njega to je kod. Imati ćemo svaki put "RUN" gumb ovdje dolje. Kad napravim klik mišem na RUN gumb. Ono što će se dogoditi je da će računalo otići ovdje gore i jednostavno proći ovim linijama. On će jednostavno, kao što kažemo, izvesti svaku liniju. Obaviti će ono što ona kaže. U ovom slučaju, dakle, ono što gledamo je print funkcija. Dakle imamo riječ "print". Način na koji je print funkcija uvedena u kod je da imamo riječ "print" i onda imamo lijevu (otvorenu) zagradu i nakon nje niz stvari U ovom primjeru to je samo brojka 6 nakon čega redak završava s desnom (zatvorenom) zagradom i znakom točkom-zarez. Ono što print funkcija radi je da uzme one stvari koje pišu u zagradama i ispisuje ih. Ako pogledate preko na desnu stranu ovo je ispis koji se dobije kad kliknemo na RUN. Ako ovo promijenim na recimo print(42) i sad kliknem RUN tada vidimo 42. To je ono što dobijemo od prve linije, a kad kažem print(1,2) tada vidim 1 i 2 s druge strane. Dakle to tako radi. Rekao sam već da su naši prvi primjeri vrlo banalni, nisu nešto blistavo. To je u ovom slučaju doista i istina. Dakle mogao bih sada ovdje pokušati još par stvari. Mogao bih napisati zarez 47 tako da kad to izvedem ... OK, sada vidimo da dobijemo 1 i 2 i 47. Također da pokažem da se ove linije uzimaju samo jedna po jedna Kopirati ću to i onda to mogu zalijepiti nekoliko puta ... Imam viš linija, tako da kad to izvedem, ... sad možemo reći da je to u redu dobijemo, dakle dobijemo ponavljanje onoga što god nam je ispis bio. Dakle ono što treba naglasiti je da sintaksa naredbe nije slobodna forma. Naprotiv, ona je vrlo čvrsto strukturirana. Ona mora biti upravo takva da bi je računalo moglo razumjeti. To je, u stvari, posljedica unutarnje prirode računala. Ono ima tu mehaničku čvrstinu, ograničenost, pa će i jezik, kojeg ono razumije isto biti mehanički, čvrst. Ovo je malo čudno. U početku krećemo slobodno pisati engleski ovdje i postići da to računalo slijedi. Razmišljajte i tome kao svojoj prvoj lekciji o prirodi računala. Ili po principu "kad si u Rimu ponašaj se kao Rimljanin". Dakle tražim od vas da zavirite u svijet računala. Raditi ćemo stoga malo u jeziku računala. U početku će izgledati malo čudno, ali stvarnost je slijedeća, to nije komplicirano, Sintaksa postoji. To jest čvrsta struktura, ali to zapravo i nije tako teško Htio bih vas ohrabriti da ne odustajete zbog pomalo čvrsto strukturirane mehaničke kvalitete jezika. Ona će nam omogućiti da radimo neke zgodne stvari. U redu, to je bio moj prvi primjer, probajmo ovaj drugi U prvom primjeru radio sam samo s brojevima. U računalnom kodu postoje i nešto što zovemo strig-om (nizom znakova). Ovo je prvi primjer sa string-om: "hi" unutar navodnika Dakle niz je samo slijed znakova i u kodu ga zapisujemo između dvostrukih navodnika. Zbog toga imam "hi". Dakle print može prihvatiti brojke i ispisati ih, a pokazuje se da može ispisati i stringove. On jednostavno interpretira string kao slijed slova i kojih god znakova što ga čine i ispisuje ih redom ovdje. Mogao bih, znate, ovo izmijeniti da umjesto "hi" to promjenim u "good day" Dakle string može uključivati i razmake. Ako to izvedem mi ćemo samo dobiti ovdje 'good day'. Dakle u računalnom programu i stringovi i brojevi su, i jedni i drugi, vrlo česti. Stringovi u programu se koriste da se u njima čuva npr. URL kojeg ste utipkali ili, u programu za uređivanje teksta, cijeli stavak teksta na kojem radimo može biti pohranjen u string. Dakle string je u suštini sekvenca znakova. To je vrlo uobičajena vrsta podatka u računalu. Druga stvar koju smo pokazali u ovom primjeru koda je ovaj prvi redak. To nazivamo komentarom i u JavaScript jeziku komentari započinju s dvije kose crte a komentari funkcioniraju tako da se sve, počevši s dvije kose crte pa sve desno do kraja retka ignorira od strane računala. Mogu to onda koristiti da tu napišem bilo kakvu opasku poput tu imam dva stringa i sl. Neku malu opasku ili primjedbu sebi ili slično o kodu. Dakle kad ovo izvedem računalo, recimo, ignorira ovaj dio. U nekom od mojih primjera koji slijede vidjeti ćete komentare razasute okolo u kojima ja stavljam napomene o tome što se događa. Dakle, jedan primjer kojeg bi ovdje mogao pokazati, a koji je malo zbunjujući. Staviti ću riječ print unutar stringa i pogledati što se ispisuje. Sad dakle ovdje na drugom retku dobivam 'hello to print'. Ono što se dogodilo da se riječ print unutar stringa ne tretira kao kod, kojeg treba izvesti poput riječi print izvan stringa, t.j. kao funkcija koju kod programa poziva. Dakle kad se nalazi unutar dvostrukih navodnika ista riječ tretira se kao običan podatak. To predstavlja distinkciju unutar koda. To bi bilo u redu. Na kraju poglavlja imati ćemo nekoliko vježbi u kojima ćete moći pisati kod kao što sam ja radio ovdje. Kao što sam prije spomenuo kod funkcionira unutar sustava koji ima čvrsto strukturiranu ograničenu sintaksu. U stvari, vrlo često se potkrade pogreška i profesionalnim programerima koji pišu programe po cijeli dan. Kad se utipkava neki kod postoji tendencija da se naprave sitne sintaktičke pogreške na raznim mjestima u kodu. Moguće da se ispusti desna zagrada ili se krivo otipka neka riječ ... I te sintaktičke pogreške su vrlo lake za ispravljanje. Dakle kad pritisnete RUN gumb vrlo često će se ukazati nekakva sitna pogreška koju je potrebno ispraviti. Htio bi da to razumijete. Te sitne pogreške ne odražavaju vaše duboko nerazumijevanje ili ozbiljan nedostatak, radi se samo o površnim previdima koja se događaju tijekom kodiranja, a rade ih i profesionalni programeri cijelo vrijeme . Mi niti ne mislimo o njima dok ih uklanjamo, uopće ne razmišljamo o njima. Mislim stoga da, kad se ljudi uvode u kodiranje, ovo ih pomalo izbacuje iz takta. To da postoje ove male sintaktičke greške odvraća im pažnju i oni misle da rade nešto potpuno krivo, dok zapravo svi rade takve greške. To uopće nije značajno. Da bi pomogao da vam malo odvratim pažnju s toga, ja ću vam jednostavno prikazati gomilu primjera u kojima sam ... Zadao sam par primjera u kojima imam neke tipične male sintaktičke greške. Pokazati ću kako se greška manifestira kad kliknete na RUN gumb. Dobro? Dakle što će se dogoditi je da kad kliknem RUN gumb stvari neće raditi. Dobiti ću neku vrstu poruke o grešci. Dakle želim Vam pokazati proces od pojave greške do razrješenja ovog sintaktičkog problema, samo kako bi se privikli. O, da, kad prvi put kliknete RUN gumb, to je vrlo česta pojava, dogoditi će se ovo. Samo da prođemo kroz ovo. U redu dakle kliknimo RUN gumb. I umjesto izvođenja koda i realizacije ispisa, dobio sam neku grešku ovdje. Malu poruku o grešci. Ponekad su poruke o grešci prilično dobre i jasno opisuju što se događa. Dakle pogledajmo prvu, ona glasi: Error: prlnt is not defined. Što se dogodilo je da "print" je funkcija .... ali ovaj drugi navod, u drugom retku, ... sad u ovom slučaju, dobro, to ne radi uvijek, ali u velikom broju slučajeva bit' će označen redak u kom je problem. Problem je u tipkanju. Ne piše P R I N T, već piše P R L N T Dakle ako "l" promijenim u "i". Ha! Sada radi. Dakle ovaj mali program ispisuje 'a', pa '1' i 'b', pa 'c' i '3' , dakle jedan potpuno besmislen primjer kojeg sam izmislio. Naravno stavio sam l jer sam razmišljao kako je to slovo koje vrlo sliči i. Pa je nužno da pažljivo zagledate, dakle bio sam pomalo zločesti profesor. U redu, pokušajmo s jednim od ovih Kliknuti ću na RUN gumb na ovom. Javlja grešku, nezaključen doslovni string i označio je drugi redak. Moram, dakle pregledati drugi redak s lijeva na desno. Vidite ovaj (redak) i postoji 'b' . Ovdje je vidite problem što imamo doslovno naveden string Htjeli smo string "b", ali nedostaje nam zatvaranje (desni) navodnika. Trebamo oba navodnika. Probati ću s trećim primjerom. Pogledajmo, greška, nedostaje desna zagrada. Još jednom je linija osvijetljena. Ja ću ... u stvari ... u ovom slučaju .. poruka o grešci je prilično dobra. Ona govori, gledaj ..., kao i kod navodnika, lijeva (otvorena) zagrada i desna (zatvorena) zagrada, moraju se spariti. Mora biti desna zagrada, točno ovdje, da bi se dala naredbu ispisa. Sada, dakle, radi. Evo zadnjeg. Nešto ne štima, javlja grešku da nema desne zagrade, ali kad pogledam ona je tu. Ono što se dogodilo je da je poruka o grešci netočna. Ponekad, kad postoji sintaktička greška, računalo se zbuni i ne može dobro dijagnosticirati grešku za vas u svojoj poruci Ono u osnovici može govoriti nešto ne valja u drugom retku. Moja preporuka je da dobro pregledate s lijeva na desno ... i pogledajte ovdje, izgleda prilično razumno. Izgleda da u ovom slučaju ono što nedostaje je zarez Mislim da taj primjer dobro ukazuje na razliku između čovjeka i računala. Čovjek bi mogao pogledati naredbu i otkriti vašu namjeru. Poput: vidim što je on namjeravao je da ispiše '1' i 'b'. Ali računalo ima tu mehaničku (nesvjesnu) crtu. Stvari moraju biti upravo onakve kakve se očekuje da budu, pa i zarez nije opcija već mora biti tamo, tako da smo blokirani tok to ne riješimo. U redu, sad to radi. Dakle ti je prvo poglavlje samo s osnovnim ispisom s brojkama i stringovima. Imam jedan problemski primjer kojeg ću probati. Ovako će najčešće izgledati vježbe. Iako će kasnije vježbe biti zabavnije. To vam obećavam. Ovdje piše: izmijeni donji kod tako da kad se izvede on generira upravo ovakav izlaz. Tu stoji '1 2 buckle' .... dakle zasniva se na brojalici 'one, two, buckle my shoe'. Dakle, ovaj kod ovdje koji nešto radi ali to nije, to uopće nije ono što trebamo, pa da moramo prepraviti Pogledajmo! Najprije, ono što ću napraviti je ja ću dodati 2 i onda ću se sjetiti dodati zarez ... i onda ću promijeniti ovaj strig da glasi 'buckle'. Sad to mogu izvesti tek da vidim što radi. Htio bi vas ohrabriti, da ako imate ideju za neki kod, ili samo želite nešto isprobati, ... ne možete ništa razbiti ako ovdje bilo što ukucate i kliknete pogrešan gumb. Dobro je imati osjećaj da malo eksperimentirate. To je bio prvi redak. Isprobati ću i drugi. '3' zarez '4' zarez 'knock' Dobro je, sada to radi. Vrlo često kad radim male pokuse u dokumentu poput ovog, ... to može biti ovaj u videu, raditi ću gomilu primjera i onda vi možda zaželite isprobati ... moda ćete znate biti radoznali vezano za drugi primjer I vi ćete naići na jedan i htjeti isprobati neku varijantu i stisnuti ćete krivu tipku To je nešto što vi slobodno možete napraviti. Često ću u dokumentu imati mali 'show solution' (pokaži rješenje) gumb To znači da vi možete doći na njega, ... on je prazan, dakle možete eksperimentirati Ali onda ako ste radoznali koji kod sam ja koristio, tada je i to dostupno u dokumentu tako da možete usporediti to s vašim rješenjem. Ili ako želite iz njega kopirati ili što god bilo to je u redu. Time završavamo prvo poglavlje, isprobajte vježbe s kodom.