Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Miten oppia ohjelmoimaan?

Sivun loppuun

lare290 [06.03.2014 13:45:34]

#

Tiedän että täältä löytyy oppaita, mutta ne on vähän semmoisia.. vaikeaselkoisia. osaan ihan vain perusteet (pelkästään IF-komennon yms.) pythonista ja tahtoisin tehdä ASCII-grafiikkaisen pelin. Mistä aloittaa?

Marbo [06.03.2014 13:59:03]

#

Mites olis? http://www.codecademy.com/
Tuskin siellä peliä opetetaan tekemään, mutta eikai tuosta harjottelusta haittaakaan ole?

lare290 [06.03.2014 14:03:17]

#

Jaa. Vilkaisen tuota kohta. Mie nyt tahtoisin vain osata ohjelmoinnin perusteet niin, että pystyisin soveltamalla tekemään suht. koht. helposti ohjelman joka lukee ja sitten generoi .txt-tiedostolla olevan kartan niin, että esim. @ on hahmo jota voi liikuttaa esim. kirjoittamalla Y ja Enter, niin se menee ylöspäin. Tai sitten nuolinäppäimillä jos niinkin pitkälle pääsen.

Lisäys: Silleen Adom-tyyliin.

Lisäys: Ohhoh, tuo on ihan hyvä sivu tuo codeacademy. Interaktiivinen opiskelupaikka :3

E.K.Virtanen [07.03.2014 21:02:57]

#

Moi lare290.

codeacademy on mainio paikka jonka lisäksi löytyy pari muutakin vastaavaa. Googlaappa esim. Khan Academy. Jos asut sopivan kokoisella paikkakunnalla, niin kirjastosi tarjonta voi aiheuttaa todella positiivisen yllätyksen ;)

lare290 [07.03.2014 22:04:42]

#

Leppävirran kirjastosta löytyi vain yksi Python-ohjelmointia koskeva opus.
Java, Prolog ja Python : tehokas näkökulma ohjelmointiin
Että tommoinen.
Ja sieltä löytyy sitten 60 kappaletta kirjoja jotka kertovat muista ohjelmointikielistä tai yleisesti ohjelmoinnista. Kunhan kirjasto taas aukeaa niin voisin mennä lainaamaan jonkun.

noquaa [09.03.2014 13:06:10]

#

Vastaan siltä pohjalta, että opettelen nyt ohjelmointia pythonilla. Tässä ihan hiljan aloittanut.

Omasta kokemuksesta nyt voin sanoa, että homma minulla alussa tyssäsi siihen kun aloin liikkumaan turhan spesifistisellä alueella. Tässä tapauksessa html-koodista tekstin parserointia erään moduulin avulla.

Nyt olen vältellyt vastaavanlaisia tilanteita, siirtymällä perusasioiden opetteluun sekä jättäen sen isomman projektin hautumaan.

Olen tehnyt tehtäviä nyt täältä, muuttaen tehtävät käyttämääni python 3.x malliseksi, http://www.cs.helsinki.fi/group/linkki/materiaali/python-perusteet/ missä osa tehtävistä voi olla melko yksinkertaisenkin oloisia, mutta koen kaikki silti hyvin hyödylliseksi, että hommaan tulee kunnolla rutiinia. Ikäänkuin aakkosten opettelua. Ehkä sitten varsinaiset lauseetkin muodostuvat näteiksi.

Koska ohjelmointi on kuitenkin kivaa ja harrastus, olen ajattelut, että ehkä 2-4 vuoden päästä osaan jo jotain.

Chiman [09.03.2014 14:41:45]

#

Ohjelmoimaan oppii tosiaan vain ohjelmoimalla. Siinä rinnalla pitää lukea kielen perusteita. Pieniä askelia ja onnistumisia, jotta motivaatio pysyy yllä. Pelin tekeminen if-lauseiden opettelun jälkeen kuulostaa liian isolta palalta. Kun valmista ei meinaa syntyä, iskee tuskastuminen ja motivaatio lopahtaa.

noquaa kirjoitti:

... http://www.cs.helsinki.fi/group/linkki/materiaali/python-perusteet/ ...

Eih, ensimmäisenä tuolla opetetaan puolipisteiden käyttö Python-koodissa:

