CS101 tutkii tietokoneiden olennaisia ominaisuuksia, miten ne toimivat, mitä ne voivat ja mitä ne eivät voi tehdä, eikä vaadi lainkaan tietokonetaustaa.Aloitamme tarkastelemalla tietokoneiden perusominaisuuksia ja pääsemme leikkimään tietokonekoodilla.
Kiitokset: Kiitokset Nick Parlantelle materiaaleista. Nickiltä: ”Kiitos Googlelle varhaisen tutkimukseni tukemisesta, joka on auttanut tämän luokan luomisessa. Kiitos Mark Guzdialille, joka popularisoi ajatuksen digitaalisen median käyttämisestä tietokoneiden esittelyyn.”
Tietokoneiden perusyhtälö
Tietokoneiden perusyhtälö on:
Tietokone = Tehokas + Tyhmä
- Tarpeeksi tehokas, jotta voi katsoa läpi massoittain dataa
-Miljardeja ”operaatioita” sekunnissa - Tyhmää, koska kukin operaatio on simppeli ja mekaaninen.
-Ei mitään ”oivallusta” tai ”ajattelua” (HAL 9000 -video) - Valtainen + Tyhmä … tulee esiin harjoituksissamme
- Miksi tietokoneet ovat hyödyllisiä rajoituksistaan huolimatta?
- Sitä CS101:ssä on kyse
-Vierailu tähän tietokoneen hassuun maailmaan, katso miten se toimii
-Ymmärtää, mitä ne voivat tehdä ja miten ihmiset käyttävät niitä hyväkseen
-Ei saa pelätä - Kätketty agenda: silmien avaaminen joillekin, lisää tietotekniikan kursseja
Tietokoneet ovat erittäin tehokkaita suurten datamäärien nopeassa läpikäymisessä. Tietokoneet voivat kirjaimellisesti suorittaa miljardeja operaatioita sekunnissa. Yksittäiset ”operaatiot”, joita tietokoneet voivat suorittaa, ovat kuitenkin äärimmäisen yksinkertaisia ja mekaanisia, eivät lainkaan ihmisen ajatuksen tai oivalluksen kaltaisia. Tyypillisiä ”operaatioita” ovat esimerkiksi kahden luvun vertailu tai kahden luvun yhteenlasku.
Vaikka tietokoneet ovat siis nopeita siinä, mitä ne tekevät, operaatiot, joita ne voivat tehdä, ovat äärimmäisen jäykkiä, yksinkertaisia ja mekaanisia. Tai toisin sanoen tietokoneet eivät ole kuin HAL 9000 elokuvasta 2001: Avaruusodysseia: HAL 9000 -video.
Keskeinen johtopäätös on, että tietokone ei toimi kuten ihmisen aivot. Tietokone on mekaaninen työkalu, joka voi tehdä hämmästyttäviä asioita, mutta se tarvitsee ihmisen kertomaan sille, mitä tehdä.
Korkea taso – Miten tietokone toimii?
- Tietokone noudattaa sarjaa ”koodi”-ohjeita
- Jokainen ohje on yksinkertainen (esim. laske 2 numeroa yhteen)
- Tietokone ”suorittaa” pitkän sarjan ohjeita
- Puhtaasti mekaaninen
Tietokoneet ovat erittäin hyödyllisiä
- Ajatella kaikkia hyödyllisiä tietokoneen toimintoja (puhelin, kamera)
-viestinvälitys, sähköposti
-MP3-ääni
-punasilmäisyyden vähennys - Jos tietokoneet ovat niin typeriä… miten ne ovat niin hyödyllisiä?
- Mitä yhdistää?
Ohjelmoijat
- Ohjelmoijat valjastavat tietokoneen voiman!
- Ohjelmoija keksii hyödyllisen ominaisuuden
– Vaatii luovuutta, näkemystä ihmisten tarpeista ja tietokoneiden tuntemusta - Ohjelmoijat pilkkovat vaiheet, kirjoittavat koodia tietokoneelle
– Tyhjentävät sen tietokoneelle! - Kummankin puolen parhaat ominaisuudet: tietokoneen edullinen/nopea prosessointi + ohjelmoijan luova oivallus
- CS101 tutkimuksia: algoritmit ja koodi
Koska tietokoneet ovat totaalisen mekaanisia ja typeriä, miksi ne ovat niin kaikkialla? Tietokoneen ja jonkin hyödyllisen tekemisen väliin jäävä kuilu on se, jossa ihmisohjelmoija luo ratkaisuja. Ohjelmointi vaatii ihmiseltä luovuutta ja näkemystä ongelmasta sekä kykyä pilkkoa ratkaisu ohjeiksi, joita tietokone voi noudattaa.
Koodilla tarkoitetaan kieltä, jota tietokone ymmärtää. Näillä luennoilla kirjoitamme ja ajamme lyhyitä koodinpätkiä ymmärtääkseen, mitkä ovat tietokoneiden olennaiset ominaisuudet ja erityisesti niiden vahvuudet ja rajoitukset.
Koodilla kokeilemalla tietokoneiden luonne tulee hyvin selvästi esiin … omalla tavallaan tehokkaita, mutta rajallisesti mekaanisia. IMHO, tämä tietokoneiden ristiriitainen luonne on jotain, mikä jokaisen tulisi ymmärtää, jotta niitä voisi käyttää hyvin ja jotta ne eivät pelottaisi.
Ennen koodausta – kärsivällisyyttä
- Aloitamme alla yksinkertaisella koodauksella
- Koodi on kuin legopalikoita…
- -yksittäiset palat ovat super yksinkertaisia
- – Lopulta rakennamme hienoja yhdistelmiä
- Mutta meidän on aloitettava pienestä
Varjostaminen
Parin tunnin luennon aikana teemme erikoisefektejä kuvilla, kuten seuraavanlaisia:
Mutta toistaiseksi meillä on pelkkä printtitiedosto()!
Patience Aluksi opettelemme muutamia ohjelmoinnin elementtejä sekä tietokoneen eri osia, ja myöhemmin yhdistelemme näitä muutamia elementtejä uudelleen monien ongelmien ratkaisemiseksi. Nämä ensimmäiset elementit ovat yksinkertaisia, joten niitä ei kannata juurikaan tarkastella yksinään. Ole kärsivällinen, pian kokoamme näitä elementtejä yhteen – kuin legopalikoita – ja teemme aika siistejä projekteja.
Javascript Computer Langauge
- Javascript-koodia ja joitakin laajennuksia vain CS101:lle
- Koodilauseemme ovat pieniä…
- -Juuri tarpeeksi suuria kokeillaksemme keskeisiä ideoita
- -Eivät täydellisiä, ammattimaisia ohjelmia
- -Mutta tarpeeksi isoja osoittaaksemme koodauksen todelliset haasteet
Tällä kurssilla käytämme kielen muunnelmaa, joka tunnetaan nimellä Javascript, ja johon on lisätty joitain lisäominaisuuksia tätä kurssia varten. Javascript-kieli toimii verkkoselaimessa, joten kaikki kokeilumme voivat tapahtua suoraan selaimessa, eikä siihen tarvita mitään muuta. Käytämme vain niitä Javascriptin osia, joita tarvitsemme kokeiluissamme, emmekä koko kieltä, jota käytetään ammattimaisesti Javascriptissä. Javascript on kuitenkin oikea kieli, ja koodimme on oikeaa koodia. Pienet ohjelmamme näyttävät koodin tärkeät ominaisuudet pitäen asiat nopeasti ja pieninä.
Ensimmäinen koodiesimerkki – Tulosta
Tässä on koodi, joka kutsuu ”tulosta”-funktiota. Napsauta alla olevaa Suorita-painiketta, niin tietokone suorittaa tämän koodin, ja koodin tuloste näkyy oikealla.
- Suorita suorittaa jokaisen rivin kerran juosten ylhäältä alas
- Tulosta (print) on funktio, verbi, joka edustaa toimintoa, jonka tietokone tekee.
- Sulkeiden sisällä olevat tiedot välitetään print-funktiolle (substantiivit)
-tämä tieto on ”verbin”
-tieto on ”verbin”
-tietoa kutsutaan funktion argumenteiksi - Monet arvot erotetaan toisistaan pilkuilla
- Kokeissa muutetaan koodia ja ajetaan jokaisen muutoksen jälkeen nähdään uusi ulostulo:
-Muutetaan luku
Lisätään useampia numeroita pilkuilla eroteltuna print(:n sisään…)
-Kopioi ensimmäinen rivi ja liitä se kahdesti viimeisen rivin jälkeen
-Lupaan, että tuloste muuttuu mielenkiintoisemmaksi! - Kapea syntaksi ei vapaamuotoinen
-Sallittu syntaksi on erittäin tiukka ja kapea
-ei esim. voi jättää oikeaa sulkeista pois )
-vaikuttaa tietokoneen sisäiseen, mekaaniseen luonteeseen
-Ei kannata lannistua – ”Kun kerran Roomassa…”
-vierailemme tietokoneen maailmassa - Huomaa, että tämä ”tulostus” ei ole normaali osa Javascriptia, lisäsin sen CS101:ää varten
Tulostus ja merkkijonot
- Kommentoinnit alkavat kirjaimella / / />, ja ne jatkuvat rivin loppuun. Tapa kirjoittaa koodia koskevia huomautuksia, joita tietokone ei huomioi.
Miksi ohjelmoijat saattavat käyttää kommentteja? - Jonojono on lainausmerkkien sisään kirjoitettu merkkijono, jota käytetään datana koodissa
– esim. ”hello” tai ”123”
merkkijonot toimivat print-funktion kanssa numeroiden lisäksi
merkkijonot tallentavat tietokoneessa tekstiä, kuten urlseja tai kappaleiden tekstiä jne. - Kokeiluja:
-muokkaa tekstiä merkkijonon sisällä
-lisää useampia merkkijonoja pilkulla eroteltuna
-lisää merkkijono ”print” – hankalaa!
-Lainausmerkkien sisällä on vain dataa - Koodi = ohjeet, jotka suoritetaan
- Data = numeroita tai merkkijonoja; koodin käsittelemät
Huomaa, että print tunnistetaan koodissa funktioksi vs. merkkijono ”hello”, joka on vain passiivista dataa (kuten verbit ja substantiivit) Tietokone ei huomioi kommenteja, joten ne ovat vain keino, jolla voit kirjoittaa muistiinpanoja itsellesi siitä, mitä koodi tekee. Kommentteja voi käyttää sen avulla poistamaan koodirivin väliaikaisesti — ”kommentoimalla” koodia asettamalla sen vasemmalle puolelle ”//”.
Ajattelemalla syntaksia ja virheitä (tämän päivän keskeinen viesti!)
- Syntaksi — koodi on jäsennelty tietokonetta varten
- Erittäin yleinen virhe — kirjoitetaan koodia, jossa on pieni syntaksiongelma
- Professionaaliset ohjelmoijat tekevät tuollaista ”virhettä” koko ajan
- Onneksi se on hyvin helppo korjata … älä huolehdi siitä
- Ei ole osoitus jostain ohjelmoijan virheestä
- Vain vain luonteesta kirjoittaa ideoita mekaaniseen tietokonekieleen
- Aloittelijoille syntaksivirhe voi suistua raiteiltaan, kun he luulevat tekevänsä jonkun ison virheen
- Kokeile tehdä joukko tyypillisiä syntaksivirheitä ja korjaa ne
- Näiden pienten virheiden korjaaminen on pieni, normaali edistysaskel
- Huom: Firefox antaa parhaat virheilmoitukset
Syntaksi Edellä esitettyä syntaksia on noudatettava tiukasti tai koodi ei toimi: funktion nimi, sulkeet, jokaisessa merkkijonossa on avaavat ja sulkevat lainausmerkit, pilkut erottavat funktiokutsun arvot.
Syntaksin jäykkyys kuvastaa tietokoneiden rajoituksia, sillä niiden luonnollinen kieli on kiinteää ja mekaanista. Tämä on tärkeää omaksua, kun työskentelee tietokoneiden kanssa, ja uskon, että monet ihmiset suistuvat tältä tieltä aloittaessaan työskentelyn tietokoneiden parissa. Kirjoitat jotain, jonka kuka tahansa ihminen voisi ymmärtää, mutta tietokone ymmärtää koodin vain, jos se sopii tietokoneen mekaaniseen syntaksiin.
Triviaalit, pinnalliset syntaksivirheet ovat hyvin yleisiä koodia kirjoitettaessa. Maailman taitavimmat ohjelmoijat tekevät tuollaisia virheitä jatkuvasti eivätkä ajattele siitä mitään. Syntaksivirheet eivät kerro mistään kirjoittajan virheellisestä strategiasta. Se on vain luonnollinen vaihe ajatustemme kääntämisessä tietokoneen mekaanisemmaksi kieleksi. Kuten näemme jäljempänä, näiden virheiden korjaaminen on hyvin nopeaa.
On tärkeää, että nämä pienet pinnalliset virhetapaukset eivät suista meitä raiteiltaan. Kuvioiden opettamisen helpottamiseksi alla on monia esimerkkejä, joissa näytetään tyypillisiä virheitä, jotta näet, miltä virheilmoitukset näyttävät ja näet, miten ne korjataan. Mikä on kunkin alla olevan koodinpätkän virhe? Joskus tietokoneen luoma virheilmoitus osoittaa ongelman tarkasti, mutta joskus virheilmoitus vain paljastaa, että virhe on hämmentänyt tietokonetta niin syvästi, ettei se pysty luomaan tarkkaa virheilmoitusta. Firefox tuottaa tällä hetkellä hyödyllisimmät virheilmoitukset ja kertoo usein, millä nimenomaisella rivillä on ongelmia.
Syntaksivirhe-esimerkkejä
Nämä syntaksiongelmat ovat nopeasti korjattavissa.