Kirjoittaja Aihe: Ohjelmointi harrastuksen aloittaminen  (Luettu 26461 kertaa)

AimoE

  • Käyttäjä
  • Viestejä: 2782
    • Profiili
Vs: Ohjelmointi harrastuksen aloittaminen
« Vastaus #60 : 05.09.16 - klo:10.11 »
En oo vähään aikaan taas lukenut palstaa mutta pari kyssäriä on

Mikä on anonyymi funktio? Toimiiko se puthonissa ?

Mikä on duck typing? Näin englantilaisessa tekstissä.

Löytyyhän nuo ihan kuuklella:

https://en.wikipedia.org/wiki/Anonymous_function
https://en.wikipedia.org/wiki/Duck_typing

Aloittelijan ei kannata käyttää energiaa noihin käsitteisiin heti alussa, se vaan sekottaa pään. Kannattaa keskittyä niihin asioihin joita aloittelijan tutoriaaleissa esitetään ja vasta sitten siirtyä monimutkaisempiin asioihin. Varsinkin tuo duck typing vaatii aika vahvan olio-osaamisen taustakseen. Kannattaa yrittää pienempiä haukkapaloja.

Postimies

  • Käyttäjä
  • Viestejä: 2644
    • Profiili
Vs: Ohjelmointi harrastuksen aloittaminen
« Vastaus #61 : 05.09.16 - klo:19.07 »
Joskus olen miettynyt voisiko Turbo Pascalille kirjoitettuja juttuja kääntää Free Pascalilla.
Onnekseni omat koodini Turbo Pascalilla ovat jo hävinneet bittiavaruuteen lerppujen ja korppujen kadottua (tai niiden bittien hävittyä ko. medioilta). Myös Turbo-C/C++ oli opiskelukielenäni. Object-Oriented Programming oli viimeisin opiskeluni muuri kiivetä yli asiallisen käyttämäni serpentiinikoodin - jalka lipesi ja bash-komentotulkin tai FreePascalin ohjein sain koodia suoritetuksi "omiin tarpeisiin".
Toki Gcc kääntää C-koodia, mutta koodaamiseni tavoitteet ovat (toisteksi) erityisen vaatimattomat.  Yleensä koodaaminen rajoittuu bash-skripteihin.

PS. Pascal oli nimenomaan opetuskäyttöön perustunut ohjelmointikieli.
https://fi.wikipedia.org/wiki/Pascal_(ohjelmointikieli)
Ja paluu nykyaikaan:
https://fi.wikipedia.org/wiki/Free_Pascal
Itselläni on jotain jäljellä. Taitaa jopa kääntäjä löytyä. Turbo Pascalista pidin koska käänsi nopeasti. C oli hidas... Inhosin sitä. Nykykoneilla kääntää nopeasti.
Eilen latasin gitillä Kodin kehitys version. Lataaminen ja tarvittavien kirjastojen asennus kesti kauemmin kuin varsinainen käännös. Joskus tuotakin
on käännetty parisen tuntia. Gitillä voi ladata jotain helppoa ja opetella debuggaamaan koodia ja tekemään siihen muutoksia. Lasarukselle löytyi Doublefractal
https://sourceforge.net/projects/doublefractal/ Sekin on hauskaa jos lisää tuonne jonkun oman fraktaalin tai muuttelee jo olemassa olevia.
Ajan saa kulumaan jos Mandelbrot joukkoa alkaa laskemaan tuhansilla desimaaleilla.

snifi

  • Vieras
Vs: Ohjelmointi harrastuksen aloittaminen
« Vastaus #62 : 05.09.16 - klo:23.19 »
Voisin yrittää valottaa tuota nimetöntä muuttujaa Haskell-kielellä. Määritellään funktio `square`, joka palauttaa luvun neliön. Esimerkiksi luvun 6 neliö on 6*6=36.

Koodia: [Valitse]
> let square x = x*x
> square 6
36

Nimettömänä funktiona edellinen saa muodon: "nimetön funktio parametrilla x palauttaa arvon x*x". Nuolimerkintä tulee matematiikan sanontatavasta "kuvautuu arvolle" ja nimettömän funktion nimi matematiikassa on "lambda", jota Haskell-kielen kenoviiva symbolisoi.

Koodia: [Valitse]
> (\x -> x*x) 6
36

Seuraavassa `xs` on lista kokonaislukuja

Koodia: [Valitse]
> let xs = [1..10]
> xs
[1,2,3,4,5,6,7,8,9,10]

Nyt lista `xs` kuvattuna funktiolla `square` tai vaihtoehtoisesti nimettömällä funktiolla `\x -> x*x` palauttaa listan alkiot korotettuna neliöön.

