perolsen.net

Det præteknologiske gennembrud

Det præteknologiske gennembrud (Portal)  

Kapitel 4 Eksisterende teknokultur i 1996

4.6. Komputerprogrammering

Programmering betyder i 1996 stadig; at man har tændt komputeren op i et programmeringssprog, som kan modtage kommandoer og derefter bringes til at udføre kommandoerne. En programmør anvender altså kommandoer til at skabe programmer med. Der findes en række forskellige programmeringssprog. Fælles for dem alle: de har en omformer som forandrer de sproglige kommandoer til maskinkode, som maskinen afvikler, når den kører programmet.

Der kan ligge flere lag fra et programmeringssprog, et "højniveauprogrammeringssprog" ned til den maskinkode som læses i datastrømmen, der bruser forbi maskinens centrale processorenhed.

Programmøren sidder altså som en gud bag programmets forskellige skærme og meddelelser, faktisk bag alt hvad der sker. Programmøren ligner en gud derved; at når han én gang for alle har skabt kommandoerne, i den kode sproget nu bruger, ja så vil programmet kunne kopieres og anvendes utallige gange til evig tid uden opslidning eller forfald. Et komputerprogram skrevet i et pseudosprog altså en komputerkode, vil principielt kunne bestå så længe den datamatiske repræsentationsform, som koden skrives med, kan læses af en datamat. Programkoden giver altså - bag scenen, usynligt, men altregistrerende og altudførende - maskinerne den overflade af liv, som vi kalder "soft-ware" gennem hele det teknologiske gennembruds periode.

Ordene "soft- & hard-ware", samt "in- & out-put", "data" og "digital" har vist sig relativt bestandige. De står som de centrale ord for fænomenet komputerprogrammering under hele det præteknologiske gennembrud fra 1976-1996 (jævnfør Indledningen (0.1) og (0.6)).

Det første princip for al programmering: ved at anbringe en række kommandoer i rækkefølge kan man få maskinen til at gøre en bestemt række handlinger. Dette princip, algoritmena, anvendes i alle former for komputersprog, også i nogen grad i de komputersprog som beskæftiger sig med programmering i logik.

Fra starten af det præteknologiske gennembrud, i det lille Danmark, syntes der ingen tvivl om; at man skulle satse på at uddanne mange erfarne programmører. Dette skete i nogen grad, om end de fleste hurtigt blev eksperter i de sprog styresystemerne fungerede med. Et sådan styresystem, DOS, (som beskrevet i fodnoten til Indledningen  (0.10)) danner et i forvejen kørende program, som modtager ordrer i en art programmeringssprog. DOS-operatørerne florerede fra midten af 1980'erne og godt frem til slutningen af perioden, hvor det dog så ud til at dette ord snart ville forsvinde, til fordel for de styresystemer, så som Windows og dets varianter, som endnu lagde sig oven på "skallen" af DOS, som dog så let ville kunne svinde helt væk. De fra 1990'erne velkendte menustyrede programflader, der baserede styringen af komputerens programmer, på at lade brugeren se billeder og pege klikkende på dem med musen de anførte Windows og Windows 95 samt Apple m'komputernes version af UNIX for eksempel.

Så en del af de, som skulle lære at programmere, endte med at operere styresystemer. Også databaser krævede arbejdskraft blandt de unge dataloger, databaser, som igen har deres specielle søge- og findesprog, heller ikke disse mange mennesker forblev egentligt programmerende. Faktisk fandtes programmørerne mest i soft-ware-firmaer, og som del af store systemer hvor man løbende havde brug for nye programmer, som del af et større fungerende programmel.

Her havde programmørerne kronede dage op igennem det præteknologiske gennembrud, der hvor de virkeligt store firmaer havde nogle helt konkrete behov og fandt det enten nødvendigt eller smartere at få udviklet systemer af deres egne folk i stedet for at købe dem færdige.

Soft-ware-programmeringsarbejde blev en virkelig guldgrube i løbet af det præteknologiske gennembrud. Midt i 1980'erne, mens Commodore-64 og de andre små maskiner fandt deres kæmpemarked blandt de unge, så det ud til; at piratkopiering ville gøre det urentabelt at leve som programmør.

