BASIC fejrer 50 år med spaghettikode og uendelige løkker

Programmeringssproget, som en hel generation af danske programmører stiftede bekendtskab med på deres første hjemmecomputere, har rundet 50 år.

100 FOR X=1 TO 50
110 PRINT "BASIC!"
120 NEXT X
130 END

For en hel generation af programmører var BASIC det første sprog, de lærte at skrive deres første programlinjer i. Det var nemlig en BASIC-fortolker, der mødte brugerne, når de tændte deres Commodore, ZX Spectrum eller Amstrad hjemmecomputer i 1980'erne.

BASIC blev lanceret den 1. maj 1964 fra Dartmouth College, som har fejret den runde fødselsdag med en ny hjemmeside, hvor man blandt andet kan finde den originale manual til sproget.

Sproget blev udviklet for at give studerende og andre en let introduktion til programmering. Samtidig skulle det kunne oversættes hurtigt til maskinkode og køre på mange forskellige platforme.

Illustration: Dartmouth College

Det sidste var en åbenlys succes, da BASIC-fortolkere blev skrevet til et væld af platforme, faktisk er der registreret flere hundrede varianter på Wikipedia.

Kommandoerne og formateringen i BASIC blev konstrueret, så det var enkelt at læse, så studerende kunne lære de grundlæggende principper som IF-statements og FOR-løkker og siden bruge den viden i mere avancerede sprog som Algol og Fortran.

Den første version havde en række begrænsninger som følge af datidens computere. Muligheden for, at program kunne modtage input fra brugeren, blev således først tilføjet senere med INPUT-kommandoen, som ikke var med i den første version af BASIC.

BASIC er siden blevet udviklet i mere avancerede versioner af blandt andre Microsoft, hvis første softwareprodukt netop var en BASIC-fortolker. Microsoft har da også markeret fødselsdagen med en VB.Net-fortolker, som ligner den gamle QuickBasic til DOS til forveksling og i øvrigt benytter Microsofts nye Roslyn-compiler.

I Danmark var BASIC også en del af grundlaget for Comal80-sproget, som blev brugt i EDB-undervisningen, men i takt med, at kraftigere pc'er blev mere almindelige, blev BASIC og dets varianter med tiden fortrængt af sprog som TurboPascal, C++ og Java.

BASIC var, som navnet antyder, meget basalt i sin funktionalitet, og det var let at ende med 'spaghetti-kode' eller programmer, der kørte i uendelig løkke. Det sidste kunne dog også være en fornøjelse eller nærmest en feature i sig selv.

Så lad os ønske BASIC 'tilløkke' på klassisk BASIC-manér:

10 PRINT "TILLYKKE BASIC! ";
20 GOTO 10
RUN

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (44)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Christian Nobel

Så har Olimex denne lille dims:

https://www.olimex.com/Products/Duino/Duinomite/DUINOMITE/open-source-ha...

En komplet Basic computer, men dog så moderne at den kan gemme programmer på et SD kort, har USB Port, og sshserver så man kan tilgå den fra et terminalvindue.

For at få noget basal føling af hvordan en computer virker, uden at være omklamret af abstraktionslag og frameworks er den faktisk ret genial - og man er i øvrigt så tæt på jernet at man også direkte kan styre IO fra Basic.

Brian Hansen

Jeg fik min C64 til jul da jeg var 7år, og dagen efter sad jeg og fodrede den med de kode eksempler der fulgte med i manualen :-)
Minder mig om de simple tekst baserede spil jeg skrev til den, og mere eller mindre tvang min omverden til at spille. Jeg synes selv det var det fedeste, EVER, men jeg tror ikke er andre var helt så begejstrede som mig ;-)

Torben Mogensen Blogger

