Olen tässä aikani kuluksi pohdiskellut ohjelmointikielien syntaksien ja toimintojen toteuttamisen eroja ja nyt kaipaan vähän teidänkin mielipiteitä.
Eli hieman taustaa, että itse olen koulusta alunperin Pythonin oppinut koodari. Aluksi Python tuntui hankalalta, kun ei minulla ennestään mitään kokemusta koodailusta ollut ja jouduinkin opettelemaan BASIC:in puolella perusasioita, joista oli todellakin hyötyä myöhemmin. Nykyään koodailut sujuvat mallikkaammin ja ei ole viimeaikoina OP:stäkään apua tarvinnut kysyä ;)
Nyt kun Python sujuu kuin vettä vaan ja sillä syntyy jos jonkinmoisia ohjelmia, olen miettinyt, että sen helpon syntaksin ja toteututavan oppineena esimerkiksi niinkiin perinteisten kielien kuin C++ ja Java, oppiminen on huomattavan hankalaa!
Esimerkiksi molemmissa kielissä törmään {} ja ; merkkien aiheuttamiin virheisiin kokoajan. Toinen ongelmakohta yleensä on se, että unohtuupi esitellä muuttujat... Kolmas ongelma on se, että kun on tottunut Pythonin helppoihin rutiineihin, esim. C++:lla dictionaryjen puuttuminen aiheuttaa hampaiden kiristystä.
Nyt päästään siihen mielipideosioon. Pitäisikö ohjelmointikielien olla tulevaisuudessa Pythonin tapaa helposti käytettäviä ja toteutettavia vai olisiko esimerkiksi kouluissa paras opettaa Pythonin sijasta perinteisiä kieliä, jotta niiden klassinen syntaksi jäisi paremmin ohjelmoijien päähän?
Ja vielä huomion arvoinen asia, että kielillä voi toteuttaa samoja asioita, mutta Pythonilla ne tuntuvat lapsellisen helpoilta...
Huhhuh, tulipahan taas tästä viestistä romaani. Jos jotain saitte irti, niin kommentoikaa :)
Isopaha kirjoitti:
Toinen ongelmakohta yleensä on se, että unohtuupi esitellä muuttujat...
No tätä nyt en pitäisi hirveän isona ongelmana. Kääntäjähän kertoo ne mitkä unohtaa ja ne voi lisätä. Pikemminkin ongelmia voisi kuvitella siitä, että käyttää muuttujaa joka ei olekaan määritelty (jos kieli ei sitä vaadi) tai esim. typottaa muuttujan ja tästä tulee ajonaikainen virhe. Mielestäni on parempi että virhe pomppaa kääntäessä kuin vasta ajossa.
Isopaha kirjoitti:
Kolmas ongelma on se, että kun on tottunut Pythonin helppoihin rutiineihin, esim. C++:lla dictionaryjen puuttuminen aiheuttaa hampaiden kiristystä.
Mikä estää ottamasta dictionaryä käyttöön C++:ssa? Varmaan valmiita löytyy ziljoonittain ja omankin voi koodata helposti.
Isopaha kirjoitti:
Pitäisikö ohjelmointikielien olla tulevaisuudessa Pythonin tapaa helposti käytettäviä ja toteutettavia vai olisiko esimerkiksi kouluissa paras opettaa Pythonin sijasta perinteisiä kieliä, jotta niiden klassinen syntaksi jäisi paremmin ohjelmoijien päähän?
Pohditaanko samalla, onko teknisissä käsitöissä järkevämpää opetella sahan vai poran käyttöä...
Enkä minä nyt sanoisi, että Python on itseisarvoisesti äärettömän helppo. Toki suomea äidinkielenään puhuvalle suomen syntaksi ja kielioppi on helppo verrattuna vaikka ruotsiin, mutta ruotsia äidinkielenään puhuville taas ruotsi on helpompaa.
Itse kun siirryin 7. luokalla CoolBasicista C++:aan, ei ongelmia syntaksin puolesta ollut. Tai mitä nyt joskus jäi puolipilkku laittamatta rivien päätteeksi. Hypyn pitäisi olla melko kivuton kunhan ei mennä "erikoiskieliin" kuten funktionaalisiin ja esoteerisiin. Asmikaan ei olisi välttämättä hyvä ensimmäiseksi kieleksi.
Jos perussyntaksi oikeasti tuottaa isoja ongelmia, kannattaa kokeilla jotain Lispiä. Minä en kylläkään käsitä, mikä aaltosuluissa ja puolipisteissä voi olla hankalaa. Muuttujien esittelyynkin pitäisi tottua nopeasti, se ei tosin ole niinkään syntaksikysymys.
Jankutit pelkästään tuosta Pythonista, mutta tarkoititko yleisesti korkean tason kieliä? Ne ovat varmaan vähän helpompia aloittelijoille kuin C tai C++, mutta en tiedä onko sillä niin hirveästi väliä, millä aloittaa. Paljon tärkeämpää on, ettei jymähdä pelkästään siihen pitkäksi aikaa vaan opettelee monta muuta lisäksi.
Jos uuden kielen opettelu tuntuu hankalalta, kannattaa muistaa, että siltä sen ensimmäisenkin tuntui aluksi. Sitten kun osaat hyvin useamman eri kielen, se ensimmäinen ei välttämättä tunnu erityisen helpolta enää vaan joku muu voi olla jopa paljon parempi. Toisaalta jos uusi kieli on todella samanlainen kuin joku jonka jo osaat ja sen opetteleminen todella helppoa, siitä ei välttämättä ole mitään hyötyä.
Grandi kirjoitti:
Hypyn pitäisi olla melko kivuton kunhan ei mennä "erikoiskieliin" kuten funktionaalisiin ja esoteerisiin.
Funktionaalisen (ja logiikka- ja pino- ja ...) ohjelmoinnin opettelusta on hyötyä nimenomaan siksi, että siinä oppii paljon uutta jos aiemmin on ohjelmoinut pelkästään "tavallisilla" kielillä.
Esoteeriset ovat sitten ihan oma lajinsa, yleensä niitä käytetään/suunnitellaan/toteutetaan pelkästään huvin vuoksi.
Isopaha kirjoitti:
Nyt päästään siihen mielipideosioon. Pitäisikö ohjelmointikielien olla tulevaisuudessa Pythonin tapaa helposti käytettäviä ja toteutettavia vai olisiko esimerkiksi kouluissa paras opettaa Pythonin sijasta perinteisiä kieliä, jotta niiden klassinen syntaksi jäisi paremmin ohjelmoijien päähän?
Tässähän kysytään kahta aivan eri asiaa. "Perinteiset kielet" eivät tule katoamaan mihinkään, vaan esimerkiksi itse olen koodannut työprojekteja c:llä viime ja tänä kesänä. Niihin projekteihin se oli selvästi paras vaihtoehto, vaikka jotkut pitävätkin c:tä jonkinlaisena muumiona menneisyydestä.
Jälkimmäiseen vastaisin, että kouluopetuksessa pitäisi panostaa alkuvaiheessa enemmänkin ohjelmoinnin eikä koodaamisen opettamiseen. Eli logiikka suurempaan arvoon kuin syntaksi. Tässä tietysti auttaa, jos valitaan kieli, jossa syntaksi ei tuota ongelmia. Sinänsä syntaksista toiseen hyppäämisen ei pitäisi olla mikään ongelma, muiden ominaisuuksien muuttuminen sen sijaan voi ollakin jonkinlainen kynnyskysymys.
lainaus:
Ja vielä huomion arvoinen asia, että kielillä voi toteuttaa samoja asioita, mutta Pythonilla ne tuntuvat lapsellisen helpoilta...
Riippuu aivan siitä, mitä tekee. James Newtonin legendaarista vastausta kysymykseen "Mikä logiikkaperhe on paras ja miksi?" lainatakseni:
James Newton kirjoitti:
Before I answer that question, let me just say that the hammer is the best tool. No other tool is better, no matter the application, than the hammer. In every case, where I need a tool, I reach for the hammer. Loosen a bolt? Hammer. Cut wood? Hammer. Milling complex shapes out of metal? Hammer.
Now, about the best logic family: That depends on the application. Each has advantages and disadvantages and you must try to match those to what is important in each specific application.
But when the time comes to insert the IC into the socket? Be sure to use a hammer.
Itte PHP:lla tuli koodailtua ennen C++:aa ja php:n syntaksi on lähes identtinen C:n kanssa että ei mitään ongelmia. Kuitenkin PHP on hieman helpompi eikä yhtä tiukkapipo asioiden suhteen että PHP:lla voi niinsanotusti vaikka harjoitella ensin.
Isopaha kirjoitti:
esim. C++:lla dictionaryjen puuttuminen aiheuttaa hampaiden kiristystä.
Nimenomaan tuolla nimellä C++:sta ei toteutusta löydykään, mutta suosittelisin vilkaisemaan C++:n standardikirjaston map-containeria.
Nyt kun puhuit tuosta että oli pythonista C++:aan siirtyessä ongelmia muistaa määritellä muuttujat, niin tiedätkös että minulla oli pythonia opetellessa juuri päinvastainen ongelma: C++:ssa kääntäjä älähtää jos käytetään muuttujaa jota ei ole määritellyt, mikä useimmiten tarkoittaa typoa nimessä. Pythonilla koodatessa sitten aina kun typotti muuttujan, niin vikaa ei tahtonut löytyä millään koska ei ollut kääntäjää vinkumassa. Muutenkin minua ärsyttää skriptikielissä juuri se piirre, että virheet tulevat esiin vasta ajon aikana, jos silloinkaan.
Mutta, turha siitä on kinata että kummanlaisia kieliä pitäisi käyttää, molemmat ovat hyödyllisiä ja tarpeellisia.
Tässä on hyvä lista siitä, mitä kieliä kannattaa opetella, jotta saisi tajuntaansa laajennettua: http://www.informit.com/articles/
Sanotaanko taas ties monennen kerran; valita kieli sen mukaan mikä kiinnostaa.. Nettisivut => PHP, Moderni peli => C(++)/SDL, Työpöytäsovellus => Java/C#/VB jne.
Koulussa jossa oikeasti on tarkoitus oppia ohjelmoimaan sitten se perinteinen C on ihan hyvä tapa startata, siinä tulee paljon tärkeitä asioita yhdellä mäjäytyksellä (ja sitä kuitenkin tarvitsee vielä nykyäänkin melkeinpä jokapuolella). "Perinteiset" kielet tuskin tulevat katoamaan mihinkään piitkään aikaan (ts. tietokonemaailmassa ainakaan 5 vuoteen ;).
Kun lukee näitä vastauksia, niin kyllähän se saa tajuamaan paremmin asioita. Tärkeää on tosiaan muistaa se, että kieli on valittava käyttöön koodarin tarpeen mukaan, eikä sen takia, että mikä tuntuu parhaimmalta. Eri kielissä on erilaisia toimintoja (ja filosofioita), joiden saavuttaminen vaatii erilaisen syntaksin.
Toinen järkevä juttu, josta tkarkkainen mainitsi, on se, että ohjelmointia opetellessa ei pitäisi opetella kieltä, vaan logiikkaa. Ohjelmointikielihän on vain työkalu yhdistää logiikka ja toteutus siten, että tietokone kykenee sen käsittelemään.
Itse olen tosiaan vähän jämähtänyt Pythoniin ja yritänkin sivistää itseäni opettelemalla muitakin kieliä. Vaikka Python hyvä kieli onkin, sillä ei kaikkea voi toteuttaa.
Nämä pohdiskelut nollaavat tuon mielipidekysymyksen, joten siihen ei enään välttämättä tarvitse vastailla ;)
Peesaan tkarkkaista myöskin. Itse syntaksi ei ole mielestäni aluksi tärkeää. Sen sijaan pitäisi keskittyä kertomaan perusteita ohjelmoinnista itsestään. Mikä on funktio, mikä on luokka, mikä on kääntäjä, mikä on muuttuja, mikä on looginen operaattori ja niin edelleen.
Kun sitten lähdetään ihan sieltä aloittelijatasolta, yksinkertaisen funktion luominen onnistuu kyllä suht helpolla, oli se kieli sitten c, c++, python, ???basic tai mikä tahansa.
Mutta itse asiaan. Toivottavasti ohjelmointikielien runsaudenpula ei helpota. Näen jatkossakin mielelläni mitä moninaisempia tulkkeja ja kääntäjiä.
kyllähän nuo syntaksierot vähän hankaluuksia aina aiheuttaa, näin vb puolelta c maailmaan siirtyneen kokemuksella ainakin.
mutta kyllä se siitä kun vaan uutta kieltä opetellessa pysyy siinä uudessa opeteltavassa kielessä vaan tarpeeksi kauan, eikä kellottele koko ajan vanhan ja uuden välillä ja pohdi syntaksieroja.
Jackal von ÖRF linkkasi Informit-jutun, jossa on pieniä epätarkkuuksia. Turha kai niitä on oikoa, mutta aina jaksaa yrittää.
Jostakin syystä nämä listat jännistä kielistä, joita ehdottamasti kannattaa opetella, aina kertovat, että funktionaalisissa ja logiikkakielissä ei ole muuttujia, tai ei ainakaan globaaleja muuttujia. Itse asiassa niillä voi yleensä ohjelmoida aivan niin kuin niissä olisi.
Syynä on ehkä pieni sekaannus sen suhteen, mitä muuttujat ovat. Niin sanotussa tavallisessa kielessä muuttuja tarkoittaa kahta eri asiaa. Se voi olla nimi, joka on annettu jollekin arvolle, tai sitten se voi tarkoittaa muistialuetta, joka on varattu muuttujan sisällön säilyttämiselle.
Esimerkiksi lauseessa x = x + 3;
tarkoittaa vasemmalla puolella oleva x paikkaa, mihin x:n uusi arvo sijoitetaan. Oikealla se taas tarkoittaa x:n arvoa, joka haetaan muistista (toivottavasta ennen kuin sen päälle sijoitetaan toinen arvo :-). Käytännössä tätä asiaa mutkistaa se, että kääntäjä voi nostaa x:n sijainnin prosessorin rekistereihin tai muuten optimoida ja muuttaa ohjelman rakennetta, kunhan sen merkitys pysyy samana. Siis kirjaimellisesti ei aina ole kysymys muistiosoitteesta, missä x asuu.
Näissä muissa kielissä voi määritellä sekä arvoja, että muistia, johon arvoja sijoitellaan. Sitä vain ei tehdä samalla tavalla. Tyypillisesti nämä muistipaikat kulkevat esim. viittausalkion (reference cell) nimellä. Niitä löytyy ihan siitä Haskellistakin, jossa ei muka muuttujia ole ollenkaan, nimellä IORef tai STRef.
Prologissa taas voi ajon aikana lisätä uusia faktoja tietokantaan tai poistaa sieltä niitä. Tämän avulla tietenkin voi oivallisesti päivittää jotakin tietoa aina halutessaan, mikä tieto on sitten käytännössä aivan kuin globaali muuttuja.
Ehkä se oppi mitä näitä kieliä pintapuolisesti oppimalla saa on sitten se, että muuttuvia muuttujia ei niissä aina tarvita. Voisi silti toivoa, että ihan virheellisiä väitteitä niistä ei esitettäisi.
Tässä vielä sellainen tulos, minkä Google-taitoinen löytäisi itsekin:
http://gollem.science.uva.nl/SWI-Prolog/Manual/gvar.html
Yleensäkin kielistä muka puuttuvat ominaisuudet voi monesti lisätä niihin ihan äärellisellä työmäärällä. Aina se ei ehkä ole järkevää, kun ne tarpeelliset ominaisuudet löytyvät muualta valmiina, mutta sellaiset väitteet, että kielessä X ei ole Y:tä yleensä kertovat lähinnä niiden esittäjän osaamattomuudesta. Sanokaa vaan rehellisesti, että ette osaa vielä tehdä Y:tä X:llä. Ei se ole häpeäksi tunnustaa rajansa.
Lisäksi ajatus, että jokin kieli kannattaa opetella siksi, että siinä on jänniä juttuja tai se laajentaa tajuntaa on aika naiivi. Asiat kyllä kannattaa minusta opetella käyttöä varten. Tuosta Informitin artikkelista puuttuivat täysin kaikki konkreettiset esimerkit. Toisaalta, jos niitä sinne lisäisi, niin tl;dr...
Konkreettisella esimerkillä voisin tarkoittaa vaikka tällaista:
http://www.emn.fr/x-info/coccinelle/
Tämäkin voisi herättää ihan aitoa uteliaisuutta jossakussa ja saada pohtimaan, että miksi tämä on tehty juuri OCamlilla (siis millä? kysyi joku takarivissä :-). Huomattavaa olisi myös, että nyt ei yritetä laajentaa kenenkään tajuntaa, vaan vain tehdä ihan oikea työkalu hyötykäyttöön.
Lisää vuodatuksia aiheesta EI ole luvassa. Myönnän täyden vapauden kaikille käyttää juuri niitä kieliä, mitä haluavat, sekä olla opettelematta yhtään uutta, jos ei haluta. Eri asia, jos pomo käskee, mutta se maksaakin toivottavasti käskytettävälle myös palkan.
P.S. Ajattelin rakentaa Mustille kopin. Mikä vasara on paras ja nopein? Olisi hienoa, jos siinä olisi tyylikkäitä raitoja, koska olen tottunut käyttämään raidallisia vasaroita.
Pekka Karjalainen kirjoitti:
P.S. Ajattelin rakentaa Mustille kopin. Mikä vasara on paras ja nopein? Olisi hienoa, jos siinä olisi tyylikkäitä raitoja, koska olen tottunut käyttämään raidallisia vasaroita.
Kun osaa käyttää yhtä vasaraa, niin toisen käytön oppii nopeasti, koska niiden erot ovat pieniä - yksi vasara on hieman pienempi ja tarkempi, toinen on isompi ja voimakkaampi, kolmannen kahva on ergonomisemmin muotoiltu, joissain on tasainen pää, toisissa pyöreä pää, osalla pystyy nyhtämään nauloja myös irti, osalla ei (vrt. saman ohjelmointiparadigman kielet). Mutta jos vasaran lisäksi osaa käyttää täysin erilaisia työkaluja, kuten ruuvimeisseliä, sahaa, poraa, naulapyssyä ja pensseliä, niin pystyy valitsemaan sopivimman työkalun käyttötarkoituksen mukaan, kun mikään erilaisista vasaroista ei sovi. Välillä parhaaseen tulokseen pääsee yhdistämällä eri työkaluja, kuten vasaran ja taltan. Toisaalta, jos ei koskaan olekaan käyttänyt muuta kuin vasaraa, niin sitten sitä yrittää käyttää kaikkeen, vaikka se ei siihen soveltuisikaan.
Lainaus; "Toisaalta, jos ei koskaan olekaan käyttänyt muuta kuin vasaraa, niin sitten sitä yrittää käyttää kaikkeen, vaikka se ei siihen soveltuisikaan."
Eli ei kannata maalata ulkovuorausta vasaralla, vaikka ne laudat sinne vasaran avulla naulattiinkin ;D
Toisaalta jos opettelee käyttämään parasta työkalua, eli jeesusteippiä, niin sillä voisi korjata kaikkea, vaikkakaan se aina ole se paras mahdollinen :D
Itsellä onkin aika paljon noita jeesusteippivirityksiä itsellä. Eli pikku softia omaan tarpeeseen jotka ajaa asiansa, mutta joita ei sellaisenaan kehtaa näyttää muille.
funktio kirjoitti:
...
Roskalehtimoodi käytössä kun asiayhteydestä poistettuja puolikkaita lauseita aloit kommentoimaan? ;)
Ja jos on kiinnostunut algoritmeista, tietorakenteista ja ohjelmoinnista yleensä voivat korkeamman tason kielet olla omiaan; ajoaika ei ole kriittistä, kielellä saa nopeasti paljon aikaan, tärkeimmät tietorakenteet ovat yleensä valmiina kielen rakenteessa ja standardikirjastoissa ja oppimiskynnys on matala.
Koulujen tapaa opettaa C:tä ensimmäiseksi tuleville ammattikoodareille kommentoin hyväksi käytännöksi, sillä oppilaitoksissa se opetetaan kuitenkin jossain vaiheessa, ja siinä tulee paljon tärkeitä asioita opetettua kerralla (paitsi ohjelmoinnista niin koneen sielunelämästä yleensäkin). Eikä sitten tule ongelmaa näiden tylsien rutiinien ja puutteellisten kirjastojen kanssa joista aloittaja mainitsi, vaan päinvastoin tuntee ainaista riemua kun pääsee valmiin pöydän ääreen korkeamman tason kielien kanssa ;)
Jackal von ÖRF kirjoitti:
osalla pystyy nyhtämään nauloja myös irti, osalla ei (vrt. saman ohjelmointiparadigman kielet)
En onnistunut keksimään mitään järkevää ajatusta, mitä olisit voinut tarkoittaa, tämän vertauksen pohjalta.
Jackal von ÖRF kirjoitti:
Toisaalta, jos ei koskaan olekaan käyttänyt muuta kuin vasaraa, niin sitten sitä yrittää käyttää kaikkeen, vaikka se ei siihen soveltuisikaan.
Olen kuullut saman tarinan. Tämä tarinan vasaravimma taitaa päteä, kuten monet ohjelmoijien pehmeämmät puheet, vain toisiin ohjelmoijiin, eikä koskaan tarinan kertojaan itseensä :)
Valitettavasti en halua nyt jatkaa tätä syvällistä keskustelua tämän pidemmälle.
Pekka Karjalainen kirjoitti:
Olen kuullut saman tarinan. Tämä tarinan vasaravimma taitaa päteä, kuten monet ohjelmoijien pehmeämmät puheet, vain toisiin ohjelmoijiin, eikä koskaan tarinan kertojaan itseensä :)
Ongelman voi toki tiedostaa, vaikka kärsisi siitä itse.
Eli seinän maalauksessa voisi ajatella kolme eri tilannetta:
Huonoin) Käyttää maalaamiseen vasaraa kun ei tiedä paremmasta.
Toiseksi huonoin) Tietää että kannattaisi käyttää muuta työkalua, mutta maalaa silti vasaralla kun ei esim. ehdi opetella muuta. (Seuraavaan kertaan mennessä sitten opettelee)
Paras) Selvittää parhaiten maalaamisen soveltuvan työkalun, opettelee sen käytön ja maalaa sillä.
Tietenkin jos maalattava alue ja lopputuloksen laatuvaatimus on pienempi kuin se paremman työkalun opettelun vaiva, niin sitten kannattaa maalata vasaralla.
hienoja aforismeja löytyy!
itse pidän kieliä enemmänkin työkalupakkeina.
jossain pakissa on se vasara, ja toisessa tarpeeksi iso ruuvari jota
kuitenkin voi käyttää pieniä nauloja vasaroidessa kunhan lyö tarpeeksi lujaa.
jos tarttee tapetoida niin en ota sitä pakkia missä kaikki perustyökalut on, ja tee itselleni sopivia työkaluja tapetointiin, vaan ennemmin otan sen missä on jo valmiiksi sopivat.
Saavutetaankohan näitä työkaluanalogioita käyttämällä jotain erityistä etua siihen nähden, että puhuttaisiin ohjelmointikielistä ihan vaan ohjelmointikielinä?
Oikea työkalu oikeaan tehtävään luonnollisestikin helpottaa asioita. Jollain kielellä jonkun asian tekeminen voi olla huomattavasti helpompaa kuin jollain toisella. Ja näkökulmia voi olla useita.
Ei tainnut tuoda mitään uutta tämä viesti.
Lähinnä noista työkaluanalogioista on se hyöty, että kaikki tietää mitä vasaralla kannattaa tehdä ja mitä ei. Jos aletaan puhumaan vaikka Rubystä ja Haskellista, niin nuo eivät sano paljon mitään niille, jotka eivät ko. kieliä tunne.
Pekka Karjalainen kirjoitti:
Jackal von ÖRF kirjoitti:
osalla pystyy nyhtämään nauloja myös irti, osalla ei (vrt. saman ohjelmointiparadigman kielet)
En onnistunut keksimään mitään järkevää ajatusta, mitä olisit voinut tarkoittaa, tämän vertauksen pohjalta.
Kun osaa käyttää yhtä olio-ohjelmontikieltä, niin toisen käytön oppii nopeasti, koska niiden erot ovat pieniä - yhdellä kielellä pääsee lähelle rautatasoa ja muistiosoitteita, toisessa kieli suojelee ohjelmoijaa matalan tason asioilta ja huolehtii muistinhallinnasta automaattisesti, osa kielistä on luokka- ja osa prototyyppi-perustaisia, jotkut ovat staattisesti tyypitettyjä, toiset dynaamisesti tyypitettyjä, jotkut kielet pitää kääntää, toiset voi suorittaa tulkittuna skriptinä, osalla pystyy harrastamaan metaohjelmointia, osalla ei (vrt. erityyppiset vasarat). Mutta jos oliokielen lisäksi osaa käyttää täysin erilaisia ohjelmointikieliä, kuten funktionaalisia (Haskell), rinnakkaisuuskeskeisiä (Erlang), makroja tukevia (Lisp), predikaattilogiikkaan pohjautuvia (Prolog) ja assemblyä (x86, Javan tavukoodi, näytönohjainten vertex ja pixel shaderit), niin pystyy valitsemaan sopivimman ohjelmointikielen käyttötarkoituksen mukaan, kun jokin muu paradigma sopii tilanteeseen paremmin kuin olioparadigma. Välillä parhaaseen tulokseen pääsee yhdistämällä eri työkaluja, kuten olio- ja funktionaalisen ohjelmoinnin. Toisaalta, jos ei koskaan olekaan tehnyt muuta kuin olio-ohjelmointia, niin sitten sitä yrittää käyttää kaikkeen, vaikka se ei olisikaan siihen paras vaihtoehto.
Mutta toisin kuin fyysisillä työkaluilla, yhden paradigman ohjelmointikieltä voi jossain määrin pystyä käyttämään toisen paradigman mukaisesti. Esimerkiksi vaikka Java tukee parhaiten olio- ja proseduraalista ohjelmointia, niin ottamalla vaikutteita funktionaalisista kielistä pystyy kirjoittamaan parempaa Java-koodia mm. suosimalla immutable-olioiden käyttöä. Tai sitten voi esim. ottaa mallia Erlangista ja käyttää järjestelmän rakenteessa samanlaista viestinvälitystä. Jos tätä vertaa työkaluihin, niin voisi olla, että henkilöllä on ristipäinen ruuvimeisseli ja hän tietää miten poraa käytetään, mutta kun pitää kaivertaa muovilevyyn tai pahviin pieni kolo ja poraa ei ole käsillä, niin hän ottaa ruuvimeisselin ja tekee kolon painamalla ja pyörittämällä ruuvimeisseliä siinä - ei mitenkään optimaalista, mutta voi välillä hoitaa homman. Tai henkilö tietää kuinka vasara toimii, mutta hänellä on pelkkä jakoavain, niin hän lyö naulan seinään jakoavaimella.
groovyb kirjoitti:
itse pidän kieliä enemmänkin työkalupakkeina.
Hyvä vertaus tuokin. Etenkin kun mukaan lasketaan kielen peruskirjastot ja koko ekosysteemi.
Katsoinpa äskettäin esityksen http://rubyconf2008.confreaks.com/recovering-from-enterprise.html ja sen mukaan Javan standardikirjastoon sisältyy yli 11 000 luokkaa (vain julkiset luokat), pelkästään eri kokoelmaluokkia on 46 kappaletta. Valinnanvapaus on hyvä asia, mutta samalla ei ole helppo tietää, mitä kaikkea on saatavilla. Puolestaan Rubyn standardikirjastossa on 1400 luokka (sis. sisäiset ja anonyymit luokat), joista kokoelmaluokkia on 6. Tällöin kieleen on helpompi päästä sisälle, mutta erikoistilanteissa joutuu toteuttamaan enemmän sellaisia asioita, jotka toisista kielistä löytyy vakiona. Javaa voisi verrata työkaluverstaaseen, josta löytyy vaikka mitä, mutta sen kuljettaminen mukana on vaikeaa ja joidenkin siellä olevien työkalujen olemassolosta tai käyttötavasta ei edes tiedä, kun taas Ruby on kainaloon mahtuva työkalupakki, josta löytyy kaikkein useimmin tarvitut välineet.
Aihe on jo aika vanha, joten et voi enää vastata siihen.