Luna, den visuelle måde at skabe programmer

sprogdesignprincipper

et veldesignet domænespecifikt sprog, eller et sprog generelt, giver folk mulighed for både at udtrykke deres tanker på en hurtig og præcis måde samt forstå feedbackresponsen let. Det er især vigtigt at undersøge, fordi det direkte påvirker, hvor hurtigt du kan gentage — teste nye ideer og forstå mellemresultater. Hurtige iterationer gør det muligt at teste et bredere udvalg af parametre, herunder dem, der ikke bør fungere ved første øjekast, så du kan meget bedre forstå det domæne, du undersøger. Således påvirker sprogdesignet ikke kun den samlede tid, der er nødvendig for at løse et problem på en ikke-lineær måde, det er ofte nøglen til at finde løsningen overhovedet.

et vigtigt spørgsmål opstår — Hvad er et godt sprog? Er der nogen retningslinjer, som hvert domænespecifikt sprog skal følge? Vi mener, at der er to grundlæggende principper:

  • folk har brug for en øjeblikkelig forbindelse til det, de laver
    dette princip blev først offentligt introduceret af Brett Victor, en visionær mellem menneske og computer, under hans tale, der opfandt princippet. Enhver overtrædelse af dette princip fremmedgør brugeren fra de faktiske problemer, han forsøger at løse, hvilket følgelig mindsker forståelsen og øger antallet af fejl.
  • folk kan ikke begrænses af det værktøj, de bruger
    folk har en tendens til at afvise ethvert værktøj, der naturligvis begrænser deres udtryksevne. Dette er den nøjagtige grund til, at så mange løsninger, som hjemmesideskabere, spilskabere eller visuelle programmeringssprog, aldrig indhenter. Enhver DSL, der er mere kompleks end en teksteditor, kan let krænke dette princip ved at give sine brugere et for begrænset sæt foruddefinerede komponenter på højt niveau. Selvom disse komponenter kan udvides ved at skrive kode, ødelægger behovet for at ty til noget underliggende programmeringssprog designet og gør det ubrugeligt for et mindre teknisk publikum.

Principovertrædelse

overtrædelse af et af disse principper fører altid til en suboptimal løsning. Lad os overveje det grafiske design igen. Bruger Photoshop altid bedre end at skrive HTML, SASS og JavaScript-kode? Velsagtens. Disse løsninger overtræder henholdsvis det første og det andet princip. Photoshop giver et digitalt lærred med et begrænset sæt foruddefinerede, næppe udvidelige værktøjer. HTML, Sass og JavaScript giver på den anden side en tekstgrænseflade og fremmedgør således brugeren fra dens virkelige oprettelse, men sætter ikke en stram begrænsning af udtryksevnen. Lad os overveje to brugssager:

  • et hjemmeside design. Der er fem, jævnt arrangerede elementer i menulinjen. Hvis du vil tilføje et nyt element og ændre farvepaletten på hjemmesiden, er alt hvad du skal gøre at ændre en enkelt linje i HTML og en farvevariabel i Sass. Uanset hvor kompleks hjemmesiden er, opdateres hvert element automatisk. At gøre det samme i Photoshop kræver flere størrelsesordener mere tid — Opret et nyt menupunkt, brug et justeringsværktøj til at arrangere elementerne, manuelt ændre farverne og sandsynligvis genanvende nogle transformationer og filtre i mere komplekse hjemmesideområder.
  • et kunstnerisk maleri. Brug af HTML, SVG og Sass i en teksteditor til at udtrykke en kunstnerisk vision ville næppe være muligt. Jo mere kreativ og synlig processen er, desto vigtigere bliver værktøjssættet og instant feedback loop.

ville det være muligt at smelte begge tilgange? Det er ikke kun muligt, der er allerede løsninger på vej i den rigtige retning. Tænk på Sketch, som er blevet det ultimative design toolkit til Mac OS. Hvorfor foretrækker så mange mennesker det frem for Photoshop? Svaret er overraskende simpelt-Sketch begrænser brugerens udtryksevne mindre end Photoshop. Det giver dig mulighed for at oprette genanvendelige designelementer og derefter bulk-opdatere deres parametre, ligesom Sass, men i et interaktivt miljø. Der er mange andre måder at forbedre designerens oplevelse yderligere. Se en anden tale fra Brett Victor, tegning dynamiske visualiseringer, for yderligere inspiration.

forbandelsen af DSLs

Hvis vi kender de meget grundlæggende principper for et perfekt domænespecifikt sprog, Hvorfor er de tilgængelige domænespecifikke værktøjer ikke der endnu? Hvorfor lever vi ikke i en ubegrænset verden?mens domænespecifikke sprog leverer en enestående måde at manipulere og forstå data på, smugler de også lydløst ødelagte designmønstre. Eksistensen af mange, små DSL ‘ er, der ikke kan tale med hinanden, fører i et langt perspektiv til en dysfunktionel, fragmenteret programverden.