Koodia: [Valitse]
> map square xs
[1,4,9,16,25,36,49,64,81,100]
> map (\x -> x*x) xs
[1,4,9,16,25,36,49,64,81,100]

Sama listamuodostimilla:

Koodia: [Valitse]
> [x*x | x <- xs]
[1,4,9,16,25,36,49,64,81,100]

DDR55

  • Käyttäjä
  • Viestejä: 101
    • Profiili
Vs: Ohjelmointi harrastuksen aloittaminen
« Vastaus #63 : 05.09.16 - klo:23.45 »
Mitä anonyymillä funktiolla voi tehdä mitä tavallisella ei voi? Miten teen sen Python 3 kielellä?

En tajua vieläkään mikä on duck typing. Mitä siitä hyötyy?
Pääkone: Ubuntu 16.04 (käsin käänetty reaaliaikainen rtlinux)
Varakone1: Centos 7
Varakone2: Windows 10
Luuri: Android 5.0

Lepotila zZ

  • Käyttäjä
  • Viestejä: 347
    • Profiili
Vs: Ohjelmointi harrastuksen aloittaminen
« Vastaus #64 : 06.09.16 - klo:00.17 »
Mitä anonyymillä funktiolla voi tehdä mitä tavallisella ei voi? Miten teen sen Python 3 kielellä?

Nimihän sen jo kertoo: Sille ei tarvitse antaa nimeä. Käytännössä sen määrittely hoituu pienemmällä määrällä koodia ja siksi sen käyttö voi olla joissakin yhteyksissä kätevää ja lisätä koodin luettavuutta. Tavallisia funktiota ne kuitenkin ovat, joten ei niillä ole mitään ihmevoimia, joita ei ole nimetyillä funktioilla.


En tajua vieläkään mikä on duck typing. Mitä siitä hyötyy?

Ei sitä ole tarpeen ymmärtääkään, koska se joko tulee tai ei tule valitsemasi ohjelomointikielen mukana. Kunhan käytät jonkin aikaa kieltä, jossa se on, ja sitten siirryt kieleen, jossa sitä ei ole, löydät vastauksen helposti.

DDR55

  • Käyttäjä
  • Viestejä: 101
    • Profiili
Vs: Ohjelmointi harrastuksen aloittaminen
« Vastaus #65 : 06.09.16 - klo:00.50 »
No eikö sitä kukaan osaa selittää ilman ympäri pyöreitä vastauksia? Jos vastauksen löytää helposti niin eikö sen voi vaan sanoa suoraan?

Ei Tämä mikään arvuutus peli pitänyt olla ollenkaan vaan aloittelijoiden neuvomis  ketju.
Pääkone: Ubuntu 16.04 (käsin käänetty reaaliaikainen rtlinux)
Varakone1: Centos 7
Varakone2: Windows 10
Luuri: Android 5.0

Lepotila zZ

  • Käyttäjä
  • Viestejä: 347
    • Profiili
Vs: Ohjelmointi harrastuksen aloittaminen
« Vastaus #66 : 06.09.16 - klo:01.01 »
No eikö sitä kukaan osaa selittää ilman ympäri pyöreitä vastauksia? Jos vastauksen löytää helposti niin eikö sen voi vaan sanoa suoraan?

Koska duck typingin hyödyt ja haitat kuuluvat ohjelmointikielten suunnittelijoiden osaamisalueeseen. He varmasti osaavat kertoa niistä. Mutta, miksi oletat, että ymmärtäisit mitään vastauksesta ilman käytännön ohjelmointikokemusta? Sanat ja käsitteet tulevat määritellyksi käytännössä ja ohjelmoinnin käsitteiden yhteydessä se käytäntö on ohjelmointi. Ilman kokemusta, keksit vain mielikuviteksessasi käsitteille merkityksiä (mielikuvia) ja uskot ymmärtäväsi asian. Mitä se hyödyttää?

Mikä hoppu sinulla on arvottamaan ohjelmointikielten kehittäjien ratkaisuja ennen kuin opettelet edes yhden kielen kohtuullisesti ja toteutat sillä jonkin projektin?

Ei duck typingin etuja ja haittoja kerrota ohjelmoinnin alkeiskurssilla. Siellä opetetaan yleensä yksi ohjelmointikieli. Sen kurssin jälkeenkään oppilaat eivät ole päteviä arvioimaan duck typingin hyötyjä ja haittoja, koska se vaatii kokemusta useammasta kielestä.

Jos sinulla on jo kokemusta useammasta ohjelmointikielestä, edessä annettu linkki Wikipedian artikkeliin on hyvä selitys. Lue se.
« Viimeksi muokattu: 06.09.16 - klo:01.13 kirjoittanut Lepotila zZ »