Programmørerne fandt dog en løsning, og i 1990'erne køber man kæmpespil, og andre programpakker på cd-ROM til en relativt billig penge men i kæmpe oplag. Spilleindustrien (som behandlet p. omstående) forblev et solidt grundlag for værdsættelsen af programmørernes arbejde. Og share-ware-systemet a gav dem en mulighed for at holde maskinerne kørende og programmerne under afvikling.

Det første princip i dette programmeringsarbejde: altså at give kommandoer i en algoritme.

Det andet princip: at skabe muligheder med disse kommandoer. Helt primitivt drejer det sig om for eksempel "hvis - så"-mekanismen, der bruges i alle komputer sprog. Holdt helt enkelt: Hvis "ja" så tænd programmet, hvis "nej" så sluk.

I "The Improbable Machine" (ibid p. 61f) forklarer Jeremy Campbell denne smarte mekanisme, særligt hvad angår de ekspertsystemer, der af nogle - i anden halvdel af det præteknologiske gennembrud - opfattedes som forstadiet til "kunstig intelligens" (op. cit.):

"I grunden resonerer et ekspertsystem ved hjælp af et produktionssæt, eller "hvis-så"-regler, som anviser en handlemåde i en given situation: ... Den dobbelte tiltrækning ved at indkode en menneskelig ekspertviden i en maskine, er, først at det er let at indkode, hvad en menneskelig ekspert siger, at han ved om et givent område i form af sådanne regler, og, for det andet, at sådanne regler er særligt velegnede til at manipulere symboler, hvilket er hvad almindelig kunstig intelligens drejer sig om.".b

I dette tilfælde kan man måske ikke skabe generaliseringer og almene overblik, men forgreningen, ramifikationen, bifurkationen, c kært barn har mange navne: alternativet: "hvis-så", skaber programkode, som gør det muligt at lade programmet vente på et in-put fra brugeren, og så derefter følge sine regler, afhængigt af den art in-put det har modtaget. - Det andet princip for programmering, altså.

 Et problem for mange der programmerede op i gennem det præteknologiske gennembrud: hvis man arbejdede professionelt med det, så udviklede man anden mands kode. De få heldige arbejdede med videnskabelig udvikling efter egen interesse, men udviklede altså også en fastlagt kode. De som udviklede de store spil kom under pres, på grund af den gode indtjening og en skærpet konkurrence for at hæve standarden, og de fik hjælp af multi-media systemerne - især CD-ROM - som med udløbet af 1980'erne og helt tydeligt i 1990'erne gjorde IBM-maskinerne og deres kloner, de seriøse, professionelle forretningsmaskiner, spilbare, i farver, stereo og så videre: forstadiet til 1996's multi-media-maskine (som beskrevet blandt andet i punkt 4.4).

- Alle disse programmeringsuddannede fik besørget deres programmering i en sådan forbindelse. Tilbage: millioner af unge, nørder, skolebørn, også ældre entusiaster, som frivilligt skrev kode for en række forskellige programafviklinger, og opbyggede den kæmpefond af gratis programmer - free-ware og nogen share-ware - der kan hentes ned fra Nettets FTP (File Transfer Protocol, filoverførselsprotokol, hvorved man kan hente programmer til sin egen maskine fra forskellige "fil-servere" (ganske ofte UNIX-maskiner), som altså kun leverer programmer).

Naturligvis vil de fleste nøjes med at anvende deres færdigkøbte programmer, men de mange mulige udbud findes altså, udgør en art pulje af kode, som med alt på Internettet: skidt og kanel.

Med "enten-eller","hvis-så" gives der ikke blot mulighed for at vælge mellem to, man kan udbygge sætningen: "enten - eller - eller også ..." altså: "hvis" 1 "så" A; "hvis" 2 "så" B og så videre. Hvis det ene: så gør sådan, hvis det andet, tredie, fjerde og så videre så sådan og sådan. Dette giver det tredie grundprincip i al programmering: fordelingssætningen, det knudepunkt hvor datastrømme bliver sendt den rette vej.

