Tämän kerran lounaspöhinöissä Antti johdatteli byteläiset kompleksisten systeemien maailmaan.
Käsittelyssä oli mm. mitä tapahtuu kun ongelma vaikuttaa useammalla skaalalla (asiakas-liiketoiminta-tekniikka-logiikka) ja vaikeasti ennustettavasti, ja mitä on deterministinen kaaos.
Lisäksi, miten ratkotaan ongelmia, joista on lähes mahdotonta löytää syy-seuraussuhteita, ja mitä vaaroja on siinä, jos kompleksista systeemiä yritetään hallita simppelillä syy-seuraussuhteella ja miten siinä voidaan mennä metsään.
Kompleksien aiheiden kanssa nautittiin yksinkertaista pitsaa!
Lokakuun puolivälissä pidimme Bytepäivä-lightin ja virittäydyimme sekä Halloweeniin, että jo käynnissä olevaan Kekrin aikaan! Annamari piti tietovisan sekä suomalaiseen kansanperinteeseen kuuluvasta ja kuitenkin ehkä vieraammasta kekrin ajasta, että kaikille vähintäänkin populäärikulttuurista tutusta Halloweenista.
Tietäisitkö googlaamatta esimerkiksi, onko kekriä kutsuttu nimellä käyry vai keyri, tai miten monta Halloween-franchisen elokuvaa on tehty? Kaikki visailijat saivat pisteitä, monet oppivat uutta ja siinä lomassa nautittiin teemaan sopivia herkkuja.
Lokakuun alussa bytecraftilaiset kävivät yhdessä läpi yrityksen Varhaisen tuen mallia sekä Päihdeohjelmaa Annamarin liidauksessa. Firman ennakoivista ohjeista on tärkeä sopia ja keskustella yhdessä, vain silloin ne voivat todella toimia ennaltaehkäisevästi. Molemmat tukimallit kirvoittivat lisäksi hyvää keskustelua työntekijöiden hyvinvoinnin tärkeydestä, voimavaroista ja riskien arvioinnista.
Syyskuun viimeisenä perjantaina toimarimme Ville esitteli alan tilannetta ja Bytecraftin lukuja. Tuloksemme ja liikevaihtomme on kasvanut erinomaisesti siitäkin huolimatta että yleinen tilalle alalla on ollut viime vuosina haastavahko. Sen lisäksi Ville kertoi myynnistämme ja uusista avauksista. Niiden perusteella myös Bytecraftin tulevaisuus näyttää erittäin valoisalta!
Konsulttimme Mikko veti Pöhinä-esityksen kirjasta Domain Modeling Made Functional: Tackle Software Complexicity with Domain-Driven Design and F#. Iso osa esittelyä oli omistettu myös Mikon omalle harjoitusprojektille kirjan aiheista, jossa hän oli toteuttanut kirjassa esitellyn tilausprosessin web sovelluksena. Kirja esittelee Domain Driven Designin (DDD) perusteet ja hyppää sitten syvään F#-päätyyn, jossa käydään läpi miten mallinnettu domain voidaan toteuttaa F# kielellä. Kirja löytyy myös verkosta osoitteesta https://fsharpforfunandprofit.com/books/
Mikon mielestä DDD:n hyödyllisin asia on Event Storming, jossa kaikki projektiin osallistuvat: sekä liiketoiminnan asiantuntijat, että kehittäjät, kutsutaan yhteen piirtämään, mallintamaan ja rakentamaan yhteistä mallia ja kehittämään yhteiskäyttöistä sanastoa. Event Stormingista löytyy myös paljon verkkoluentoja, sekä Eric Evansin kirja “The blue book” eli Domain-Driven Design.
Mikko esitteli harjoitusprojektin F# web stackia ja kertoi, miten hän hyödynsi kirjan eri aiheita käytännössä. Harjoitusprojektin F# toteutus oli tuotantovalmis vertikaali kirjan tilausprosessiesimerkistä sisältäen asynkronisen html käyttöliittymän validointeineen, domain mallin ja liiketoimintalogiikan, tietokannan migraatioineen, yksikkö-, integraatio- ja e2e testit.
Käytetty tekkistackki: HTML, Bootstrap, HTMX, F#, Asp.Net, Giraffe, Dapper, SQL Server, FsUnit, Validus, Canopy. Käyttöliittymässä käytetty HTMX herätti kiinnostusta potentiaalisena vaihtoehtoina yleisesti käytössä oleville web frontend frameworkeille. Tästä onkin tulossa lisää pöhinää myöhemmin.
Elokuun viimeisenä perjantaina pöhisimme käytetyimmistä työkaluistamme. Napakasti aikataulutetun esittelyn lomassa ehti suht lyhyessä ajassa viritä paljon erilaisia keskusteluja!
Vertailimme vaihtoehtoja usean monitorin vs. usean digitaalisen työpöydän välillä sekä erilaisia IDE:jä (esim. VSCode ja IntelliJ IDEA), pohdimme eri ohjelmointikielien vahvuusalueita ja mihin tarkoituksiin ne parhaiten soveltuvat, sekä kävimme läpi Git-praktiikoita. Keskustelimme myös eri käyttöjärjestelmistä ja debuggereista.
Työkalusetit ovat monelle yksilökohtaisia - osa käyttää todella paljon erilaisia työkaluja, kun taas jollain periaate saattaa olla “jos sitä ei löydy IDE:stä niin sitä ei tarvitse”. Erilaisia toimivia tapoja on paljon! Osa on käyttänyt GenAI-työkaluja työn apuna jo vuosia ennen niiden yleistymistä ja osa ei ole kokenut niitä vielä hyödyllisiksi itselleen. Lisäksi keskustelimme erilaisista hyödyllisistä kirjastoista ja frameworkeista, kuten Tailwind CSS.
Digitaaliset työkalut eivät ole ongelmanratkaisussa kokonaan korvanneet paperia ja kynää. Keskustelusta ilmeni, että valkotaulu ja post-it-laput ovat edelleen osalle Software Craftereista olennaisia työkaluja ja tulevat olemaan sitä jatkossakin.
Kokeneet konsulttimme saivat toisiltaan hyviä vinkkejä ja kaikki oppivat jotain uutta - erinomainen esimerkki Perjantaipöhinästämme siis!
Perjantaina 16.8. konsulttimme Mikko piti Pöhinän pragmaattisesta näkökulmasta siihen, miten funktionaalisen ohjelmoinnin parhaat opit siirtyvät oliomaailmaan. Pöhinöissä käsiteltiin muun muassa sitä, miten funktionaalinen- ja olio-ohjelmointi eroavat toisistaan, vai eroavatko ollenkaan.
Mikko on havainnut että parhaat tavat (best practices) toimivat molemmissa paradigmoissa yli rajojen. Funktionaalisen ohjelmoinnin tilanhallinnan parhaat tavat voi tuoda olio-maailmaan. Funktionaalisen ohjelmoinnin hyödyt voivat myös luoda motivaatiota opiskella sitä, vaikka sen kanssa ei työskentelisikään päivittäin. Lisäksi käsiteltiin monadien tuomista käytännön tasolle. Loppujen lopuksi tärkeää on pitää mukana pragmaattinen näkökulma - ei pakoteta paradigmoja sinne, minne ne eivät sovi.
Elokuun toisena perjantaina byteläiset kokoontuivat toimistolle ja etänä ensimmäisiin kesäkauden jälkeisiin Pöhinöihin. Jaoimme kesäkuulumisia, vapaa-ajalla tehtyjä omia devausprojekteja sekä tuoreimpia työkuulumisia. Lisäksi käsittelimme ajankohtaisia Byte-aiheita. Paluu sorvin ääreen tuntuu aina mukavammalta kun työ on mielenkiintoista ja sen voi jakaa tämän porukan kanssa!
Kevätkauden viimeisissä pöhinöissä kesäkuun puolivälissä päästiin toivottamaan tervetulleeksi uusi software crafterimme Paula! Tervetuloa Paula joukkoon iloiseen!
Kakun syönnin lomassa vaihdettiin kuulumisia ja keskusteltiin tiiviisti päivän polttavista Byte-aiheista ja kesäsuunnitelmista.
Bytecraft toivottaa hyvää juhannusta ja hyvää kesää 2024!
Kolmannessa funktionaalisen ohjelmoinnin perjantaipöhinässä mentiin aiheessa edellisiäkin syvemmälle. Pöhinäsetissä käsiteltiin tai sivuttiin mm. algebrallisia datatyyppejä, efektisysteemejä, lazy evaluationia ja häntärekursiota. Antti kertoi että monadien lisäksi on olemassa muitakin tyyppiluokkia, kuten functor, group, monoid ja semigroup.
Esityksessä käytiin läpi myös erilaisia strategioita siihen, että miten "referential transparency":yn päästään. Efektisysteemeihin liittyen käsiteltiin sitä, että tyypillisesti immutabilityä käytetään referential transparencyn saavuttamiseen, mutta immutability ei ole vaatimus funktionaaliselle ohjelominnille. Mutable referencyt täyttävät tuon "referential transparencyn".
Toukokuisena lämpimänä perjantaina Byteläiset kokoontuivat toimistolle ja lähtivät kohti jousiammuntahallia! Saimme hyvää ohjausta mielenkiintoisessa lajissa ja sen myötä paljon hienoja onnistumisen kokemuksia. Illaksi siirryttiin syömään georgialaista ruokaa - ruoka oli hyvää ja sitä riitti.
Käytimme myös hyväksi kaunista keliä puistoilemalla useassa eri vaiheessa.
Olipa jälleen mukavaa kohdata yhdessä toinen toisemme työkuvioiden ulkopuolella!
Toukokuun alussa Jaakko tutustutti byteläiset gitin maailmaan. Git on hajautettu versionhallintajärjestelmä. Perjantaipöhinässä käytiin läpi erilaisia käytäntöjä gitin ympärillä, kuten erilaisia enemmän tai vähemmän käytettyjä komentoja sekä työtäpoja. Lisäksi keskusteltiin eri ihmisten omista tavoista käyttää gittiä.
Huhtikuun viimeisissä pöhinöissä oltiin jo hieman vapputunnelmissa! Toimisto oli saanut koristeita ja tarjolla oli munkkeja ja simaa. Byteläisillä oli kaapeista kaivettuja vanhoja opiskeluhaalareita ja muuta vappuisaa pukeutumista. Viikoittaisen kuulumiskierroksen lisäksi jaoimme näissä rennommissa pöhinöissä myös muistoja opiskeluajoista!
Funktionaalisen ohjelmoinnin pöhinäsarjan toisessa osassa käytiin läpi aihetta teknisemmästä näkökulmasta. Osa osallistujista seurasi etänä, toimistolla oleville oli tarjolla myös lounaspitsaa.
Aiheina oli: Mitä tarkoittavat summa- ja tulotyypit, ja mitä tekemistä matematiikalla on ohjelmoinnin kanssa? Entä mitä tarkoittaa se että puhtaammissa funktionaalisissa kielissä funktiot ja muuttujat ovat sama asia? Vielä - mitä ovat korkeamman asteen funktiot tai paloittain määritellyt funktiot? Lisäksi käytiin pieni katsaus Either/Maybe monadeihin ja deklaratiiviseen tapaan käsitellä virheitä koodissa.
Aihe herätti niin paljon mielenkiintoa ja paljon jäi vielä käsittelemättä, joten Antti esittelee aihetta vieläkin syvemmälle menevässä kolmannessa sessiossa myöhemmin keväällä.
Huhtikuun puolivälissä pöhinöissä käsiteltiin funktionaalista ohjelmointiparadigmaa. Antin pöhinäesitys keskittyi tällä kertaa siihen, missä tilanteissa ja miksi juuri niissä funktionaalinen ohjelmointi on oikea työkalu - ja missä taas ei. Esityksen kohderyhmänä olivat niin ei-teknistä työtä tekevät kuin koodarit, joille aihepiiri ei ollut kovin tuttu.
Pöhinöissä käytiin läpi referential transparencyä, puhtaita funktioita, immutabilityä, sekä algebrallisia rakenteita. Antti kertoi, miten matemaattista intuitiota voi käytännössä soveltaa ohjelmistokehityksessä niin, että päästään eroon ikävistä bugeista ja ongelmista.
Lopuksi hän esitteli muutamia koodiesimerkkejä sivuvaikutusten (side effect) aiheuttamista ongelmista ja siitä, miten epäpuhtaudet johtavat koodin vaikeampaan reasonointiin.
Nämä pöhinät olivat ensimmäinen osa kaksiosaisen funktionaalisen ohjelmointiparadigmaesityksen sarjassa. Seuraavalla kerralla Antti käsittelee aihetta hieman teknisemmästä näkökulmasta.
Maaliskuun puolivälissä saimme kaksi uutta työntekijää - softakehittäjä Mikon sekä Account manager Tarun! Mikko on ollut alalla pitkään, ja tuo mukanaan mm. erinomaista mentorihenkeä. Myynnin ja markkinoinnin opiskelija Taru pääsi meille aivan uuteen rooliin osa-aikaiseksi myynnin ja asiakastyytyväisyyden tekijäksi. Näille tyypeille kannatti todellakin samalla viikoilla kippistellä ja korkata kakku!
Tällä kertaa pöhinöiden aihe oli hieman teoreettisempi, mutta tietojenkäsittelytieteen näkökulmasta. Antti kertoi meille aiheesta computational complexity, eli laskennan kompleksiteetit.
Pöhinöissä käytiin läpi mm. mitä käytännössä tarkoittaa turingin kone, ja mitä kompleksiteettiluokat kuten P, NP tai EXPTIME ovat. Asiaa käytiin läpi siitä näkökulmasta, miten nämä liittyvät ohjelman suoritusaikaan tai muistinkäyttöön käytännössä. Lisäksi sivuttiin ihmiskunnan suurimpia selvittämättömiä mysteerejä.
Helmikuun lopussa vietimme kevyttä virkistysiltaa, eli Bytepäivä lightia. Tarkoituksena oli pelata pelejä, sekä tilata ruokaa.
Byteläiset kuitenkin viihtyivät niin hyvin jutustellessaan, että pelien sijaan päädyimme keskustelemaan yhdessä tuntikaupalla mm. softa-alan sukupuolijakaumista ja videopelimaailmasta. Korttipelit jäivät odottamaan seuraavaa kertaa.
Helmikuun puolivälissä perjantai-iltapäivää vietettiin rennosti yhdessä oleskelemalla ja viikottaisella kuulumiskierroksella. Kuulumiskierros niin paikan päällä kuin etänä on tärkeä osa yhdessä jakamista ja toisilta oppimista. Usein, niin kuin myös tällä kerralla kierros viritti esiin keskustelun, joka jatkui pitkään virallisen osuuden jälkeen.
Tämän lisäksi pöhinöiden yhteydessä tapahtui Bytecraftin vuoden 2024 Liikuntahaasteen palkintojenjako! Liikuntahaaste on tykätty tapa lisätä huomiota ja motivaatiota istumatyöläisten liikkumiseen. Viisi eniten liikkunutta saivat hierontalahjakortteja ja voittaja, tällä kertaa Annamari, nimensä kiertopalkintoon. Liikkuminen on oleellista ympäri vuoden, mutta liikuntahaastetta jäämme jälleen odottamaan innolla seuraavaan kertaan!
Helmikuun ensimmäisissä perjantaipöhinöissä puhuttiin ohjelmistoarkkitehtuureista. Juha esitteli aihetta parista eri tulokulmasta. Ensimmäinen tapa oli tarkastella isoa kuvaa. Toinen taas keskittyi yksityiskohtiin.
Isossa kuvassa liiketoimintakyvykkyydet yhdistettynä Domain Driven Designiin tarjoaa usein hyvän lähtökohdan lähteä rakentamaan arkkitehtuuria, joka vastaa liiketoiminnan tarpeita. Yksityiskohdissa, ja myös isossa kuvassa, testattavuus toimii yhtenä erinomaisena mittarina, kun tarkastellaan sovelluksen laatua ja arkkitehtuuria. Ongelmat ja vaikeudet testattavuudessa johtuvat usein heikosta arkkitehtuurissa tai sen puutteista.
Hyvä arkkitehtuuri rakentuu liiketoiminnan tarpeiden ympärille, sekä tekee testaamisesta helppoa, luotettavaa ja nopeaa.