lainaus:

Vaikka pythonissa puolipisteiden käyttö ei ole pakollista, käytämme niitä tässä oppaassa.

En voi ymmärtää. Aika paljon olen Python-koodia nähnyt ja puolipisteitä en muista nähneeni koskaan oikeassa koodissa lauseiden perässä. Neuvon välttämään.

Muuten tuolla näkyy olevan hyvääkin asiaa. Osa koodiesimerkeistä on tehty epäpythonmaisesti, mutta päämäärä on tärkein. Kun tarkoituksena on esitellä kielen tiettyjä ominaisuuksia, esimerkeistä tulee helposti teennäisiä.

The Alchemist [09.03.2014 17:41:55]

#

Ei tuota kyseistä opasta voi oikein suositella pythonin opiskeluun, koska oppaan tekijät eivät välitä pythonista tuon taivaallista. Kaikki "hyvät käytännöt" vaikuttavat olevan huonoja käytäntöjä. Juuri nyt ollaan muutenkin tulossa siihen pisteeseen, ettei python 2:ta kannata enää miettiä, sillä kolmosversio alkaa saavuttaa de facto -standardin aseman.

jlaire [09.03.2014 18:08:22]

#

int jaettava = 3;

Ehkä opas on käännetty Java-oppaasta kovalla kiireellä? Parempi varmaan etsiä joku toinen, onneksi netissä riittää valinnanvaraa.

The Alchemist [09.03.2014 18:24:12]

#

Mullakin lipsuu aika herkästi tuollaisia tyypityksiä erityisesti pythonin ja joskus php:nkin kanssa, jos olen koodaillut enemmän jonkin ne vaativan kielen parissa. Jätin edellisestä viestistäni pois olettaman, että nuo python-opettajat ovat java-pappoja, joille nakitettiin uuden python-kurssin vetovastuu.

Chiman [09.03.2014 18:33:37]

#

jlaire kirjoitti:

int jaettava = 3;

Hah, noita en huomannutkaan ekalla selaamisella. Tosiaan, varmaan Java-opas on käännetty hätäisesti Pythoniksi. Puolipisteiden kohdalla on kuulunut iso huokaus ja ne on päätetty jättää sinne em. selityksellä.

The Alchemist [09.03.2014 19:35:26]

#

Puolipisteet selittyvät vain luennoitsijan vanhoillisella suhtautumisella pythonin erilaisuutta kohtaan. Ne saa pois parilla napautuksella search-replacea käyttäen. Oppaasta huokuu kauttaaltaan se, miten vähän python on tekijöitä kiinnostanut ja ettei sitä haluta itse oppia.

Grez [10.03.2014 09:28:46]

#

Noista puolipisteistä tuli mieleen, että miksi javascriptissä niitä tunnutaan aina tunkevan rivien loppuihin?

Muistelen että törmäsin joskus jopa johonkin minifieriin joka ei toiminut, jos rivien lopuissa ei ollut puolipisteitä.

The Alchemist [10.03.2014 10:32:59]

#

Javascriptissä puolipisteet ovat hyvä käytäntö ja pois jättäminen huono käytäntö tai jopa väärin. Javascriptin parsimissäännöt ovat erilaiset kuin pythonin. Pythonissa rivinvaihdot merkitsevät mutta js:ssä ne ovat vain redundanttia whitespacea.

Verrataan kahta koodinpätkää:

def foo():
    print("foo")

foo
()
var foo = function() {
  console.log("foo")

  return function() {
    console.log("omg")
  }
}

// ;

(function() {
  console.log("here")
})()

Python-versio ei tulosta mitään. Tämä siksi, että kahdelle riville pilkottu foo()-kutsu on kirjaimellisestikin kaksi eri käskyä. Ei siis "foo();" vaan "foo;" ja "();". Kumpikaan niistä ei itsenäisesti tee mitään.

Javascript-versio tulostaa kaksi riviä: foo ja omg. Pikaisesti vilkaisemalla voisi vaikuttaa siltä, että sen pitäisi tulostaa "here", mutta todellinen tulos onkin täysin päinvastainen. Jos poistaa kommentoinnin rivillä 9 olevan puolipisteen edestä, niin tulos korjautuu intuition mukaiseksi.