Amstrads BASIC var baseret på BBC BASIC, som blev lavet af Acorn Computers til deres BBC Micro. Sproget var designet af Sophie Wilson, som senere blev en af de to designere af ARM processoren. Amstrad-versionen skulle køre på en Z80 processor, hvor BBC Micro brugte 6502 (ligesom Apple og Commodore), så den blev skrevet om fra bunden. Se evt. http://www.theregister.co.uk/2014/02/12/archaeologic_amstrad_cpc_464/

BBC BASIC var en væsentligt bedre BASIC end stort set alt andet, man kunne få på dette tidspunkt. Der var mange elementer til fælles med COMAL 80, men jeg tror ikke, at der var direkte inspiration. Snarere var begge inspireret af Pascal.

BASIC på hjemmecomputere led i øvrigt under mangel på standardisering, så stort set ingen programmer kunne flyttes fra en maskine til en anden uden (nogen gange omfattende) omskrivning. Det gjaldt selvfølgelig ting som grafik og lyd, som var meget hardwarespecifik, men selv elementer som navngivning af variabler, skilletegn mellem sætninger, osv. var forskellig fra computer til computer.

Henrik Jacobsen

...når I mener at C64 og Amstrad var "gamle dage". Kørte mine første BASIC programmer på en IBM kuglehovedterminal forbundet til ØK Data via et 110 buad modem. 1973... Århus Hovedbibliotek. Det var noget DR undervisningsserie i samarbejde med bibliotekerne og ØK-D.

Morten Hansen

En ting er de sentimetale minder om BASIC Classic.
En anden er Microsofts famøse Visual Basic - før .NET. Det er desværre tragisk hvor mange steder i større organisationer man stadig bruger og vedligeholder efterhånden ret komplekse løsninger i VB6 - og ikke mindst hvor centrale de (stadig).

Ditlev Petersen

C64 brugte da en 6510-processor? Det var VIC-20, der brugte 6502 (0g en del andre). Rodede programmer og uendelige løkker er strengt taget ikke et særkende for BASIC, omend ordentlige BASIC-programmer kunne være meget svære at lave. Vi havde en præcompiler til en BASIC til pc'en, den hed TFE (udtaltes Tøffe). Den hjalp en del på kalamiteterne (og indførte andre). Jeg brugte den helt frem til 1999 (der var noget med Y2K).

Vi havde en datamat på Gymnasiet, som vi delte med Handelsskolen (faktisk stod den der). Ca. 2 kByte til hver bruger. Kun fjernskriverne kunne hulle og læse hulstrimmel, så skærmterminalerne var mindre populære. Det var også BASIC (og få af lærerne forstod sprogets finesser). Der var en lille klike, der hang ved terminalerne i frikvartererne og efter skoletid. Nogle syntes, det var uendeligt morsomt at lave en løkke, der skrev Handelsskoleelevrne er dumme! ud på linieskriveren (som jo stod derovre). Computeren blev efterfulgt af tre ABC80, og så var der trængsel ved maskinerne. Det var egentlig mærkeligt, at de ikke blev stjålet.

Lang tid efter stod der en maskine i biologilaboratoriet, som ingen vidste, hvad var til. Den blev derfor ikke smidt ud. Den var til at rulle hulstrimmel op på.

Frithiof Andreas Jensen

Jeg gik i krig med at skrive en Z80 assembler i BASIC.


Ak Ja: Z80 havde to böger, en "programming manual" og en "peripherals ditto", cirka 150 sider i alt. Man kunne slå det hele op.

Sidste gang jeg gjorde noget med C/assembler, på en "moderne CPU", en AMD Opteron, måtte jeg läse omkring 150 sider på Memory Controlleren alene. Resten af processorens dokumentation + errata fylder 0,75 hyldemeter.

Ingen läser det frivilligt! Man kunne sätte en fuldt dokumenteret "NSA-bit" ind og ingen ville opdage det i årevis ;-).

Jimmy Knudsen

