Devikoneella teemme töitä ”domain spesifien kielten” (DSL, tai täsmäkieli) kanssa, mutta mitä nämä ovat ja mitä etua niillä saavutetaan verrattuna yleisiin ohjelmointikieliin ja mitä hyötyä niistä on asiakkaillemme?

DSL:ät ovat ohjelmointikieliä, jotka on suunniteltu tiettyyn sovellusalueeseen (domain) tai -käyttötarkoitukseen. DSL:llä voidaan esimerkiksi kuvata tiettyjä prosessien vaiheita tai määritellä tiettyjä käsitteitä ja rakenteita. Ne ovat yleensä yleisiä ohjelmointikieliä selkeämpiä ja tarkemmin määriteltyjä, ja niiden avulla voidaan ratkaista tehtäviä tehokkaammin ja luotettavammin. Tämä tekee niistä helpommin ymmärrettäviä ja käytettäviä ihmisille, jotka ovat erikoistuneet tiettyyn sovellusalueeseen tai -tehtävään.

Alla on esimerkki DSL:stä, jollainen voidaan rakentaa Devikoneen kielialustan päälle:

Suorita:
Tee vastaanotto: {rahti: 12400}

  Jos virhe niin lähetä sähköposti: {to: "aspa@munlogistiikka.fi", body: "Rahdin vastaanotossa tapahtui virhe"};

  Muuten tee lokimerkintä: {rahti: 12400, vastaanotto: "OK"};

DSL:t tarjoavat useita laadullisia hyötyjä niitä käyttäville yrityksille:

  • Parempi ymmärrettävyys: DSL:llä voidaan kuvata järjestelmien ja prosessien toimintaa ymmärrettävällä tavalla (korkeammalla abstraktiotasolla), mikä helpottaa niiden ymmärtämistä, käyttöä ja ylläpitoa. Ymmärrettävyys vähentää ohjelmointivirheitä ja parantaa siten ohjelmien luotettavuutta. Esim. yllä olevan skriptin voi kuka tahansa asiantuntija lukea läpi ja ymmärtää täysin mitä siinä tapahtuu.
  • Tehokkaampi kommunikointi: DSL:llä voidaan parantaa viestintää ja kommunikointia eri osapuolten välillä, koska se tarjoaa yhteisen kielen ja rakenteen asioiden ilmaisemiseen.
  • Nopeampi kehitys: DSL:llä voidaan nopeuttaa järjestelmien ja sovellusten kehitystä, koska se tarjoaa valmiita rakenteita ja käsitteitä, jotka voidaan käyttää uudelleen. Devikoneen kielialusta on myös Turing-täydellinen ohjelmointikieli, joka tarjoaa valtavan määrän valmiita toiminnallisuuksia.
  • Parempi testattavuus: DSL:llä voidaan määritellä tarkasti, mitä järjestelmien ja sovellusten tulee tehdä, mikä helpottaa niiden testaamista ja varmistaa, että ne toimivat oikein. Devikoneen kielialusta tarjoaa valmiin ja poikkeuksellisen tehokkaan tavan testata skriptejä.

DSL:ien kanssa ongelmia voi syntyä käytännössä lähinnä silloin kun yrittää ratkaista ongelmia joihin kieltä ei ole suunniteltu. Tällöin ratkaisuna on yhdistää eri kieliä, jolloin vaativatkin ongelmat saadaan ratkaistua.

Integraatiot ovat se ylätason sovellusalue, jossa teemme töitä. Tällä alueella pääasiallinen integraatiovälineemme on Apache Camel, joka toteuttaa integraatiospesifin kielen. Integraatioiden alla on kuitenkin myös muita sovellusalueita, joissa käytämme muita kieliä (esim. rajapintojen suunnitteluun ja niiden vastausten purkuun on omat hyvin tehokkaat kielensä). Tehokas toimintamme perustuu siihen, että osaamme hyödyntää erilaisia tehokkaita kielityökaluja tarpeen mukaisesti. Integraatiovälineenä Camel mahdollistaa hienosti eri kielien yhdistelyn, esim. yllä oleva esimerkki DSL voidaan ajaa suoraan osana integraatiota.

