Visuell programmering

**Visuell programmering**, også kjent som **blokkoding**, **blokkprogrammering** eller **grafisk programmering**, vil si å lage et dataprogram ved å manipulere objekter i et grafisk brukergrensesnitt i stedet for å skrive konvensjonell tekstkode. Det gjør at man kan programmere på en romlig og visuell måte ved hjelp av både tekst og grafiske symboler, enten som deler av syntaksen eller som hjelpenotasjon. Mange visuelle programmeringsspråk er basert på "bokser og piler" der boksene (eller andre objekter) representerer entiteter, mens piler, streker og linjer representerer relasjoner.

Et av formålene med visuell programmering er å gjøre programmering tilgjengelig for nybegynnere. Det kan også brukes av erfarne programmerere for hjelp til syntaks, semantikk og pragmatikk.

Per 2005 var den daværende trenden å forsøke å integrere visuell programmering med dataflytprogrammering slik at man har umiddelbar tilgang til programmets tilstand slik at man letter feilsøking eller automatisk kan generere dokumentasjon. Dataflytspråk tillater også automatisk parallellisering som antas å bli en av fremtidens største programmeringsutfordringer.

## Typer visuelle språk
Følgende liste er ikke gjensidig utelukkende, siden noen visuelle programmeringsmiljø kan inkludere elementer fra flere paradigmer. Valget av det visuelle programmeringsparadigmet avhenger ofte av de spesifikke kravene til applikasjonen eller preferansene til brukerne eller utviklerne.

; **Blokkbasert programmering**
: Popularisert av plattformer som Scratch og Blockly, brukt for introduksjon til programmering i utdanning.
; **[[Flytdiagram|Flytdiagrammer]]**
: Mye brukt i programvareutvikling og systemdesign for å representere algoritmer og prosesser.
; **Dra-og-slipp-grensesnitt**
: Vanlig i grafiske designverktøy og utviklingsmiljø for å lage brukergrensesnitt.
; **[[Nodegraf|Nodegrafer]]**
: Ofte brukt i visuelle programmeringsspråk, spillutvikling og dataflytsystemer.
; **[[Dataflytprogrammering]]**
: Populært i miljøer for parallellprosessering, signalbehandling og visuell programmering.
; **Ikonisk programmering**
: Brukes for å forenkle programmeringsoppgaver, eksempelvis for utvikling av mobilapplikasjoner.
; **[[Endelig tilstandsmaskin|Tilstandsmaskiner]]**
: Mye brukt i spillutvikling, styringssystemer og modellering av reaktive systemer.
; **Arkbasert programmering**
: Finnes i regnearksapplikasjoner og visse pedagogiske programmeringsmiljø.
; **Tidslinjebasert programmering**
: Vanlig i multimedia- og animasjonsprogramvare for sekvensering av hendelser over tid.
; **Romlig programmering**
: Brukes i visse interaktive og 3D-modelleringsmiljø.
; **Skjemabasert programmering**
: Brukes i applikasjoner der brukerinndata og grafiske grensesnitt spiller en betydelig rolle, for eksempel applikasjoner for dataregistrering.

## Visuelle språk til generell bruk

De fleste grafiske programmeringsspråk er laget for utdanning eller domenespesifikk bruk hvor brukerne er nybegynnere på programmering. 

Det har vært noen forsøk på å utvikle visuelle programmeringsspråk til generell bruk som et alternativ til for eksempel C, C++, Java og så videre. Noen eksempler er forskningsprosjekter som Envision og PWCT. 

Det er vanlig at visuelle programmeringsspråk utvikles ved hjelp av et tekstbasert programmeringsspråk. Dersom man utvikler et generelt visuelt programmeringsspråk vil det motsatte også være mulig.

## Liste over visuelle språk
Følgende inneholder en liste over noen notable eksempler på visuelle programmeringsspråk.

### Pedagogisk

* Scratch, et produkt fra MIT designet for barn i grunnskolen og skolefritidsordninger.

### Multimedia

* Blender, en 3D-grafikkpakke med åpen kildekode som inkluderer nodegrafer for å bygge shaders,  compositing  og teksturer,  ikke-destruktiv geometri.
* Pure Data, et visuelt programmeringsspråk utviklet for å lage interaktiv datamusikk og multimedieverk.
* Virtools, en mellomvare som brukes for å lage interaktiv 3D

### Videospill

* Nintendo Switch, utviklet av Nintendo
* GameMaker Studio, har et spillopprettingssystem med dra-og-slipp
* Godot, en spillmotor som lar spillskript og grafikk bygges ved hjelp av en nodegraf
* Unreal Engine 4 har et nodebasert visuelt programmeringsspråk kalt Blueprints

Mange moderne videospill bruker atferdstrær, som i prinsippet er en familie enkle programmeringsspråk designet for å modellere atferd for ikke-spillere. Atferdene er modellert som trær, og blir ofte redigert i grafiske vinduer.

### Systemer og simulering

* DRAKON, et grafisk algoritmisk språk
* Node-RED, verktøy for rask utvikling av programvaresystem

### Automasjon

* Automator

### Datavarehus og virksomhetsetterretning
* Microsoft Access, funksjonalitet for å designe spørringer
* Microsoft SQL Server Integration Services (SSIS), en plattform for dataintegrasjon og arbeidsflytapplikasjoner
* Pentaho Data Integration (PDI), tidligere kalt Kettle, et ETL-verktøy med åpen kildekode

### Diverse

* YAWL, grafisk arbeidsflytspråk

## Visuelle stiler

* DRAKON, et SDL- og AADL-påvirket visuelt 2D-programmeringsspråk designet for å utvikle det innebygde sanntidssystemet for automatisk flyging og landing av den sovjetiske Buran-romfergen
* Kjørbar UML, en profil av Universal Modeling Language som definerer kjørbar semantikk for en delmengde av UML
* Flytdiagram
* Subtext, et moderat visuelt programmeringsspråk

## Se også
* Konseptdiagram
* Dataflytprogrammering
* Deutsch-grensen, en aforisme om at det ikke bør være mer enn 50 primitiver på en skjerm samtidig
* Dra og slipp
* Flytbasert programmering
* Lavkode programvareutvikling
* Kodefri programvareutvikling
* Unified Modeling Language

## Referanser