Jeg startede med en ZX Spectrum 16K og nød at bruge mange tiemr på den.
Skiftede efterfølgende til en Commodore 128D som jo var luksus.
Efter den fik jeg en Amiga 500 og senere en A4000'er som jeg legede med AMOS Basic på. Senest har jeg brugt VB.NET som jo essentielt bare er endnu en generation af basic, men det er sjovt at se hvor stærkt sproget er blevet over tid.

Christian Nobel

At gå efter BASIC som man selv startede med i sin tid giver vel ingen mening i dag, selvom det var så nemt forståeligt at alle kunne være med

Hvorfor ikke?

Programmering drejer sig om logik, og evnen til at sætte en række hændelser op, baseret på andre hændelser, eller ændringer i tilstande.

Og Basic har den fantastiske egenskab at det et nemt at forstå hvad man laver, og det er dejligt rent for afhængigheder til alverdens eksterne libraries eller frameworks.

Jeg vil klart anbefale Olimex'en, tilsluttet et tastatur og en sḱærm - og hvis man så også sætter nogle lysdioder op på GPIO'en så fås der en meget tæt forståelse af hardwaren.

Da programmeringssprog jo alligevel nærmest er at sammenligne med modetøj, så er det alligevel ikke til at vide hvad der bliver hipt når barnet bliver voksent, men den basale forståelse som Basic kan give (uden barnet knækker halsen eller drukner i informationsoverflow) vil til al tid være et godt fundament.

Sammenlign det med at tage kørekort - man tager jo ikke kørekort for specifikt at køre Ford Mondeo resten af livet, men for grundlæggende at lære hvordan man gebærder sig i trafikken.

Christian Nobel

Sad lige og reflekterede over overskriften.

Hvor vil Jesper egentlig hen?

Det er muligt i alle programmeringssprog at lave uendelige løkker, og spaghettikode kan (og gør det så sandelig også) også sagtens forekomme i up-nose C programmer, eller hvad har vi.

Forskellen var nok mere at BASIC var mere tilgængeligt for "folket", hvorfor der også kom mange programmer fra folk der ikke mestrede kunsten at lave et struktureret program - men mon ikke de også ville lave rod, uagtet hvilket andet sprog de fedtede med.

Og så kan man tilføre en del struktur ved at benytte sig af subroutiner, ligesom linienummereringen heller ikke er nødvendig i nyere BASIC,er (plus at de er blevet objektorienterede osv., og på den måde nærmer sig en løst typed Pascal).

Torben Mogensen Blogger

Nogen bud på, hvilket sprog man skal satse på, hvis man vil lære sine børn programmeringens kunst?

Det afhænger af børnenes alder. Til mindre børn (t.o.m. 5 klasse) vil jeg foreslå Scratch. Større børn kan sagtens håndtere et "rigtigt" sprog. Her kunne man bruge Python, hvis man går udenom de objektorienterede dele af sproget. Alternativt F#. Der er nogle gode tutorials på fsharp.org.

Jesper Stein Sandal

Det er muligt i alle programmeringssprog at lave uendelige løkker, og spaghettikode kan (og gør det så sandelig også) også sagtens forekomme i up-nose C programmer, eller hvad har vi.

Jeg er skam stor fan af BASIC og tilsvarende sprog. Men BASIC blev - så vidt jeg husker - sat i lidt samme bås som Cobol, især da C++ blev det nye hotte. Det var, kan vi se i dag, ikke helt rimeligt.

Der er eksempelvis en sund pædagogisk lektie i, at man ikke får smidt en compiler-advarsel fra et IDE i hovedet, hvis man har lavet en uendelig løkke, men kan se resultatet udfolde sig direkte på skærmen, sådan som det var i de gamle BASIC-fortolkere.

Troels Henriksen

Det er muligt i alle programmeringssprog at lave uendelige løkker, og spaghettikode kan (og gør det så sandelig også) også sagtens forekomme i up-nose C programmer, eller hvad har vi.

