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

5. maj 2014 kl. 11:3944
BASIC fejrer 50 år med spaghettikode og uendelige løkker
Illustration: Dartmouth College.
Programmeringssproget, som en hel generation af danske programmører stiftede bekendtskab med på deres første hjemmecomputere, har rundet 50 år.
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.
  1. 100 FOR X=1 TO 50
  2. 110 PRINT "BASIC!"
  3. 120 NEXT X
  4. 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.

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.

Artiklen fortsætter efter annoncen

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.

Artiklen fortsætter efter annoncen

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:

  1. 10 PRINT "TILLYKKE BASIC! ";
  2. 20 GOTO 10
  3. RUN
44 kommentarer.  Hop til debatten
Denne artikel er gratis...

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.

Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.

Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.

Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger
37
12. maj 2014 kl. 09:37

Basic bruges stadigt i dag, f.eks. til microcontrollere.

22
6. maj 2014 kl. 08:54

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).

25
6. maj 2014 kl. 09:17

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.

24
6. maj 2014 kl. 09:07

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.

19
6. maj 2014 kl. 08:28

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

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

26
6. maj 2014 kl. 09:55

Python er et rigtigt godt bud - det vokser med én lige fra begynderstadiet, samtidig med at det er muligt at lave store, komplicerede applikationer, når man kommer så langt.

27
6. maj 2014 kl. 10:26

Pascal (FreePascal/Lazarus) er også et godt bud, da der ikke er noget loft.

Problemet er bare, at vi også her har at gøre med et stort framework (i hvert fald når vi taler om Lazarus), at afstanden til selve "jernet" kan blive stor, og måske skræmmende.

21
6. maj 2014 kl. 08:52

Et godt bud er Python, det er nemt at komme igang og Python kan bruges til både små og store projekter.

Kig evt. på ipython (ipython.org) som er en interaktiv overbygning på python, der gør det endnu nemmere at lege med sproget.

20
6. maj 2014 kl. 08:41

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.

28
6. maj 2014 kl. 12:37

Hvorfor ikke?

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

Ideen skulle ikke så meget være at lære et bestemt sprog, men at opøve færdighed og nysgerrighed ift. at kunne skabe egne programmer på et nem måde.

30
6. maj 2014 kl. 13:41

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?

32
7. maj 2014 kl. 12:34

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:

  1. int rad = 60; // Width of the shape
  2. float xpos, ypos; // Starting position of shape
  3.  
  4. float xspeed = 2.8; // Speed of the shape
  5. float yspeed = 2.2; // Speed of the shape
  6.  
  7. int xdirection = 1; // Left or Right
  8. int ydirection = 1; // Top to Bottom
  9.  
  10.  
  11. void setup()
  12. {
  13. size(640, 360);
  14. noStroke();
  15. frameRate(30);
  16. ellipseMode(RADIUS);
  17. // Set the starting position of the shape
  18. xpos = width/2;
  19. ypos = height/2;
  20. }
  21.  
  22. void draw()
  23. {
  24. background(102);
  25.  
  26. // Update the position of the shape
  27. xpos = xpos + ( xspeed * xdirection );
  28. ypos = ypos + ( yspeed * ydirection );
  29.  
  30. // Test to see if the shape exceeds the boundaries of the screen
  31. // If it does, reverse its direction by multiplying by -1
  32. if (xpos > width-rad || xpos < rad) {
  33. xdirection *= -1;
  34. }
  35. if (ypos > height-rad || ypos < rad) {
  36. ydirection *= -1;
  37. }
  38.  
  39. // Draw the shape
  40. ellipse(xpos, ypos, rad, rad);
  41. }

34
7. maj 2014 kl. 12:48

Udgangspunktet er Java

Så vidt jeg husker, så er Processing (i hvert fald den der bruges på Arduino) blot et tyndt lag over C, ikke Java.

36
7. maj 2014 kl. 13:42

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."

33
7. maj 2014 kl. 12:42

... i øvrigt: Processing er et enkelt download, inkl. editor, og kræver ikke ekstra biblioteker. Funktionen setup() kaldes automatisk én gang når programmet startes, og funktionen draw() kaldes automatisk (op til) 60 gange i sekundet.

18
6. maj 2014 kl. 00:37

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.

11
5. maj 2014 kl. 14:04

Jeg tror, jeg vil tage tidligt fri og gå hjem og tænde min C= plus/4. Den virker stadig 100% (det gør min C= VIC20 desværre ikke helt).

10
5. maj 2014 kl. 14:01

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).

9
5. maj 2014 kl. 13:45

...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.

6
5. maj 2014 kl. 12:41

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 ;-)

3
5. maj 2014 kl. 12:14

IPUT-kommandoen -> INPUT-kommandoen

4
5. maj 2014 kl. 12:19

Du mener vel "SYNTAX ERROR"? ;)

(nu rettet, tak)

5
5. maj 2014 kl. 12:20

Hvilket minder mig om, hvor ofte det gik galt, når vi sad på drengeværelset og skrev side efter side med BASIC-kode af efter spilbladene.

Those were the days...

14
5. maj 2014 kl. 17:35

Those were the days...

Jeg husker da jeg skulle videre til "næste niveau" på min Spectrum: assemblerprogrammering. Problemet er i den forbindelse, at der ikke er en assembler til maskinen. Al assemblerkode skal håndoversættes til maskinkode og fodres ind via DATA-linier.

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

16
5. maj 2014 kl. 17:58

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 ;-).

2
5. maj 2014 kl. 12:07

Så har Olimex denne lille dims:

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

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.

1
5. maj 2014 kl. 11:58

AMStrad´s basic var nem at programmere i og havde mange kommandoer og funktioner i forhold til Commodore der havde en elendig basic.

44
19. august 2014 kl. 16:12

Njaeh, Commodore Basic er svjh. baseret på Microsoft's 6502, men de har købt en licens og derefter videreudviklet det til Commodore Basic.

7
5. maj 2014 kl. 12:47

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.

15
5. maj 2014 kl. 17:50

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å.