Når der her skrives om principielle grundsætninger, fastholdes der altså kun nogle første præmisser ikke gyldne nøgler til programmeringssprogenes væsen. Væsentligt dog altså om komputerprogrammeringssprog, de: 

  1. giver kommando-ord i algoritmeform

  2. giver muligheder og deraf følgende konsekvenser

  3. fordeler og ekspederer de valgte muligheders konsekvenser

- Man kunne i en næppe helt slet parallel skrive om:

  1. put-sfæren

  2. in-put-sfæren

  3. out-put-sfæren

Fra starten af det præteknologiske gennembrud stod de gamle oprindelige kodedialekter altså komputersprog ret stærkt. For eksempel ALGOL og FORTRAN. Nogle sprog udviklede til specielle brancher opnåede en solid overlevelse, andre gik op og ned.[i]

 For eksempel BASIC kan siges at have "gået op og ned": oprindeligt et populært "programmeringsmiljø" (som det ofte hed i perioden), der anvendes på blandt andet de tidlige Commodore-, ZX Spectrum- og BBC-maskiner, og derfor blev lært af mange unge. Man talte i programmeringsmiljøerne om skader på grund af dette sprogs natur:

BASIC indeholder kommandolinier, og man skriver altså de forskellige kommandoer i hver sin nummererede linie. Mens man sådan sidder og skriver kode, kan det let falde, at man får en fin idé, som man indbygger i sin kode: hvis programbrugeren gør sådan, skal maskinen ikke bare gøre sådan men også sådan. Så havde man nu det problem i sit kodearbejde med de tidlige basic-dialekter, at alle linierne jo havde et nummer, og man skulle altså så skrive alle numrene om.

En anden ting som understøttede dette problem i BASIC-programmeringen: det smarte ved sproget: det havde nogle fordelingskommandoer som gjorde det meget elastisk. Hvis brugeren gør sådan, så hop til den linie, hvor der står den ordre. - Hop, som i BASIC kommandosproget bruges med ordrer af karakteren: gå til, "GO TO" den og den linie. - Nå. - Når man nu - på grund af sit kreative indfald - skulle lave alle linienumrene om, skulle man altså også samtidigt holde rede på alle de linier, hvor man havde skrevet "GO TO" en eller anden linies nummer.

Fænomenet kaldtes: "spagettiprogrammering" fordi man fik disse lange indviklede tråde. Forskerne diskuterede sagligt i 1980'erne, om hvorvidt børn mon fik hjerneskader af deres timelange programmeringsdiller foran skærmen med BASIC (en af grundene til lanceringen af Comal-80 som beskrevet i Indledningen (0.10)).

 Forskellige dialekter af BASIC søgte at afhjælpe problemet, men en ny type sprog vandt bredt frem for alvor fra midt-1980'erne, samtidigt med at masserne lærte BASIC på de små konsumentmaskiner. Ideen i de nye sprog: at ordne problemet med linierne og deres henvisninger på den måde: at man skrev forskellige "procedurer" som man så kaldte på med et navn (: procedurekald) ikke med at gå til et linienummer. Altså i stedet for - som i BASIC - hvis brugeren tastede "Ja" at springe ned til det linienummer hvor kommandoen, som starter programmet står skrevet, så at kalde på den "procedure" som hedder "start programmet".

Spagettidagene syntes ovre, i stedet lavede man nu kødboller. I de to populære procedureorienterede komputersprog op gennem 1980'erne og langt ind i 1990'erne: PASCAL og C (i forskellige dialekter) udgør procedurerne en række klumper i programkoden, som kan kendes ved deres navn. Selve programmet står - i for eksempel PASCAL - skrevet i bunden af hele denne tekst, og der skrives ofte ikke andet i dette program end: gå til den procedure som hedder "begynd" (BEGIN). Herfra kalder de forskellige procedurer internt på hinanden via deres navne, så der findes altså stadig lange tråde mellem kødbollerne af den gamle spagetti, og nyere versioner af BASIC bruges da også ganske udbredt i midt-1990'erne (mere om komputersprog i slutnoten nedenfor).