i den virkelige verden er der et konstant samarbejde mellem domæner. Billedmanipulation bruges ofte til behovene inden for maskinlæring og bioinformatik, som igen i stigende grad bliver et vigtigt redskab til arkitektur og køretøjsdesign. Den hurtige IoT-udvikling resulterer i mindre og mere autonome enheder, der åbner en ny verden for tidlig sygdomsopdagelse, sundhedsovervågningssystemer eller intelligente byer.

der er dog næppe noget samarbejde i programmelverdenen. Programmeludviklere skriver den samme kode igen og igen, hvilket fører til høje udviklingsomkostninger og innovationsstagnation. Du kan ikke bare tage en formeditor fra dit yndlingsgrafikprogram, finjustere det til dine behov, lim det med maskinlæringsværktøjer og oprette et AI-assisteret 3D-modelleringsværktøj til behovene ved 3D-udskrivning. I stedet for timer har du i øjeblikket brug for dage eller måneder for at udføre en sådan opgave. Selv hvis du finder biblioteker, der implementerer lignende funktionalitet, skal der udføres en enorm mængde arbejde, før det følger “ingen grænser” – princippet og giver et virkelig fleksibelt miljø, så dine brugere kan finjustere, hvordan modellen er bygget. Som et resultat, i stedet for at forbedre eksisterende komponenter eller opfinde nye måder at manipulere data på, implementerer udviklere kendte løsninger fra bunden i hver ny applikation.

Luna, sproget

retningslinjerne for domænespecifikke sprog til at følge det første princip er klare. For at levere den umiddelbare forbindelse mellem mennesker og deres oprettelse, skal domænespecifikke sprog kombinere rig datavisualisering og intuitiv datamanipulation i en enkelt, glat oplevelse. Der er dog ingen tommelfingerregel, hvordan man gør det korrekt. Det afhænger stærkt af det bestemte domæne og brugerens præferencer, hvilket gør det andet paradigme, evnen til at tilpasse komponenter, endnu vigtigere.

efter det andet princip er det imidlertid mere vanskeligt. Hvordan kan vi designe et sprog og være sikre på, at det ikke begrænser folks udtryksevne? Hvordan kan vi give brugerne mulighed for både at oprette brugerdefinerede genanvendelige komponenter og dybt ændre eksisterende, men alligevel holde grænsefladen enkel og ikke kræve, at de er programmerere? Ideen er at give brugeren mulighed for trinvist at ændre perspektivet. I stedet for at ty til et underliggende programmeringssprog kan vi tillade bogstaveligt talt at dykke ned i hver komponent og bruge det samme (eller meget lignende) sprog til at beskrive, hvordan underkomponenterne kommunikerer. Dykning længere ind i indlejrede komponenter giver brugerne mulighed for gradvist at gå fra høje til lave abstraktionsniveauer efter behov.

Dette er præcis, hvad Luna gør. Det blev bygget på tre hovedkoncepter:

  • datavisualisering og manipulationsmiljø
    fra det højeste perspektiv giver Luna dig mulighed for at visualisere og manipulere data ved hjælp af interaktive og udvidelige komponenter. Desuden giver Luna en måde at nemt definere nye komponenter, ændre eksisterende og dele dem med samfundet.
  • datastrømsgraf
    Du kan bogstaveligt talt forstørre ud for at se, hvordan komponenterne på højt niveau er forbundet sammen og danner en datastrømsgraf. Du kan tilslutte dem eller indsætte nye komponenter for at omdefinere, hvordan grafen fungerer. Luna leverer komponenter, der spredes over alle niveauer af abstraktion, fra høj til lav. Fra at male et lærred over statistiske funktioner til bitvise operatører
  • indlejrede datastrømgrafer og koderepræsentation
    hver komponent i Luna er bygget ud af andre komponenter uden undtagelse. Du kan altid dykke helt ned til det ønskede abstraktionsniveau og finjustere det til dine behov. Du kan også kollapse flere tilsluttede komponenter til en ny, mere kraftfuld og dele den med andre. Desuden giver Luna sine brugere en meget unik evne til at skifte mellem repræsentationer — fra datastrømsgrafen til kode og omvendt. Det indebærer en meget vigtig sandhed-grafen er lige så kraftig som koden.

Luna blev designet som et samlet miljø til opbygning og hosting af visuelt rige domænespecifikke sprog. Det udvisker grænserne mellem domæner, så værktøjer fra forskellige felter problemfrit kan kommunikere og sameksistere.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.