Jos tuon js:n evaluoinnin logiikka ei vielä auennut, niin tässä on kirjoitettu puolipisteetön versio skriptistä ihmiselle selvemmässä muodossa (huomioi muuttujan foo arvo):

var bar = function() {
  console.log("foo");

  return function() {
    console.log("omg");
  }
};

var baz = function() {
  console.log("here");
};

var foo = bar(baz);

foo();

Mielestäni python-esimerkki korostaa sitä, miksi on erityisen huono idea opetella käyttämään puolipisteitä jonkin toisen kielen kielioppisääntöjen mukaisesti. Pythonia ne eivät kiinnosta tuon taivaallista, mutta ne ovat omiaan sotkemaan sen, miten ihminen jäsentelee koodin omassa päässään. Samoin tietysti käy js:n kanssa, jos puolipisteitä ei käytä huolellisesti.

noquaa [10.03.2014 10:52:30]

#

Ohoh. En ollut edes juuri lukenut opasta sellaisenaan, koska olin tehnyt siitä ainoastaan tehtäviä. Eräistä tehtävistä kyllä huomasin, että pythonissa olisi valmis funktio jonkin toiminnon tekemiseksi, mutta tehtävän annossa tätä ei huomioida. Toisaalta myös hyvä, ikäänkuin tekemällä kyseessä oleva funktio.

Nää erityyppiset palikkatehtävät on varmasti hyviä opettelussa kuitenkin. On helpompi opetella, kun on jotain mitä seurata.

Grez [10.03.2014 10:58:35]

#

No tuo esimerkki nyt liittyy siihen, että funktiomäärittelyn jälkeen tulisi laittaa puolipiste, ei että jokaisen komennon jälkeen tulisi laittaa puolipiste.

Ainakin Mislav Marohnić on sitä mieltä että suositus käyttää puolipistettä perustuu FUDiin.

The Alchemist kirjoitti:

Pythonissa rivinvaihdot merkitsevät mutta js:ssä ne ovat vain redundanttia whitespacea.

Tuo ei selvästikään pidä paikkaansa:

var joo=1
var jaa=2
console.log(jaa+joo)

Tulos: 3

vs.

var joo=1 var jaa=2 console.log(jaa+joo)

Tulos: SyntaxError: Unexpected token var

The Alchemist [10.03.2014 11:09:30]

#

Noh, ota se yksi sana pois sieltä, niin johan helpottaa. Emmä nyt voi täysiä pisteitä antaa tuolle Marohnićin kirjoituksellekaan. Mies kirjoittaa artikkelin aiheesta "puolipisteet ovat turhia" ja lopettaa sen kappaleeseen, että eivät ne olekaan turhia, joten tietyissä tilanteissa käytä tällaista poikkeavaa ja siksi häiritsevän näköistä syntaksia just to be safe.

jlaire [10.03.2014 12:18:52]

#

Olen pari kertaa törmännyt virheelliseen return-lauseeseen, jonka puolipisteiden puutteesta huutava lint olisi löytänyt:

return
{
    x: 42,
    y: 15
};


return
    (a + b + c >= 10) &&
    (v * w * z < 0);

Tällaisen virheen debuggaaminen on kuitenkin todella helppoa, ja jos jättäisi puolipisteet jatkuvasti pois, reunatapaukset tulisivat varmasti tutuiksi nopeasti ja hyppäisivät silmille ennen kuin koodia edes ajetaan.

Vaikka olen tehnyt ihan merkittävän määrän töitä projekteissa, joissa lint ajetaan osana buildia, ei se ainakaan omasta koodistani ole koskaan löytänyt yhtäkään puolipistebugia, vaikka se huomauttikin unohtuneista puolipisteistä sillon tällöin. Selkeä koodaustyyli riittää välttämään monet patologiset ongelmatapaukset.

Itse käytän puolipisteitä tottumuksesta ja siksi, että sitä pidetään hyvänä tyylinä. Yleensä vaaditaan, että puolipisteiden poisjättäminen perustellaan, eikä toisin päin. Kovin vakuuttavia argumentteja suuntaan tai toiseen en ole kuullut ja minulle se on sinänsä ihan sama.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta