dzeidzei kirjoitti:Mikä vika Perlissä? Minusta se on vallan hyvä kieli. Ainakin webbikötköttimien koodaamiseen.
Itse näkisin Perlin suurimman ongelman sen filosofiassa. Tai ei suoranaisesti filosofiassa, vaan siinä miten sitä käytetään. Filosofia/mottohan on "There's more than one way to do it". Kieli on siis todella joustava ja mahdollistaa mitä omituisempaa koodia. Omasta mielestä gurut ovat henkilöitä, jotka osaavat tehdä äärettömän yksinkertaista koodia ja Perlillä on suuri kiusaus tehdä yhden rivin "killereitä".
v_vega77 kirjoitti:RoR on kyllä niiiiin siisti juttu että kannattaa kyllä perehtyä

Ei voi kun rakastaa kun tekee "rails keke", schema.rb:hen tavarat, "rake db:schema:load", "generate scaffold diudiu", script\server, localhost:3000 -> voilá, ror käy kyselemässä kannalta taulun kenttien nimet ja näyttää näkymässä ne. Kaikki on objekteja. Koko kirjo samassa paketissa veppiserveriä myöden.
Vaikka scaffolding onkin pelkkä tukirakenne itse ohjelman rakentamisessa, kyllä mulle käsite "framework" sai ihan uuden merkityksen.
Test-driven development tosin ei käy mulle järkeen, tuntuu että siinä rikotaan pahemman kerran yhtä kulmakiveä koko hommalle; DRY -- "Don't repeat yourself".. siinähän toistetaan itseä niin paljo ko lähtee? Voisko joku valaista?
Olen itsekin RoR:n kannattaja, mutta on siinä huonojakin puolia. Ihan puhtaasti syy, miksi mieluiten teen ihan Javalla on sen staattisuus. Java on staattisesti tyypitetty kieli ja tämä mahdollistaa sen, että kehitysympäristöt todella tietävät mistä tyypistä milloinkin on muuttujassa kyse. Tämä mahdollistaa taas erinomaiset työkalut. Refaktorointi on siis Javassa mahdollista. Jos refaktorointi on terminä tuntematon, niin kipin kapin tutustumaan siihen muutaman kirjan merkeissä. Esim. Eclipsellä on mahdollista tehdä loistavia koodausta nopeuttavia asioita. Kannattaa siis opiskella Eclipse + Java -yhdistelmä huolella.
RoR on siis toteutettu Ruby-kielellä. Se on tietääkseni dynaamisesti tyypitetty kieli. Siis vahvasti tyypitetty, mutta dynaaminen. Tästä aiheutuu se, että kehitysympäristö ei voi muuta kuin tehdä sivistyneitä arvauksia tyypeistä. Tämä taas karsii suuren osan kehitysympäristön antamasta tuesta. Kehitysympäristön tukea ei todellakaan kannata vähätellä, koska sen avulla ohjelmointi nopeutuu älyttömästi.
TTD-kehitystyyli (yksi XP:n perusfilosofioista) on mielestäni erinomainen. En ole sitä käyttänyt, mutta olen asiaan perehtynyt. Usein koodia kirjoittaessa ei tule miettineeksi (ainakaan aloittelijat) sitä, että "kuinka helppoa minun koodini on testata" ja, että "tekeekö tämä moduuli tai luokka asiat, jotka sen todella kuuluu tehdä". Lisäksi vaarana on se, että ohjelmoidessa varaudutaan turhiin laajennuspisteisiin.
No, miten TDD-sitten puuttuu peliin? Yksinkertaisesti se pakottaa ohjelmoijan miettimään etukäteen, että "mitä luokan
todella pitää tehdä". On siis pakko tietää mitä luokan tehtävä on, koska jos osaa kirjoittaa testin, on tiedettävä mitä luokka tekee. Ja koska luokka tehdään ensin, on luokan testattavuus lähtökohta. On helppo tehdä huonosti testattavia luokkia. Puhun siis yksikkötestauksesta tietysti. No, ilman kattavaa yksikkötestausta refaktorointi on arveluttavaa puuhaa. Kun ohjelmaa on muutettu, niin voidaanko todella olla varmoja, ettei rikottu mitään koodista. Tietysti käännösvirheet saadaan korjattua, mutta miten on semanttisten virheiden. Tottakai kattavat yksikkötestit voidaan tehdä ilman TDD:tä, mutta tietysti se tehdään myös TDD:ssä.
Kannattaa siis tutustua termeihin XP, TDD (yksi perusfilosofia XP:ssä, mutta näyttää siltä, että tämä on vahvasti eriytymässä irralliseksi XP:stä, vaikkakin jatkaa XP:n peruspilarina), Java ja Ruby. En usko, että Java on minnekään menossa.
Vielä kannan korteni kekoon .net -asiassa. .net on varsin pätevä teknologia ja varsin lähellä Java + Javan virtuaalikonetta. .netissä on hyvät kehitystyökalut ja laaja luokkakirjasto. .net 3 tuo varsin mielenkiintoisia teknologioita ja mielestäni kannattaa tutustua WPF, WWF ja WCF ankronyymeihin.
Lisäksi mainitsen yhdestä .netin kanssa käytettävästä kielestä eli C#:sta. Itse pidin sillä ohjelmoinnista. Siinä oli erinomaisia ominaisuuksia, mitä Javassa ei ole. Sehän on hyvin Javamaista.. tai oikeastaan Javan ja C++:n risteytystä. Erittäin mielenkiintoisina ominaisuuksina pidän delegaatteja, attribuutteja (vastaa Javan annotaatioita), Genericsejä ja tietysti mahdollisuutta ylimääritellä operaattoreita. Mielestäni operaattoreiden ylimäärittelyllä voi saada hyvää ja luettavaa ohjelmakoodia, kunhan käyttää operaattoreiden ylimäärittelyä viisaasti. Ja vielä propertyt on mainittava.. niillä saa oikein luettavaa ohjelmakoodia.
Tässä kannoin korteni kekoon.. mitä mieltä olette ajatuksistani?
--
Pekka Mattila