Devikoneen kielialustan avulla voimme luoda kielityökalut joilla asiakkaan omat asiantuntijat voivat ratkaista nopeasti oman sovellusalueensa ongelmia. Tämä on erilainen lähestymistapa kuin perinteinen käyttöliittymäsuunnittelu- tai RPA-käyttöönottoprojekti. Esimerkkinä voimme rakentaa työkalun, joka auttaa käyttämään varastonhallintajärjestelmää lyhyillä tekstimuotoisilla komennoilla. Esim. rahdin saapumiskuittaksen voi tehdä yhdellä tekstimuotoisella komennolla, sen sijaan että muistelee ehkä monimutkaisen klikkailusekvenssin. Taustalla mahdollistajana ovat tietysti rajapintoja vasten rakennetut integraatiot. Annetut komennot voidaan tallentaa ja nähdä niihin liittyvän historialokin. Tämä lähestymistapa on mainio silloin kun lyhyemmistä komennoista halutaan muodostaa yhdistelemällä monimutkaisempia sarjoja, joita on kuitenkin helppo muuttaa ja yhdistellä uudelleen tapauskohtaisesti.

Integraatiot mahdollistavat yrityksen oman DSL:n rakentamisen. Kun integraatiot suunnitellaan alusta asti tämä asia mielessä (mikä ei ole itsestään selvää), on olemassa vahva pohja myös rakentaa yritykselle oma DSL-kieli, joka tuo kilpailuetua suhteessa muihin saman toimialan yrityksiin.

Kyseessä ei ole pelkkä RPA- tai integraatioprojekti

RPA (Robotic Process Automation) on ohjelmistojen käytön automatisointia ohjelmistorobottien avulla. Tällöin jokin työprosessin osa voidaan automatisoida ja käynnistää tietystä syötteestä. Integraatiot käynnistyvät samoin tietystä syötteestä ja toimivat taustalla täysin automaattisesti, usein siirtäen sanomia järjestelmien välillä. DSL-kielityökalun avulla ei kuitenkaan pyritä täyteen työnkulun automatisointiin, vaan tavoite on automatisoida yksittäisiä hyvin pieniä tehtäväpalasia. Ajatus on, että näistä pienistä palasista voidaan koota aina uuden näköisiä kokonaisuuksia kun palat yhdistellään eri tavoin. Yksittäinen tehtäväpalanen voidaan automatisoida monella eri tavalla (RPA, integraatio, skripti). Yritykselle DSL-kielityökalu on tehokkaampi ja enemmän arvoa tuottava tapa kuin RPA-toiminnot, sillä juuri tällainen kielen joustavuus antaa mahdollisuuden yrityksen omille asiantuntijoille määrittää nopeasti eri tehtäviin muuntuvia pieniä skriptejä. Skriptejä on helppo ylläpitää, versioida, muokata, kopioida ja ajaa.

Miten alkuun?

Käydään ensin yhdessä läpi onko tämä malli teille paras vaihtoehto tuottamaan lisäarvoa. Jos päädymme jatkamaan työtä, määritellään yhdessä asiantuntijoidenne kanssa ne tehtävät, joiden automatisointi kielityökalun avulla tuo hyötyä. Kun komennot on suunniteltu hyvin, on yrityksen omalle DSL:lle olemassa vahva pohja. Tämän päälle on helppo rakentaa muita työkaluja, jotka mahdollistavat Low-code ympäristön, jolloin komentoja voidaan kategorisoida, konfiguroida, yhdistellä ja ajaa myös visuaalisen käyttöliittymän kautta. Devikoneella on valmis kielialusta ja osaaminen joilla tällainen projekti saadaan nopeasti toteutettua. Mikäli käytössänne on jo jokin integraatiotyökalu, voimme hyödyntää olemassa olevia integraatiokulkuja, mahdollisesti hieman niitä muokkaamalla malliin sopivaksi, tai voimme hyödyntää tähän tarkoitukseen Devikoneen Kubernetes-pohjaista integraatioalustaa.