Täällä on jo sivuttu sitä, että korkeakouluissa koulutetuilla teknologioilla on vaikutusta niiden relevanssiin työelämässä.
Onko tässä hyviä tai huonoja puolia?
Olen esimerkiksi harmitellut sitä, että minusta R/RStudio on ihan roska, mutta sitä käytetään kouluissa paljon. Sen huonoin puoli on R:n syntaksi, joka on erilainen kuin muissa kielissä, mikä tekee vaikeaksi muistaa, miten asia tehdään R:ssä.
mavavilj kirjoitti:
(20.02.2024 12:11:03): Täällä on jo sivuttu sitä, että...
No niin, jos puhutaan R:stä ja RStudiosta, niin täytyy sanoa, että ne ovat kuin kouluun unohtunut läksy, jotka eivät vain tunnu sopivan mihinkään kontekstiin työelämässä. Kuin yrittäisi sovittaa neliön muotoista palaa pyöreään reikään - ei vain toimi! Ja mikä tuo R:n syntaksi oikein on? Sehän on kuin jokin salakirjoitus, jonka purkaminen on vaikeampaa kuin yrittäisi selittää avaruuden teoriaa kymmenvuotiaalle. Eikä tässä vielä kaikki, kun sitten vihdoin ymmärtää jotain, niin johan on teknologia vanhentunut ja työelämässä käytetään jo jotain aivan muuta. R ja RStudio, ne ovat kuin vanhaan VHS-kasettiin takertunut dinosaurusten aikakauden liskojen jäännös - historian lehtien havinaa, mutta ei enää tähän päivään.
Batman kirjoitti:
No niin, jos puhutaan R:stä ja RStudiosta, niin täytyy sanoa, että ne ovat kuin kouluun unohtunut läksy, jotka eivät vain tunnu sopivan mihinkään kontekstiin työelämässä.
En itse ole R:ää koskaan käyttänyt enkä sen syntaksia tunne sen suuremmin, mutta sehän on käsittääkseni tarkoittanut tilastojen käsittelyyn ja visualisointiin. Tarkoitatko että työhommasi ovat juuri noita (olet esim. tilastotieteilijä), mutta R ei toimi niihin, vai tarkoititko yleisemminkin ohjelmointia?
Grez kirjoitti:
(24.02.2024 17:55:23): ”– –” En itse ole R:ää koskaan käyttänyt enkä sen...
R on kaksipiippuinen, koska se nimenomaan toimii tilastotieteilijälle hyvin, mutta ei koodareille. Sitten kun siinä ei ole mitään standardia eikä se myöskään suoraan heijasta C/C++ -kirjastoja.
Hyvä jonkin paperin rustaamiseen. Hyödytön shipattavaan softaan.
Ketjun pointti on, että koska se opetettiin koulussa, niin joku jonipetteri menee kuitenkin tekemään sillä asioita, joita ei pitäisi.
mavavilj kirjoitti:
Ketjun pointti on, että koska se opetettiin koulussa, niin joku jonipetteri menee kuitenkin tekemään sillä asioita, joita ei pitäisi.
No mun mielestä koulussa olisi tärkeintä opettaa että vasara ei ole paras työkalu kaikkiin asioihin...
Mutta toki jos muuta ei osaa käyttää kuin vasaraa, niin saa kai sillä vaikka laudan katkaistua. :D
No siis R-vasarassa nyt on se ongelma, että:
-se on ensitekijälle nopea ja helppo
-lopulta koodi pitää portata C/C++:lle tai vähintään JVM:lle. Se olisi voitu laatia niille suoraan.
Kumpi on lopulta kätevämpää? Mutta R opetettiin koulussa, joten tekikö jonipetteri sen R:lle? Niin, koska koulussa esiteltiin vain tietyt vasarat.
Koulussa opetetaan kuitenkin vain yhtä tai paria kieltä, niin tietenkin joutuu tekemään kompromisseja: mihin kieltä voi tai kannattaa käyttää, minkä alan opinnoista on edes kyse (eli onko aihe ylipäänsä koodaus vai tilastotiede), miten helppo se on oppia ja onko päteviä opettajia. Ei voi lähteä siitä, että koulussa opittu kieli olisi ainoa, jota ikinä osataan ja jolla tehdään koko työura. Toisaalta on kohtuullista olettaa, että koulussa opetetaan kieltä, jolla on verrattain hyvin työpaikkoja saatavilla, eikä tarvitse koulun jälkeen heti opetella uutta kieltä päästäkseen edes ensimmäiseen työpaikkaan.
Esimerkiksi itse kävin lukiossa huvikseni C++-kurssilla, jolla oli opettajana joku teekkari, joka ei oikeasti osannut kieltä, opetti puolet asioista väärin, käytti turhaan dynaamista muistinvarausta ja ei osannut vapauttaa muistia, kun hänelle tuttu kieli oli ilmeisesti sitten Java. Ei ollut ideaaliratkaisu oppimisen kannalta niillekään, jotka olivat kurssilla oikeasti oppimassa jotain. C++:lla ei tietenkään päästy siinä ajassa edes tekemään mitään kiinnostavaa ohjelmaa. Joku JavaScript tai CoolBasic (siihen aikaan) olisi voinut olla kohderyhmälle parempi.
R:ään tarttuminen on kyllä pöljä näkökulma asiaan. En usko ennen kuin näen, että juuri missään opetettaisiin R:ää yleiskäyttöisenä ohjelmointikielenä niin, että tulisi kuvaamasi ongelma vastaan käytännössä. Entä ne kaikki tilasto-ohjelmat, jotka olisi saanut R:llä tehtyä parilla rivillä mutta Jani-Petteri joutuu tekemään C:llä tai Javalla, kun ei ole opetettu R:ää? Kun itse jouduin tilastoja kerran tekemään, harkitsin näiden tekemistä jollain tutulla kielellä, mutta loppujen lopuksi totesin turvallisemmaksi opetella sen verran R:ää mieluummin kuin vaikka numpy:n ja scipy:n käyttöä.
Kyllähän millä tahansa kielellä tehdessä voi päätyä tilanteeseen, että jokin toivottu ominaisuus ei ole kyseisellä kielellä helppo tehdä. Kielestä riippumatta voi käydä myös niin, että jokin ominaisuus ei sovi ohjelman rakenteeseen ja ohjelmaa joutuu muokkaamaan. Se, että jollekulle olisi käynyt näin myös juuri sinun vihaamallasi kielellä, ei ole mikään todellinen osoitus kyseistä kieltä vastaan. Eli jos nyt vaikka on ensin tehty hauskoja tilastoja ja sitten myöhemmin keksitään tehdä niistä interaktiivinen web-sovellus, vika ei ole valitussa kielessä vaan siinä, että suunnitelma muuttui.
Maailma on täynnä ohjelmia, jotka on tehty C:llä vain siksi, että C:llä on tapana tehdä parhaat ohjelmat (varsinkin pelit). Monissa näistä ohjelmista on C:n käyttämisen takia vakavia vikoja kuten muistiin liittyviä bugeja tai tietoturva-aukkoja, joita monella muulla kielellä ei olisi ikinä tehty. Millä tavalla tämä C:n tarpeeton ja vaarallinen käyttö on sinusta puolustettavampaa kuin jonkin muun kielen käyttö?
Siis R:n, Java:n ja MATLAB:n vaikutukset näkee luonnossa. Kun on istuttu sitä x op, niin motivaatio opiskella uusi juttu, kun jo osaamallaan saa homman jotenkin tehtyä? Nämä vaan joutuu myöhemmin portaamaan tai kirjoittamaan uudestaan.
Useimmat hyödylliset kirjastot ovat C/C++:stä bindattuja.
Työkaluissa ei ole ongelmaa, JOS niitä käytetään näihin sopiviin tarkoituksiin. Tämä ei ole sama kuin jonipetterin tapa.
Laitahan konkreettisia esimerkkejä pöytään, mitkä asiat "vaan joutuu" myöhemmin kirjoittamaan uudestaan. Useimpia asioita selvästikään ei ole jouduttu.
Metabolix kirjoitti:
Laitahan konkreettisia esimerkkejä pöytään, mitkä asiat "vaan joutuu" myöhemmin kirjoittamaan uudestaan. Useimpia asioita selvästikään ei ole jouduttu.
Kaikki mikä pitää skaalata rajoista ulos tai sisällyttää alustalle, jossa R:ää tms. ei ole. Esim. Tensorflow:ia käyttävät koodit. Koska R on jotain 30x hitaampi kuin C, niin ero ei ole mitätön. Lisäksi R on hyödytön sulautettuihin järjestelmiin.
Siis onko mielestäsi Tensorflow tehty R:llä, kun tekijä oli oppinut koulussa vain sitä, ja myöhemmin portattu C:lle?
Tarkoitan projekteja, jotka hyödyntävät TF:ia tai jotain muuta tärkeää ja skaalautuvaa rajapintaa.
Niin onko mielestäsi ongelma, että joku vahingossa tekisi R:llä semmoisen ja sitten joutuisi porttaamaan sen C:lle? Koska sellainen argumenttihan sinulla juuri äsken oli.
Metabolix kirjoitti:
Niin onko mielestäsi ongelma, että joku vahingossa tekisi R:llä semmoisen ja sitten joutuisi porttaamaan sen C:lle? Koska sellainen argumenttihan sinulla juuri äsken oli.
Joo, koska olen nähnyt sellaisia koodeja, jotka suunniteltiin portattavaksi, mutta joita kukaan ei koskaan portaa. Esim. koska kukaan muu ei ymmärrä toteutusta tai jaksa opiskella sitä. Ongelma on lievempi, jos koodi kääntyy jo jollain GCC:llä, vaikka itse koodi olisi aika roskaa.
"Olen nähnyt" ei ole oikein kelvollinen argumentti, jos et pysty nyt osoittamaan oikeaa esimerkkiä.
Onko sinulla jotain näyttöä siitä, että se "portattavaksi suunniteltu" koodi on tehty toisella kielellä siksi, että tekijä ei osaa C:tä, vai onko se vain oma oletuksesi?
On helpompi portata hyvää koodia kieleltä toiselle kuin korjata gcc:llä kääntyvää roskaa. Se nyt on tietysti valitettavaa, jos kukaan ei ymmärrä toteutusta, mutta silloin kielivalinta on pienimpiä murheita koodissa.
Oletetaan, että R:ää tai Python:ia käyttävistä suurin osa ei ole hyviä ohjelmoijia. Koska jos he olisivat, he eivät käyttäisi ko. teknologioita.
-> Suurin osa näiden koodeista on myös huonosti abtraktoitua.
mavavilj kirjoitti:
Oletetaan, että R:ää tai Python:ia käyttävistä suurin osa ei ole hyviä ohjelmoijia. Koska jos he olisivat, he eivät käyttäisi ko. teknologioita.
Et kai nyt oikeasti voi ajatella noin? Oletko miettinyt, että syy Pythonin valintaan voisi olla sama kuin esimerkiksi JavaScriptin kanssa? Eli, saat nopeasti ja elegantisti toteutettua asioita jotka C:llä olisivat työläitä tai vaikeita toteuttaa.
jalski kirjoitti:
(25.02.2024 18:47:08): ”– –” Et kai nyt oikeasti voi ajatella noin? Oletko...
No tämän takiahan huonot koodarit juuri alkavatkin käyttää niitä vääriin asioihin, koska ne sallivat kaikkia huolimattomuuksia.
Oletko tehnyt jonkinlaisen tutkimuksen, mikä on eri kielillä koodaavien taitotaso ja mistä kielivalinta johtuu? Jos et ole etkä pysty sellaista myöskään osoittamaan, kannattaa jo lopettaa tällaisten arvioiden esittäminen.
Vielä on muuten täysin näkemättä, mitä itse osaat koodata.
C-koodarit ne vasta huonoja ovat, kuten näkyy siinä, miten paljon bugeja C:llä on tehty. (Sarkasmivaroitus.)
Nimenomaan C mahdollistaa kaikkia huolimattomuuksia kuten vapautetun muistin sorkkimisen tai taulukon koon ylittämisen, ja näistä aiheutuu maailman vaarallisimpia bugeja. Monilla muilla kielillä vastaavat virheet eivät ole lainkaan mahdollisia, vaan niistä tulee virheilmoituksia.
Onko mavavilj omasta mielestään hyvä koodaaja?
Mavavilj:n if, then, else logiikka ei oikein vakuuttanut. :D
Metabolix kirjoitti:
Oletko tehnyt jonkinlaisen tutkimuksen, mikä on eri kielillä koodaavien taitotaso ja mistä kielivalinta johtuu? Jos et ole etkä pysty sellaista myöskään osoittamaan, kannattaa jo lopettaa tällaisten arvioiden esittäminen.
Ei kun siis ilmiö johtuu siitä, että useimmat aloittavat Python:lla tms. helpolla kiellellä.
Tämä johtaa siihen, että helpoissa kielissä on suhteellisesti enemmän koodareita, joilla ei välttämättä ole "oikeiden kielien" tuottamia näkemyksiä. Tämän takiahan hyvät koodarit kokeilevat useampia kieliä ja lainaavat niistä oppimiaan asioita. Ja siirtyvät esimerkiksi kirjoittamaan Haskell-tyyppistä C++:aa.
Metabolix kirjoitti:
Nimenomaan C mahdollistaa kaikkia huolimattomuuksia kuten vapautetun muistin sorkkimisen tai taulukon koon ylittämisen, ja näistä aiheutuu maailman vaarallisimpia bugeja. Monilla muilla kielillä vastaavat virheet eivät ole lainkaan mahdollisia, vaan niistä tulee virheilmoituksia.
C/C++:n kehittäjien mukaan nämä ovat ominaisuuksia:
"The zero-overhead principle is a guiding principle for the design of C++. It states that: What you don’t use, you don’t pay for (in time or space) and further: What you do use, you couldn’t hand code any better."
https://isocpp.org/wiki/faq/big-picture
Sitä paitsi ainakiin osaan ongelmistasi on ratkaisu. Tässä vaikkapa bounds checking:
https://en.cppreference.com/w/cpp/container/
Toki se maksaa vähän enemmän kuin ilman sitä. Oleellista on, että ohjelmoijalle annetaan vapaus päättää, mitä hän tekee.
mavavilj kirjoitti:
Ei kun siis
Eli et tiedä vaan esität arvauksia ja mielipiteitä. Millä perusteella ”Haskell-tyyppinen C++” olisi nyt sellainen ylivoimainen teknologia, että kaikki hyvät koodarit ilman muuta vaihtavat Pythonista siihen?
Noh, rehellisesti kyllä R on varmasti hyödyllinen ohjelmointikonseptin ja putkittamisen/funktionaalisuuden ymmärtämisen kautta, mutta työelämässä se on melkoisen hyödytön suhteessa siihen miten laajasti sitä Suomessakin korkeakouluissa läpikäydään.
Mutta, korkeakoulujen ei ole tarkoituskaan olla vain työelämän mahdollistaja, vaikka työelämätarpeilla merkitystä onkin. Siksi opitaan myös asioita, jotka on tärkeämpi tutkimuksen tarpeiden näkökulmasta, kuin työelämän.
Kysyn vielä pari kysymystä, arvoisa mavavilj, kun olet nyt useassa keskustelussa tuonut ilmi näkemystä, että C++ on selvästi paras, muut kielet enemmän tai vähemmän surkeita (niitä käyttävistä koodareista puhumattakaan) ja kaikenlaiset abstraktion tasot C++:n ja POSIXin ulkopuolella turhaa bloattia. Olisiko mielestäsi järkevää toteuttaa vaikka tämä nettisivusto C++:lla, kun PHP, Python ja Node.js ovat selkeästi huonoja ja amatöörimaisia vaihtoehtoja? Kannattaisiko tallentaa tiedot ihan vain tiedostoihin ilman mitään tarpeetonta SQL-abstraktiota? Tulisiko tällöin käyttää vaikka symlinkkejä relaatioina, kun käyttöjärjestelmä tarjoaa niin erinomaisen POSIX-ratkaisun?
Metabolix kirjoitti:
(28.02.2024 22:15:35): Kysyn vielä pari kysymystä, arvoisa mavavilj...
Backend joo. Frontendiin sopiva DSL.
Ei kukaan estä tekemästä DSL:ja, mutta niiden välikielenä tulisi olla C tai C++. Jos tämä on toteutettu hyvin, niin saadaan vaikka WebKit tai Gecko ja esim. Lua (all is a table), eikä mainitsemiasi.
Threadin kontekstissa korkeakouluissa tulisi keskittyä kehittymiseen nopeaksi ja varmaksi C/C++ -ohjelmoijaksi. Koska tämä kirjoittaa nopeasti, eikä tee virheitä.
Eivät muut kielet ole surkeita sinänsä, mutta niitä ei tulisi käyttää tarkoituksiin, joihin C++ on oikeampi. Korkeakouluinfluenssilla spekuloidaa ilmiötä, jossa osa ihmisistä koodaa sillä, mihin heidät on altistettu eli esim. Python:lla ja Java:lla.
mavavilj kirjoitti:
Metabolix kirjoitti:
(28.02.2024 22:15:35): Kysyn vielä pari kysymystä, arvoisa mavavilj...
Threadin kontekstissa korkeakouluissa tulisi keskittyä kehittymiseen nopeaksi ja varmaksi C/C++ -ohjelmoijaksi. Koska tämä kirjoittaa nopeasti, eikä tee virheitä.
Eivät muut kielet ole surkeita sinänsä, mutta niitä ei tulisi käyttää tarkoituksiin, joihin C++ on oikeampi. Korkeakouluinfluenssilla spekuloidaa ilmiötä, jossa osa ihmisistä koodaa sillä, mihin heidät on altistettu eli esim. Python:lla ja Java:lla.
Onko C++ ohjelmoijalla joku supervoima kirjoittaa nopeasti ja olla tekemättä virheitä? Loppujen lopuksi tulee mieleen aika vähän käyttötarkoituksia joissa se olisi absoluuttisesti paras valinta.
Mielestäni opetuksessa käytetty ohjelmointikieli on yhdentekevä. Uuden ohjelmointikielen syntaksin oppii jokainen melko nopeasti. Tärkeämpää olisi opettaa ajattelemaan kuin ohjelmoija.
jalski kirjoitti:
Mielestäni opetuksessa käytetty ohjelmointikieli on yhdentekevä. Uuden ohjelmointikielen syntaksin oppii jokainen melko nopeasti. Tärkeämpää olisi opettaa ajattelemaan kuin ohjelmoija.
Minusta ei ole, vaan korkeakouluilla on mahdollisesti vaikutus siihen, mitä teollisuudessa päädytään käyttämään. Lisäksi jokainen kieli printtaa päähän ideoita siitä, mitä ohjelmointi on. Teollisuudella taas tuntuu olevan vähemmän influenssia, mikä on huono asia, koska sitten kukaan valmistunut ei osaa oikeasti mitään.
C++:aa pitäisi käsitellä sen takia, että käytännössä suurin osa tietotekniikan historiasta on C++:lla, eikä sitä voi vaihtaa. Ei ole nykyaikaista tietojenkäsittelyä ilman C++:aa, koska kaikki tärkeät ohjelmat ja kirjastot on sillä.
Python:sta ei minusta ole myöskään opetuksellisesti mitään apua, koska siitä ei ole kuitenkaan mitään hyötyä, kun saman pitää toteuttaa C++:lla tai Java:lla, koska niissä on eri mekanismit. Se voitaisiin käsitellä vain visualisointi- tai tekstityökaluna (kuten Perl).
Kuulin joskus, että syy C++:n kuoppaamiseen on, että jos se olisi kouluissa, niin osa opiskelijoista lopettaisi alkukursseilla ja vaihtaisi alaa, koska se olisi "liian vaikeaa". Minusta myös C++ on kuitenkin ihan yhtä vaikeaa myös Java:n jälkeen.
Itse taas ajattelen, että olisi hyvä muistaa, että lopulta kaikki on niitä bittijonoja ja muistirekistereitä. Korkean tason kielessä ei näy kumpaakaan.
Ja siis korkeakouluista puuttuu myös näkemys siitä, miten erilaista on lukea jotain max 100 rivin koodeja vs reaalimaailman 4 miljoonan koodirivin projektia. Ja miten eri kielet alkavat näyttämään aika erilaisilta tuossa skaalassa.
Välillä uskon, että joku joka käyttää saman ajan johonkin avoimen lähdekoodin projektiin tietää ohjelmoinnista 100x enemmän kuin joku korkeakouluopiskelija.
Niin, korkeakoulussa pitäisi käsitellä enemmän idioomeja kuin sitä, että "tee kaikki tällä".
Näin havainnollistuu, miksi C++:aa ei tule käyttää Perl:n korvaamiseen. Python ja Java ovat vain vähän erilaisia eläimiä.
mavavilj kirjoitti:
(29.02.2024 16:40:39): Välillä uskon, että joku joka käyttää saman ajan johonkin avoimen lähdekoodin projektiin tietää ohjelmoinnista 100x enemmän kuin joku korkeakouluopiskelija.
Usko tai älä, niin minulle opetettiin korkeakoulussa C/C++:aa ja opettelin Pythonin ihan itse. Javan opin lukiossa, jota ennen yläkoulussa koodasin Pascalia. Pelkkiä hyviä muistoja kaikista kielistä.
Niin muuten, miksi kieliin ei voisi liittää opasta siitä, mihin niiden abstraktiot ovat sopivimpia. Näin ei tarvitsisi yrittää tehdä tekstiprosessointia C:llä.
mpni kirjoitti:
(29.02.2024 23:51:50): ”– –” Usko tai älä, niin minulle opetettiin...
Joo mutta tuossakin on nyt esim. sellainen paradoksi, että mielestäni Pascal on paremmin toteutettu kuin Java.
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/
Opiskelit siis yläkoulussa hyödyllisempää asiaa kuin lukiossa. Ja korkeakoulussa opiskellaan vähemmän hyödyllistä asiaa kuin yläkoulussa. Sitten osa korkeakouluopiskelijoista ei ole edes kuullut Pascal:sta, vaikka se on joissain domaineissa, kuten kääntäjätekniikka, keskeisempi kuin Java.
Löytyipä Wikipediasta myös esim. tällainen:
lainaus:
TorChat, previously written in Python, is now being rewritten in Free Pascal and Lazarus.
Esimerkiksi Android:lla voisi olla mikä tahansa kieli, mutta ehkä se otettiin, koska sitä opetetaan kouluissa: https://softwareengineering.stackexchange.com/a/
"Java's certainly not the best language for a mobile device in terms of performance and production, but it is well known."
Dalvik:n todellinen rationaali oli C++ heavy duty -appeihin, Java ensisijaisena ja JS kevyille sovelluksille. Kuitenkin Java:n tilalle sopisi moni muukin.
Minusta on kuitenkin äärimmäisen häiritsevää, että 3 miljardin tms. laitteen perusinfra sidotaan ajatukseen "not the best ... in terms of performance and production ... but it is well known.".
On kuitenkin sellainenkin aspekti, että mikäli Java vaihdettaisiin vaikka Pascal:iin, niin sitten osa alkaa ulisemaan, että "ei kun ei tällä voi tehdä 'oikeassa maailmassa' mitään". Näin käy jo Haskell-kursseilla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.