Kultainen koodi

.NET-osaajan ajatuksia paremmasta koodailusta

Archive for the category “Uncategorized”

Underscore js – JavaScriptin muistilista

Frontin tekeminen ja JavaScript? Underscorejs ratkaisee huolesi tarjoamalla pikaisia vastauksia tyypillisiin ongelmiin. Tavallisesti ongelmiin liittyvät vastaukset joutuu kaivamaan API:sta tai StackOverflowsta, mutta JavaScriptin puolella ratkaisukokoelma helpottaa elämää.

Näyttökuva 2017-03-26 kello 15.58.37

Underscoren kautta löytää hyviä esimerkkejä tyypillisiin funktiokutsuihin. Positiivisena puolena voi mainita funktiot. Jos osaat funktionaalista ohjelmointia, JavaScriptin opetteleminen tätä kautta käy helposti. Mikäli et vielä ymmärrä funktioita, niin esimerkkien avulla opit lisää.

Osaamistasi saat lisättyä codewarsin kautta, kuten kerroin aiemmin.

Riemullista JavaScriptailua!

Mainokset

Code combat – ohjelmointia nuorille

Halusin antaa maistiaisen 9-vuotiaalle pojalleni ohjelmoinnista, mutten tylsän ”Hello World!”-tekstin muodossa. Onneksi löysin Code Combat -jutun.

Kyseessä on peli, jossa hahmo liikkuu ohjelmoimalla. Oletuskielenä käytetään pythonia, mikä näyttää hyvin läheisesti puhutulta kieleltä. Toki tässä pienenä sivujuonteena olimomainen toteutus, koska tämän pelin mekaniikka vaatii sitä. Kuvakaappauksissani näkyy JavaScript-kieli, koska halusin kokeilla sitä.

Poikani tykästyi peliin. Hän kuunteli alkuun pari ohjetta ja pelasi ensimmäiset 12 kenttää ihan itsekseen. Muutamassa kohdassa ohjasin häntä, kuten muuttujien tai if-lohkojen tapauksessa.

Ensimmäisessä vaiheessa pelaajalle annetaan tavoitteet. Kun ne näkyvät selkeällä suomenkielellä, niin peruskoululainen ymmärtää mitä pitää tehdä. ”Älä koske piikkeihin. Kerää jalokivet. Älä näyttäydy jätille.”

Toisessa vaiheessa pelaaja ratkaisee kentän. Käytännössä poikani klikkaili move-komentoja ruudun keskeltä ja muokkasi niitä tarvittaessa. Tässä kentässä niitä ei tarvitse muokata, mutta joissain kentissä pitää asettaa hyökkäykselle kohde tai koordinaatit liikkumiselle.

Lopuksi ajetaan kenttä. Aikuinen ohjelmoija haluaa ensin suorittaa kentän ja uskaltaa vasta sitten napsauttaa ”Valmis”. Lapsi napsauttaa suoraan valmis.

Ongelma nouse eteen, kun suomenkielinen lokalisointi loppui. Code Combat on jaettu erilaisiin vaiheisiin: linna, metsä jne. Linna on lokalisoitu, se tarkoittaa ilmaisversiossa 12 kenttää. Sen jälkeen seikkailija pääsee metsään, missä tehtävänannot muuttuvat englanninkielisiksi. Huomasin poikani kiinnostuksen tyrehtyvän kielen vaihtuessa.

Poikani ymmärtää englannin alkeita, muttei siinä määrin, mitä pelin pelaaminen vaatisi. Jos pelin kaikki ilmaiset kentät saisi lokalisoitua, hän varmaan jaksaisi rakentaa pieniä ohjelmia pitkään.

Code combat on hyvä avaus ohjelmoinnin maailmaan. Pelillinen maailma tarjoaa timantteja kentän ratkaisemisesta ja erilaisia bonuksia, jos kentän ratkaisee siististi. Tällaisilla ratkaisuilla saa nuoren ohjelmoinnin pariin.

Emacs työvälineenä

Kirjoitin clojurea syksyn emacsilla ja se sujui hyvin. Suurin osa ajastani menee siis koodin rakenteen ja toiminnan pohtimiseen. Saan näppärästi avattua haluamani tiedostot suoraan editoriin ja se tukee kohtuullisesti kirjoittamista.

Emacsin lisäksi pidän melko usein avoinna clojuren cheat sheet -sivua tai clojurescriptin vastaavaa.

