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.