Der findes to centrale problemfelter i udviklingen af programmeringsfærdighederne og komputermiljøet set alment og socialt:

  1. Problemet med hvad der skal programmeres, og at programmet allerede findes, derfor begynder man som uddannet, trænet programskriver at blive programbruger, gerne af et program som har en del kommandoord, og derfor lidt ligner et komputersprog.

  2. Udvikling hen imod appliceringsværktøjer: ikonstyrede og brugerstyrede programmer som skaber intuitiv programmering af mange kontorprogrammer. OOPS og OLE. Altså de første ansatser til selvprogrammering, samtidigt med at 4. generations komputeren ikke synes til at flytte væk for at give plads til den næste generation mere herom nedenfor:

[TOP]


     a algoritmen: efter persisk-arabisk matematiker al-Khuwârizmi i 9. århundrede før almindelig tidsregning. Algortime heraf: læren om effektive regneprocedurer. Algoritmen som komputerbegreb altså: en trinvis fremgangsmåde som sikrer et helt specifikt resultat og løser helt specifikke problemer. En forud fastsat fremgangsmetode til at løse problemer med et fastlagt antal trin. At opfinde anvendelige algoritmer, at bevise deres korrekthed og at udforme dem i et gældende komputersprog udgør essensen af al programmering (se også fodnoten kapitel 3 (III.10)).

     a share-ware-systemet: efter engelsk share: dele, heraf share-ware: at mange programmer blev distribueret til deling. Share-ware-systemet altså: at kunderne prøvede pågældende program, og selv sørgede for at betale et mindre symbolsk beløb til programmøren, som havde indsat sin adresse og så yderligere eventuelt opdaterede programmet. Den helt gratis formidling af programmer kaldtes free-ware altså gratis soft-ware.

     b Essentially, an expert system reasons by means of a set of production, or "if-then" rules, which prescribe a course of action in a given situation: ... The double attraction of if-then rules for encoding the knowledge of a human expert in a machine is, first, that it is easy to encode what a human expert says he knows about a given domain in the form of such rules, and, second, that such rules are particularly well suited for manipulating symbols, which is what mainstream artificial intelligence is all about.

     c Forgreningen, ramifikationen, bifurkationen: forgrening altså: det princip at et "enten eller" eller et "hvis så" giver to muligheder, hvorved én gren deler sig i to. Ramifikation efter latin ramus facere: gren gøre, altså igen forgrening. Bifurkation: efter latin bi furca: to gaffel. Heraf bifurkation: deling i to grene, også et matematisk navn for en fraktal ligning, som udvikler to mulige sæt løsninger.

[TOP]


 

[i]. En alfabetisk resumarisk og edukativ altså pædagogisk oplysende og diskuterende præsentation af de gængse komputersprog under det præteknologiske gennembrud fra 1976-1996. Bemærk at de fleste af disse sprog blev udviklet, længe inden startskudet lød for den almene datamatisering af samfundet:

 

ADA: efter Augusta Ada Byron, grevinden af LoveLace, som (i 1842) oversatte den tidlige engelske teoretiske komputerforsker Charles Babbage (1791-1871) til fransk og i sine noter skabte en art programmeringskode. Hun regnes som den første algoritmiske programmør (se for eksempel Hodges p. 297ff). ADA, udviklet af det amerikanske forsvarsministerium i slutningen af 1970'erne, minder meget om Pascal, men mere omfattende og specielt fremstillet med henblik på produktivitet og let vedligeholdelse. Anvendes især i "indlejrede" systemer (engelsk: imbedded) det vil sige filer - for eksempel en tekstfil - som i starten har nogle kommandoer, der får et stykke hard-ware til at fungere ad exemplum: en printer.

ALGOL: ALGOritmic Language (: Algoritmisk sprog). Udviklet i 1958, og senere flyttet over til mindre systemer med dialekterne ALGOL-60 og ALGOL-68 (1960 og 1968). Regnes i dag for et dødt sprog, men stod som inspirationen til Pascal.