Oprindelig BASIC havde ikke synderligt gode faciliteter for struktureret programmering[1], hvilket inspirerede en del misbilligelse, især i de akademiske miljøer. Her er Dijkstras citat, om at BASIC forvrider nye programmørers sind så meget, at det bliver næsten umuligt at lære dem gode vaner, især mindeværdigt. BASICs ry var flosset længe før der var nogen der tænkte på C++.

Moderne dialekter (og med "moderne" mener jeg fra 80erne og fremefter) rettede op på disse mangler, og herefter er det primært overvægten af uerfarne eller ufaglærte programmører, der har givet BASIC dets tvivlsomme ry. Nogenlunde det samme gør sig gældende for andre sprog, der har en stor basis af mindre kompetente programmører, som f.eks. PHP. I 90erne blev der utvivlsomt også skrevet uhyre mængder af elendig Delphi, til trods for at Pascal bliver anset som et meget veldesignet sprog til struktureret programmering.

[1] Det er værd at huske at "struktureret programmering" engang var en ny og radikal idé, som man kunne vælge til eller fra, på samme måde som objektorienteret programmering og funktionsprogrammering. Nutildags er der ikke mange der anfægter værdien ved struktureret programmering (de fleste er nok kun perifært klare over alternativet), men hvis man ikke er vidende om at sådanne basale teknikker engang var oppe til debat, så kan det være svært at forstå tekster fra programmeringens barndom.

Christian Nobel

Tænkte bare at der måske var kommet noget nyere i de 20-25 år der er gået.

Er det at ting er nye en kvalitet i sig selv?

Vi taler immervæk stadig dansk her i landet, selv om der faktisk er opfundet nyere sprog, eksempelvis Esperanto, som oven i købet har en mere logisk opbygning end dansk.

Men som Jesper siger, BASIC i en nøddeskal er jo at det er enkelt at lære og opbygge færdigheder i, så hvorfor ikke bruge det?

Stefan Fuglsang

Python er et fint sprog, men hvis man gerne vil have lidt mere grafik og bevægelse, så prøv Processing (link)

Udgangspunktet er Java, men programmøren bliver hjulpet en del på vej, så det ikke er så svært at komme i gang med noget der virker.
(se evt. min nystartede blog "programmering for begyndere" stefanfuglsang.wordpress.com)

Der er masser af eksempler på processing.org, fx
en cirkel der bevæger sig i et vindue:

int rad = 60;        // Width of the shape  
float xpos, ypos;    // Starting position of shape      
   
float xspeed = 2.8;  // Speed of the shape  
float yspeed = 2.2;  // Speed of the shape  
   
int xdirection = 1;  // Left or Right  
int ydirection = 1;  // Top to Bottom  
   
   
void setup()   
{  
  size(640, 360);  
  noStroke();  
  frameRate(30);  
  ellipseMode(RADIUS);  
  // Set the starting position of the shape  
  xpos = width/2;  
  ypos = height/2;  
}  
   
void draw()   
{  
  background(102);  
   
  // Update the position of the shape  
  xpos = xpos + ( xspeed * xdirection );  
  ypos = ypos + ( yspeed * ydirection );  
   
  // Test to see if the shape exceeds the boundaries of the screen  
  // If it does, reverse its direction by multiplying by -1  
  if (xpos > width-rad || xpos < rad) {  
    xdirection *= -1;  
  }  
  if (ypos > height-rad || ypos < rad) {  
    ydirection *= -1;  
  }  
   
  // Draw the shape  
  ellipse(xpos, ypos, rad, rad);  
}
Stefan Fuglsang

Der findes vistnok forskellige udgaver af Processing, men jeg refererer til JAVA-versionen på Processing.org:
"Processing is based on Java, but because program elements in Processing are fairly simple, you can learn to use it even if you don't know any Java. If you're familiar with Java, it's best to forget that Processing has anything to do with Java for a while, until you get the hang of how the API works."

Log ind eller Opret konto for at kommentere