Derfor lagde Martin progsbase

Vil at du skal fokusere på gjenbrukbar kode. Slik kommer du i gang.

Martin F. Johansen har laget Progsbase. 📸: Privat
Martin F. Johansen har laget Progsbase. 📸: Privat Vis mer

Jeg har hatt koding som hobby, jobb og lidenskap i over 20 år. De språkene og verktøyene jeg har vært innom kjenner nok mange i lignende situasjon seg igjen i: Jeg har kodet C og C++ fra 16-bits DOS med Turbo-serien til Borland via 32-bit til 64-bit GNU C og C++. Tidlig var jeg også innom Borland sin Delphi og konkurrenten Microsofts Visual Basic og Visual C++. Jeg har kodet JavaScript fra Netscape til Chrome. I senere tid har det gått i PHP for mer lettvekt web-løsninger og Java for tyngre enterprise-løsninger.

Man kan kode overalt, og forskjellige operativsystemer og forskjellige programmeringsspråk har i hovedsak de samme egenskapene: Algoritmer og beregninger er åpenbart veldig likt: Selv om noen foretrekker foreach- over for-løkker, og noen map over foreach, så koker det ned til det samme: Du behandler lister med data. Tilgang til filer og nettverk er noe alle støtter. Selv om HTML og Javas Swing er forskjellig, kan man hovedsakelig få til det samme: Et grafisk brukergrensesnitt hvor man kan taste inn tall og tekst, trykke på knapper og se bilder og tabeller.

En ting som alltid har forundret meg er hvorfor kode er så sterkt knyttet til operativsystemer, plattformer og kompilatorer.

Ser man raskt på det er det jo selvfølgelig: Linux-programmet mitt kompilerer ikke på Windows fordi bibliotekene er forskjellige. C++-programmet mitt kompilerer ikke i Java. Java 8-programmet mitt må oppdateres for å kjøre på Java 11. C++-programmet mitt stopper å fungere når jeg setter på optimaliseringsnivå 3.

Ser man derimot litt grundigere på det, er det derimot mer overraskende. Et bibliotek med renteberegninger vil enkelt kunne beregne de samme rentene uansett om det er JavaScript, Java 8 eller 11 eller C++ på optimaliseringsnivå 0 eller 3. Her er det ingen egentlig forskjell. Du ville aldri sagt til sjefen: "For å beregne med disse rentene må vi ha Java, rentene kan rett og slett ikke regnes på med C++."

Det siste store prosjektet jeg var involvert i var et tyngre Bank-IT-system. Mye av de samme beregningene var implementert fire forskjellige steder, i fire forskjellige selskaper med hvert sitt team som utviklet, vedlikeholdt, videreutviklet og testet.

Her er det muligheter for bedret arbeidsfordeling og spesialisering. Men dagens teknologi gjør dette vanskelig. Det er klumpete å kalle C++ fra Java. Å ha flere språk i en byggeprosess gjør den betydelig mer komplisert. Å ha flere språk i et prosjekt gjør det vanskeligere for editorer og IDEer å hjelpe til med analyse, refaktorering og navigering. Å kalle over et web-grensesnitt fører til mye generert kode og selve nettverkshoppet er en vanlig kilde til tregheter i moderne applikasjoner.

Ny teknologi

Jeg har utviklet en ny teknologi som gjør det mulig å utvikle gjenbrukbar kode som passer inn i det utviklingsmiljøet man allerede har. Teknologien gjør det mulig å skrive beregninger og algoritmer én gang, så er koden tilgjengelig i mange andre språk. Teknologien "progsbase" lar en kode i en forenklet versjon av Java. Dersom denne koden kompilerer med Java-kompilatoren og deretter passerer analysatoren til progsbase, kan koden oversettes. Den oversatte koden fungerer helt likt som originalen, og kodens lesbarhet er bevart.

Man kan altså skrive beregnings- og algoritme-kode én gang i Java (en begrenset utgave) og så få koden tilgjengelig i C, C++, JavaScript, C#, PHP, Python, Visual Basic, Swift, LibreOffice Basic, Ruby og Visual Basic for Applications.

Den begrensede utgaven av Java inneholder det man trenger for å effektivt skrive beregnings- og algoritme-kode: funksjoner, variabler, arrays og datastrukturer, matematiske uttrykk, if-setninger og løkker, de vanlige matematiske funksjonene og et stort bibliotek med beregninger og algoritmer kodet med disse egenskapene.

Et naturlig spørsmål er nå: Hvorfor er ikke egenskap X med? For eksempel generics, templates, exceptions, objekt-orientering og reflection. Selv om disse egenskapene absolutt har sine fordeler og bruksområder, så er effekten av å bruke dem at man binder seg til en kompilator eller språk, og koden kan ikke gjenbrukes. Da blir det et spørsmål om fordelene av å bruke disse egenskaper og større enn den enorme gjenbruken som muliggjøres hvis man ikke bruker disse egenskapene. Er det viktigere å bruke generics og kode noe fire ganger enn å kunne redusere antall team med tre? Man bør iallefall vurdere dette opp mot hverandre.

En visjon med teknologien 'progsbase' er at selskaper kan spesialisere seg på gjenbrukbar kode i større grad. Selskaper som skal utvikle kode bør i større grad undersøke hvilke komponenter som allerede er utviklet og gjenbruke disse i størst mulig grad for å hindre dobbeltarbeid, trippelarbeid eller verre. Siden den gjenbrukbare koden er open-source kan man tilpasse bibliotekene selv hvis man finner mangler, og kanskje til og med bidra tilbake til det gjenbrukbare prosjektet.