JaniAlander

  • Käyttäjä / moderaattori+
  • Viestejä: 3369
    • Profiili
Vs: Ohjelmointi harrastuksen aloittaminen
« Vastaus #67 : 06.09.16 - klo:02.07 »
Joskus olen miettynyt voisiko Turbo Pascalille kirjoitettuja juttuja kääntää Free Pascalilla. Ongelmaksi muodostuu VGA-näytölle kirjoitetut grafiikka käskyt. Ehkä tuo Free Pascal osaa kirjoittaa pisteen näytölle. Dos aikoina tehtiin ohjelmia joissa grafiikka ja tekstitilaa vaihdeltiin. Nyt muistia olisi vaikka kirjoittasi koko näytön sisällön johonkin muuttujaan väreineen.

Jonkun teiniaikojen tekstiseikkailupelin mistä lähdekoodit oli tallella käänsin Linukkeelle ja FreeBSD:lle harvojen graafisten osuuksien kääntämiseen en sitten vaivautunut (lähinnä Borland Pascalin ja TurboPascalin grafiikkakäskyjä) vaan pistin ne pätkät kommentteihin. Ääkköset piti MS-DOS kamasta muuttaa, muuten kääntyi kiltisti.
Core i5-9400F 2.9ghz 32GB Ram, Nvidia RTX2060 Kubuntu 24.04-64bit, Windows 10 Pro 64-bit Samsung Series 5, AMD A-6 2.1 GHz 4 Gt Ram, Ubuntu 18.04 64-bit.
Lenovo T60 Core2Duo 2GB Ram Ati Mobility Radeon 128 MB Ubuntu Mate 16.04-64bit
Commodore Amiga 500 1MB Ram.

Lepotila zZ

  • Käyttäjä
  • Viestejä: 347
    • Profiili
Vs: Ohjelmointi harrastuksen aloittaminen
« Vastaus #68 : 06.09.16 - klo:02.25 »
Jatkan vielä hieman: Ohjelmointikielet ovat jonkin sortin käyttöliittymiä ohjelmoijille. Miksi jokin kielen ominaisuus on hyvä tai huono, voi olla objektiivinen kysymys, mutta usemmiten kyse on subjektiivisesta arvostelmasta. Aivan sama kuin se, että jotkut pitävät Ubuntun Unitystä ja toiset eivät voi sietää sitä. Unityä kannattaa kokeilla jonkin aikaa ja muodostaa sitten oma arvostelma. Turha lukea muiden kommentteja ja tehdä johtopäätöksiä niiden perusteella. Ohjelmointikielten arviointi vaatii vielä enemmän kokemusta kuin työpöytäympäristöjen arviointi, ja on vaikeaa erottaa objektiiviset seikat subjektiivisista.

Moni arvostettu ja fiksu ohjelmoija ei suostu koskemaan Pythoniin pitkällä tikullakaan, koska siinä on välilyönneillä (ja/tai sarkaimella) syntaktinen rooli. Minua asia on harvemmin haitannut. Ei ole mahdollista tietää omaa suhtautumista tuohonkaan piirteeseen ilman, että käyttää Pythonia ainakin jonkin aikaa. Sitten joko törmää arsyttäviin ongelmiin sen kanssa, tai sitten ei törmää ongelmiin ja sen sijaan arvostaa sen tuomaa yhdemukaista muotoilua, joka ei voi antaa väärää kuvaa koodin toiminnasta.

Duck typing liittyy kiinteästi Pythonin luonteeseen: Virheilmoitus tulee ajonaikaisesti kun tulkki ei kykene tekemään jotakin, mitä ohjelma näyttää vaativan siltä. Tyypeillä ei ole niin väliä, kunhan tulkki ei ajaudu tilanteeseen, jossa se ei voi jatkaa suoritusta. Tämä mahdollistaa joskus asioiden toteuttamisen vähäisemmällä koodilla kuin mitä on mahdollista vahvemmin tyypitetyillä kielillä. Toisaalta ne mahdolliset ajonaikaiset virheilmoitukset vääristä tyypeistä... Onko se nyt sitten hyvä tai huono ominaisuus? Minä pidän siitä. Python ei olisi Python ilman sitä.

Duck typing on siis sitä, että Python tulkki ei välitä olioiden tyypistä kunhan niistä löytyvät ne metodit ja/tai attribuutit, joita suoritettava ohjelma olettaa niillä olevan. Monessa muussa kielessä jo kääntäjä vaatii, että olio on tiettyä tyyppiä, ja olioiden tyyppi on määriteltävä eksplisiittisesti, esimerkiksi perinnän kautta.

Varmaan oikeat ohjelmoijat korjaavat, jos selitykseni menivät pahasti pieleen...