Käyttö

Tavallisesti jaan ruudun kahteen tai kolmeen osaan. Yhdellä puolella näkyy koodi ja toisella yksikkötestit. Mikäli teen rajapintaan koodia, niin yhdellä puolella on tietenkin esim. palvelimen rajapinnat näkyvissä ja toisella puolella asiakas/web-sovelluksen puoli, joka kutsuu rajapintoja. Usein testaan koodin toimintaa myös REPL-ikkunassa.

Ikkunoiden ja tiedostojen välillä liikkuminen tapahtuu todella sujuvasti. Näppäinoikopolut purevat erittäin hyvin. Koodia saa siistittyä, leikattua ja liimattua vaivattomasti. Siihen emacs on tehty, kirjoittamiseen. Sen lisäksi yksikkötestit saa pyörimään jatkuvasti tai niitä voi pyöritellä komennoilla. Sekin toimii fantastisesti. Yksikkötestien ajaminen on paljon nopeampaa ja kätevämpää kuin Visual Studiolla, jota olen käyttänyt noin 10 vuotta.

Clojurea kirjoittaessani testaan usein koodia REPL-ikkunassa. Koodin namespacen saa ladattua näppärästi käyttöön ja voin ajaa haluamiani funktioita ”livenä”. Se helpottaa debuggausta, yksikkötestien suunnittelua ja funktion toiminnan testaamista.

Nähdäkseni emacsin valtteja ovat nopeus, koko ruudun tehokas käyttäminen ja laajennettavuus.

IDEn edut

IDE voittaa emacsin helposti koodin laadun tarkkailussa. Sekä Visual Studiosta, Eclipsestä ja InteeliJ:stä löytyy paljon lisäominaisuuksia, jotka helpottavat koodaamista.

Käyttömätön koodi nostetaan esiin paljon helpommin. IDEt yleensä ehdottavat (tai ainakin niihin lisätyt plugarit) kuinka koodia voisi parantaa. Koodausta helpottavat täydennystoiminnot ovat älykkäitä, toisin kuin emacsissa. Emacs tunnistaa aiemmin käytetyt funktiot, muttei osaa ehdottaa kirjastosta löytyviä vaihtoehtoja.

Sekä emacs että IDEt osaavat yhtä hyvin etsiä ja korvata tekstiä. Funktioiden tai metodien uudelleen nimeäminen sen sijaan onnistuu kunnolla vain IDEn kautta. Nimien tai nimiavaruuksien refaktorointi on ehdottomasti IDE-juttu.

Ohjelmakoodin rakenteen näkee IDEn olio tai sovellusrakenteesta, jos rakenne on yksinkertainen. Esimerkiksi MVVM tai simppeli Reactin dispatcher, subscriber -rakenne näkyy paremmin IDEstä kuin emacsista. Tosin kumpikaan ei pelasta jos kyseeseen tulee kompleksinen rakenne, kuten Prism tai laajalle levinnyt legacy-järjestelmä.

Kipeimmin emacsissa minua pistivät puuttuvat uudelleennimeämisominaisuudet, hyvän bookmark-järjestelmän puute ja heikko tuki koodin laadun tarkkailuun. Olisin kaivannut vihjeitä miten asiat koodataan. Projektissani asia korjaantui mob-koodauksessa ja pull request -arvioinneissa.

IDEssä käytettävien useiden näppäinten oikopolkujen sijaan emacsissa kirjoitetaan usea näppäinoikopolku peräkkäin. Esimerkiksi yksikkötestit voi ajaa komennolla (ctrl+c, ctrl+t, ctrl+n) IDEssä suositaan usean näppäimen samanaikaista painamista. IDEssä komennon voi siis käynnistää ”heti”.

Huomasin myös joidenkin emacsin lisäosien käytön vaativan järjettömiä näppäinoikopolkuja eli komennot menivät neljän tai useamman komennon syvyyteen. Se ei tuntunut käytettävältä. Niin pitkiä komentosarjoja ei edes pysty helposti muistamaan.

Lopuksi

Tuntui mukavalta kokeilla emacsia, mutta projektin laajentuessa jäin kaipaamaan useamman tiedoston refaktorointiin liittyviä ominaisuuksia. Halusin myös käyttää lyhyempiä näppäinoikopolkuja, mutta olenko valmis uhraamaan nopeuden käyttömukavuuden alttarille?

Post Navigation