Den gjenbrukbare koden kan kalles helt native, uten trege nettverkskall, klumpete broer mellom språk eller klumpte byggeprosesser. Koden bygges, pakkes og analyseres som én kodebase i ett språk.

Denne teknologien egner seg ikke overalt eller for alle bransjer som bruker IT. Men rekkevidden er likevel enorm: Overalt hvor penger står sentralt: Bank, finans, forsikring, pensjon, finansielle instrumenter, renter, aksjer, obligasjoner, risiko. Mange steder i handel med regnskap, lager og prisberegninger. Tekniske oppgaver rundt drift av flyplasser, logistikk, strømnett, energiproduksjon, kommunikasjonsnett, vann og kloakk, fabrikker. Bygging, testing og kvalitetssikring av toglinjer, antennesystemer, satelittsystemer, veinett, bygninger og biler. Beregninger innen gambling. Multimedia med audio-, video- og bildekoding og -behandling. For å nevne noen.

Slik kommer du i gang

Last ned og installer progsbase-klienten og opprett konto på progsbase.com. Skriv følgende kommando for å aktivere klienten med kontoen du opprettet:

progsbase login

En funksjon som mange nok har eller bruker i sin kodebase er validering av norsk organisasjonsnummer. Norske organiasjonsnummere består av ni siffer, hvor det siste er et kontrollsiffer. Hvis en bruker av et IT-system har tastet inn er orgnummer, er det nyttig å kjøre en liten sjekk for å se om brukeren kan ha tastet feil.

Her er koden skrevet i den forenklede versjonen av Java som er progsbase-kompatibel:

package orgnummer.orgnummer;
public class Orgnummer {
   public static boolean erGyldigOrgNummer(double [] o){
       boolean gyldig;
       double sum, rest, kontrollsiffer;

       if(o.length == 9d){
           sum = o[0] * 3d + o[1] * 2d + o[2] * 7d + o[3] * 6d + o[4] * 5d + o[5] * 4d + o[6] * 3d + o[7] * 2d;
           rest = sum % 11d;
           kontrollsiffer = 11d - rest;

           gyldig = rest != 1d && kontrollsiffer == o[8];
       } else {
           gyldig = false;
       }

       return gyldig;
   }
}

Lag mappestruktur for et prosjekt.

mkdir -p orgnummer/orgnummer/main/orgnummer/Orgnummer

Lag filen Orgnummer.java i denne mappen å plasser koden over i filen.

Det siste som trengs er litt informasjon om biblioteket i en JSON-fil. Lag filen info.json i mappen orgnummer/orgnummer og fyll inn følgende:

{
  "name": "orgnummer",
  "version": "0.1.0-SNAPSHOT",
  "organization namespace": "<domenenavnet du valgte>.orgnummer",
  "scientific namespace": "other.government.norway.organizationnumbers",
  "imports": [],
  "development imports": [],
  "ownerCustomerId": "<brukeren du lagde>"
}

Du har nå laget et bibliotek for å validere organisasjonsnummer i 12 forskjellige programmeringsspråk. Her er det kanskje noen språk du ikke har skrevet før eller du i det hele tatt visste fantes. Kall følgende kommando i mappen orgnummer/orgnummer for å konvertere koden til Visual Basic.NET:

progsbase convert Java . "Visual Basic 9" ../../orgnummervb

Her er koden som dukker opp i filen Orgnummer.vb:

Imports System.Math
Public Module Orgnummer
  Public Function erGyldigOrgNummer(ByRef o As Double ()) As Boolean
    Dim gyldig As Boolean
    Dim sum, rest, kontrollsiffer As Double

    If o.Length = 9
      sum = o(0)*3 + o(1)*2 + o(2)*7 + o(3)*6 + o(4)*5 + o(5)*4 + o(6)*3 + o(7)*2
      rest = sum Mod 11
      kontrollsiffer = 11 - rest
      gyldig = rest <> 1 And kontrollsiffer = o(8)
    Else
      gyldig = false
    End If

    Return gyldig
  End Function
End Module

Andre språk du kan konvertere til: Java, C 89, C 99, C++, JavaScript 5, JavaScript 7, PHP 5, Python, C#, Visual Basic for Applications, Swift, Libre Office Basic og Ruby.

Nyttige måter å bruke det på

Man kan lage biblioteker for beregninger og datamanipulering som er tilgjengelig for hele bedriften, uansett hvilket språk og miljø de forskjellige systemene bruker. Koden kan også deles med eller selges til andre bedrifter eller gjøres open source. repo.progsbase.com inneholder mange slike gratis open source biblioteker.

Ønsker man å ta i bruk et nytt språk i et prosjekt er sjansen stor for at disse bibliotekene kan oversettes til dette språket og taes i bruk umiddelbart.

Etter hver som tiden går endres hvilket språk man foretrekker å bruke. Biblioteker skrevet med progsbase vil med stor sansynlighet kunne taes med videre. Det betyr at kode skrevet med progsbase har betydelig mindre sansynlighet for å bli legacy i den forstand at språket ikke lenger er i bruk. Dette er et betydelig problem i mange bransjer, for eksempel i bank hvor millioner av linjer med beregning- og datamanipuleringskode er skrevet i COBOL.