APL: A Programming Language (: et programmeringssprog). Skabt i 1962. Et præcist sprog som fordeler store talopstillinger: et talknusersprog. I 1966 med en ny dialekt APL/360 til IBM tredie generationskomputere (se herom senere i teksten). Efter 1983 i PC-format som APL2. Sproget kræver dog et specialtastatur eller en udvidet brug af makroer, altså: kalderutiner som udfører flere tastetryk i én operation. Opfundet af Kenneth E. Iverson.

ASSEMBLER: (Samler). Maskinkodesprog på det laveste niveau. Dernede hvor "pseudo-ordene" (kommandoerne) og deres fordelingssætninger har antaget digital skikkelse. Uendeligt besværligt og kedeligt for mennesker, hvorfor de fleste "højniveausprog" selv "oversætter" deres kode til assembler (ikke helt at forveksle med den nanoteknologiske assembler beskrevet (III.XXX)).

 

BASIC: Beginner's All-purpose Symbolic Instruction Code (: Begynderens symbolske instruktionskode til alle formål). Et stærkt udbredt linieopbygget sprog som i dag findes med både kompiler og assembler-funktioner, men som oprindeligt kun brugte en fortolker, der altså ikke undersøgte hele programmet inden det kørte (som kompileren gør), men på vejen under programafviklingen tog stilling til koden (som altså en fortolker gør). Om end sproget skabtes til begyndere indeholder det stadig flere avancerede funktioner. Udviklet i midt-1960'erne af John Kemeny og Thomas Kurtz ved Dartmouth universitet i New Hampshire.

C: (og dialekter så som C+ og C++). Struktureret, modul- altså procedureopbygget sprog. Kan køre på alle typer maskiner, og gør programmøren i stand til at gå helt ned i lavniveauet og skrive ret præcis kode, som fungerer utroligt hurtigt. Står også som et mellemniveau-sprog. Et favoritsprog for programmørerne i 1990'erne, dels på grund af den meget fine mulighed for kontrol på de lavere niveauer, dels en helt fri definition af tal, dels på grund af sprogets uafhængighed af forskellige maskiner. Udviklet af Dennis M. Ritchie i UNIX-miljøet. Al UNIX-soft-ware skrives i C.  Og C i mange varianter blev et dominerende programmeringssprog længe efter det præteknologiske gennembuds tid.

COBOL: COmmon Business Oriented Language (: Almindeligt forretningsorienteret sprog). Også et gammelt veltjent sprog som stadig anvendes i høj grad. Det tillader store mængder data, og store mængder løbende out- og in-put, som det behandler ret hurtigt og præcist. Sproget anvendes over alt i forretningsverdenens store main-frame systemer, men spredte sig i begyndelsen af 1980'erne også til PC-platformen og de mange hjemmekomputere. Et højniveausprog som anvender en kompiler der undersøger og samler programmet og sender det til en assembler som oversætter det til maskinkode.

FORTH/PC-FORTH: (: fremad). Udviklet til IBMs microkomputere udfra main-frame sproget FORTH-83. Mere end blot programmering: et operativsystem, editor (der hvor man skriver sin kode, inden den bliver til et færdigt program), assembler, kompiler, fortolker, et højniveausprog og mange udviklingsværktøjer. Skabt af Charles H. Moore i 1960'erne, og meget anvendt af IBM i senere versioner.

FORTRAN: FORmula TRANSlator (: Formeloversætter). Et matematisk, videnskabeligt programmeringssprog, bestående af rutiner til at håndtere formler og matematiske udtryk. Komputeralgebra: talregning med bogstaver og formler. Alle typer videnskabelig og teknisk anvendelse. Blandt de aller ældste komputerprogrammeringssprog som stadig anvendes, blandt andet fordi der eksisterer en hel række underrutiner, som kan indføres i ny programkode uden besværligt genformuleringsarbejde. FORTRAN fungerer som et højniveausprog, med en kompiler der så samler hele programmet og sender det til assembleren, som omformer det til maskinkode inden det køres.

 

HTML: (Hyber Text Markup Language) Standardsprog til at skrive og udgive hjemmesider til Internettet. Blev tidligt integreret i forskellige programmer til at skrive hjemmesider for eksempel Microsofts "Frontpage".

 

JAVA - JAVASCRIPT: To forskellige sprog med interne overensstemmelser. Script-versionen blev udviklet i 1995 specielt med henblik på Internettet og blev over årene de facto altså den faktiske standard for programmering til Nettets forskellige funktioner.

LISP: LISt Processing (: Listeprocessering). Højniveausprog som kører data samlet i lister. I stedet for tal manipulerer sproget med sproglige størrelser formuleret med symbolsk logik. Anvendes til især tekster og grammatisk analyse. Skabt i de tidlige 1960'ere af John McCarthy. Der findes flere dialekter.

OOPS: Object-Oriented Programming System (: Objektorienteret programmeringssystem), også kaldt blandt andet for blot "OO" (altså: Objekt Orienteret). Programmeringen foregår ved at forskellige i forvejen skrevne moduler, objekter, kædes sammen (linkes). Modulerne fungerer let sammen, så programmeringsarbejdet når på denne måde op over at skrive enkeltkommandoer helt fra bunden. Modulernes anvendelighed strækker sig fra beregning og præsentation til styring af hard-ware og samarbejde med allerede fungerende programmer. Et næste skridt på vejen mod "selvprogrammering" med forskellige vedhæng og bruges meget i C++.

PASCAL: Opkaldte efter den franske matematiker Blaise Pascal (1623-1662). Et højniveausprog, struktureret og opbygget med procedurer og procedurekald. Der findes mange dialekter med såvel kompilere og fortolkere, der arbejder for assemblere, som igen skriver programmet om til maskinkode. De nyere versioner har også omfattende muligheder for grafiske og lignende funktioner i programmeringen. Udviklet af Nicolaus Wirth i begyndelsen af 1970'erne, han skabte senere en ny dialekt/ et nyt sprog: MODULA, som ikke slog så bredt an, selv om nogle da bruger det. Ligesom BASIC udgør Pascal et kraftfuldt begyndersprog, der kan en mængde avancerede ting og altså har fundet udbredt almen anvendelse. Betragtesaf mange som et solidt forstadie til C.

PROLOG: PROgramming in LOGic (: programmering i logik). Højniveausprog. Anvendes mest inden for kunstig intelligens og til problemløsningsmodeller, hvor der findes mere end én rigtig løsning. Også PROLOG anvender (ligesom LISP) viden og tekst ikke tal. Og i hver programlinie kan der findes ikke blot kommandoer men også de data ,som kommandoerne angår. I senere dialekter overført til PC-platformen, som PC-PROLOG. Udviklet af Alain Colmerauer i Marseilles 1973.

REXX: struktureret, proceduralt sprog som overvejende anvendes til styresystemer, batch- og executive-filer og andre grundliggende systemfiler, som komputere anvender, når de starter og når deres grundfunktioner iværksættes. Udviklet for IBM i England af M. F. Cowlishaw i 1979. Anvendes stadig noget af IBM i forskellige dialekter.

 

SQL: Standard sprog for søgning i databaser. Et gammelt og stadig vidt udbredt specailsprog.

[TOP]

Det kan som en hale på denne liste anføres, at - som det også fremgår - C++ blev et dominerende sprog - og at andre nyere programmeringssystemer - for eksempel Phyton - i nogen grad måtte forholde sig til og spille sammen med C++. En anden faktor, som blev vigtige med 2020erne, bestod i, at de i dén tid nye systemer med Kunstig Intelligens i høj grad kunne både skrive, rette og forbedre kode; så begrebet "selvprogrammering" blev i den forbindelse vigtigt. Mere herom senere i teksten.

Hvad angår programmer til at skrive og udsende hjemmesider blev de første HTML-skaller - blandt andre Frontpage og Dreamweaver hurtigt erstattet af gratis eller næsten gratis alternativer.