georg strøm bloghoved

Hvad vil det egentlig sige at lære programmering?

For tredive år siden var det lettere. Da kunne udviklere og skoleelever bruge stort set de samme værktøjer, og det var muligt gradvist at vokse fra at lave simple opgaver til at skrive applikationer som faktisk kunne anvendes.

Sådan er det ikke længere. Der er i dag en række forskellige aktiviteter som alle bliver betegnet som programmering eller at lære at gøre det. Derfor er det meningsløst, når Lars Grarup i Politiken 14.5 foreslår at alle skoleelever skal lære at programmere. Det er nødvendigt at diskutere, hvad de skal lære.

Jeg oplever at unge betragter programmering som en af de mest prestigefyldte færdigheder i arbejdet med en computer. Derfor er det vigtigt at gøre det klart for dem, hvad de rent faktisk lærer, og hvad de ikke lærer indenfor programmering.

Her er nogle eksempler, jeg er stødt på i min undervisning og andre steder.

Codecademy er et online tutorial hvor eleven skal rette i nogle korte kodestumper, svarende til de kurser hvor eleverne skriver et program af som læreren har vist, og derefter se det fungerer. Eleverne får en følelse af at kunne programmere, men lærer ikke den afgørende færdighed – at kunne gå fra bare et simpelt problem til at skrive en kode som løser det.

Vi kan tale om programmering af en webside med html eller programmering i Flash, selv om eleven ikke ser en eneste linje kode. Her kan eleverne lave noget som er visuelt flot, men selvom de ikke ser en eneste stump af et program.

Nu kan jeg nævne spillet Sims, selvom jeg ikke har brugt det i min undervisning. Det kaldes også programmering, når en tiårig sætter nogle parametre, så der går ild i det virtuelle komfur i det virtuelle køkken, men det giver kun en ret begrænset forståelse af hvordan en computer fungerer.

Lego Mindstorm gør at eleverne kan bygge en robot og sætte softwaremoduler sammen til et program som styrer den. Eleven kan hurtigt selv blive problemløser og forstå hvordan løkker og andre funktioner anvendes i et program. På den måde er det et godt bud på at lære eleverne principperne i programmering.

Eleverne slipper for at skulle lære en del af syntaksen til et tekstbaseret sprog udenad – det er ellers nødvendigt for at skrive et program - til gengæld er det min erfaring at Mindstorm ikke giver et realistisk indtryk af hvor let eller svært det vil være for den enkelte elev at programmere i et tekstbaseret sprog.

Programmering af algoritmer i et tekstbaseret sprog – mine elever brugte Python. I forhold til Mindstorm stiller det langt større krav til udenadslære og opmærksomhed på detaljer. Det giver et langt bedre indtryk af, hvad programmering er for noget – når eleverne vel at mærke selv skal finde ud af hvordan de kan eller vil løse en given opgave – men det er sikkert at en del elever vil falde fra. Og selv i bedste fald, vil det næppe give dem en bedre forståelse af hvordan en computer fungerer, end hvis de bruger Lego Mindstorm.

Objektorienteret programmering med et professionelt udviklingsværktøj hæver stangen endnu en gang. Både fordi der er tale om endnu et niveau af kompleksitet i selve koden, og fordi det er nødvendigt at lære at bruge et bibliotek og udviklingsmiljø. Desværre er det nok også det niveau som eleverne skal nå, hvis de skal forstå og kunne skrive nogle af de programmer med grafiske grænseflader som de ellers er omgivet af.

Eller: Hvor mange IT relevante færdigheder kan elever lære ved at samle Ikeamøbler i stedet for at programmere?

Lars Grarups artikel: http://politiken.dk/debat/profiler/larsgrarup/ECE1969233/danske-skoleele...

Kommentarer (17)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Frederik Vibe

Jeg er 22 år, og besluttede mig for et par år siden at lære at programmere. Jeg ville lave apps til iOS og dyrket kulturen siden den startet i 2008 da det blev muligt. Men jeg så at der skulle læres mange 'sprog' før jeg kunne skrive objektorientet objective-c for at kunne yde de kompetencer. Jeg skulle lære C, måske lidt javascript for at forstå noget modernet struktur, Cocoa frameworket der driver iOS og derefter Objective-c syntaksen. Det har taget to år da jeg har fuldtidsarbejde hvor jeg også arbejder med apps, men syntes det er interessant hvad den bedste fremgangsmetode er?

Jeg har fået stor hjælp herfra. http://teamtreehouse.com
her går det ud på at skrive kode, rette i kode, og svare på koderelateret spørgsmål i relation til video undervisning.

Men spændende indlæg :)

  • 1
  • 0
Torben Mogensen Blogger

Siden brug ag Logo og skildpaddegrafik i 1970'erne til Scratch og lignende i dag har man brugt animeret grafik, når børn skulle lære programmering. Men fokus bliver efter min mening flyttet fra processen over til slutproduktet. Jeg forstår, at der kan være en vis motiverende faktor i at skabe noget sjovt eller brugbart, men man skal ikke undervurdere motivationen i at løse et ikke-trivielt abstrakt problem. Ellers ville Sudoku aldrig have fået den udbredelse blandt børn og unge, som det havde for nogle år siden.

Så min forslag til programmeringsundervisning for børn er:

  • Giv børnene abstrakte problemer, hvor det er nemt at se, om ens svar er rigtigt. Ligesom Sudoku, hvor det er ret nemt (omend en smule tidskrævende) at se, om en løsning er rigtig.

  • Vælg et programmeringssprog med meget få forskellige elementer/konstruktioner. Om formen er tekstuel eller "visuel" (som om tekst ikke er det) betyder mindre, men det skal være muligt at kunne se alle detaljer i selv mellemstore (for børn) programmer på en enkelt skærm uden at skulle bladre, zoome eller scrolle.

  • Eventuelle biblioteksfunktioner eller lignende skal være gennemskuelige i den forstand, at effekten af deres brug skal være umiddelbart forståelig og uden at bruge for mange begreber i en enkelt funktion.

Groft sagt skal tilføjelse/ændring af hver enkelt element til et program have en lokalt forståelig og letgennemskuelig effekt. Ellers vil eleverne opgive at forstå, hvad der sker, og blot blindt kopiere lærernes kode eller prøve tilfældige ændringer i håb om, at det hjælper.

  • 0
  • 0
Kai Birger Nielsen

Jeg har nogle gange haft en 9. klasses skoleelev i praktik en uges tid og en udmærket introduktion til programmering for nogle af dem har været at sidde og pille i en VRML fil ved navn coaster.wrl, som definerer en rutchebane, nogle vogne og en tur i den på under 25 Kb. Der er ikke så meget nøgleordsrytteri i det og 3D-koordinatsystemet er tilpas kringlet til at man lige skal tænke inden man ændrer noget.

Ikke at nogen lærer at programmere på den måde, men alligevel :-)

Men jeg har ikke noget svar på Georg Strøms gode spørgsmål.

  • 2
  • 0
Hans Henrik Jakobsen

Hvor mange år går før et hvert program er lavet som en Lego Mindstorm robot?

I dag forsvinder programmering til Asien i en lind strøm hvor vores håndværk for lang tid siden er forsvundet hen.

Det vil være spild af tid at lære vores børn det håndværk, når de bliver voksne vil de aldrig komme til at få et arbejde som programmør.

Jeg tror det vil være meget mere givende for børn at lære at bruge moduler som kan tilpasses til de behov og krav som er stillet.

Som programmør bruger jeg i dag næste ikke egen kode ud over det der skal til at binde de moduler som jeg har købt og hvor længe går der inden jeg overhovedet bruger kode til at binde det sammen?

Så skal børn lære at programmere? Og hvad skal de bruge det til?
Mit svar er: Nej, for de får aldrig brug for det.

  • 0
  • 4
Jakob Dalsgaard

Mjoooo....

Det har nu aldrig skadet at kunne programmere selv, når man skal vurdere kvaliteten af de moduler man ligger og roder rundt med, eller rette fejl i dem for eksempel.

Selv har jeg da haft stor glæde af min barndoms 8086 assembler programmering (havde en temmelig cool fysiklærer der ikke havde et problem med differentieret undervisning) -- ikke at jeg programmerer i assembler den dag i dag, men den grundlæggende forståelse af registre, stacks, hukommelse m.m. giver et godt udgangspunkt for at forstå hvad boksen på skrivebordet rent faktisk laver.

Se i øvrigt Peter Tofts udemærkede indlæg om debugging her på sitet.

Går bestemt ind for at børn skal lære at programmere -- min egen 10-årige søn har stor glæde af at tænde og slukke dioder og motorer med sin Arduino (koster markant mindre end Mindstorms); små simple programmer som vi stille og roligt kan bygge videre på. Der går selvfølgelig noget tid med kedelig syntax... men man behøver jo heller ikke lære alt om C for at gå i gang.

Man kunne jo starte med at lære dem at der findes noget så eksotisk som en "text editor", Foldoc:text editor, så er vi allerede nået et stykke af vejen :-)

  • 4
  • 0
Peder Møller

Kun de der programmere REXX, bør kalder sig programmøre ;)

REXX, er det naturlige første valg af programmeringssprog, hvis ikke REXX vækker interesse for yderligere, så er det ikke programmør man skal være.

Hvis interessen så viser sig, så vil REXX være et naturligt værktøj i hvad man ellers vil støde på i programmørens verden.

Hvis interessen ikke viser sig, så find en anden beskæftigelse ;)
(Hvilket naturligvis godt kan relatere sig til IT, bare ikke programmør.)

Har man mod på at gå videre, så vælg JavaScript som det næste.
Magter man de to sprog, besidder man naturlige kompetencer for hvad der herfra følger, hvilket nok bliver bestemt af uddannelse/ansættelse.

  • 0
  • 4
Ditlev Petersen

at laver man et TILVALGSfag som programmering, hvor folk alligevel ikke lærer noget og ikke får prøvet evner og interesser af, så fungerer det samtidig som FRAVALG af andre fag, de måske kunne have mere gavn/fornøjelse af.

Jeg spekulerer også lidt på, hvorfra man får alle de lærere, der skal være hajer ud i det, de nu skal undervise i OG beherske didaktik for børn? Ellers vil de skrappe elever løbe fra lærerne og resten vil blive tabt. Det var vist lidt der, det gik galt i begyndelsen af 80'erne, da parolen også var programmering i skolen. Den eneste forskel er, at dengang skulle alle lære at programmere for at beherske Verden. Nu skal de programmere for at tjene arbejdsgiveren.

Måske skulle man lave det som aftenskoletilbud? Så blev det ikke fravalg, man fik fat i de nysgerrige og måske kunne man også få fat i nogle, der vidste noget om emnet. Didaktikken måtte de så lære på anden vis først.

Men hvad gør man så med "de fjernere egne af landet", hvor der er få it-virksomheder? Godt spørgsmål. Uanset hvad.

  • 0
  • 0
Niels Langager Ellegaard

Supergodt indlæg. Det er godt at høre konkrete erfaringer. Her er et par spredte ideer.

  • På mange måder ville det optimale ville være et kursus i personlig problemløsning med computere. Hvordan installerer jeg et program. Hvordan sikrer jeg mig mod virus. Skal jeg svare på alle mine spam mails. Problemet er at det er ret svært at undervise i personlig problemløsning. Hvis jeg sætter alle mine elever til at installere et program, så er det overvejende sandsynligt at timen ender i kaos. Det er fint at have kaos en gang imellem, men det skal ikke ske hele tiden. Jeg er bange for at skolen ikke er gearet til at løse denne opgave.
  • Man kunne også lave en teoretisk gennemgang af hvordan computere og internettet fungerer. Det bliver sikkert kedeligt for eleverne at sidde og kigge på at læreren skriver det hele op på tavlen, så jeg gætter på at mange lærere vil væge at lave gruppearbejde, hvor eleverne kigger på nettet (Wikipedia) og laver en planche eller et power point foredrag. Måske kan de blive bedre demokratiske medborgere af at lave en planche om internettets opbygning eller hvad der gik galt i Amanda-projektet. Jeg ved det ikke.
  • Man kan fokusere undervisningen på at lære eleverne at bruge nogen web-værktøjer. Eksempelvis har jeg kolleger der sætter eleverne til at lave undervisningsvideoer til youtube eller skrive en blog eller lave en avis der er en hjemmeside. Det er en fin ide, for eleverne lærer noget om kommunikation på nettet og de synes at det er sjovt, men til gengæld får ikke afmystificeretet hvordan en computer egentig virker.
  • Man kan sætte eleverne til at lege i et lukket miljø som logo, scratch, mindstorms eller måske python. Det skal ikke være for indviklet, for så taber man de svageste. Her kan de lære om variable og for-løkker. Jeg er lidt bekymret over om eleverne ender med at stole på at de har fået en viden som de kan bruge på et tidspunkt når de ikke har de har adgang til det program de brugte i undervisningen, men det er måske ikke så slemt

Min personlige favorit er at de skal prøve oplevelsen af at skrive et program, så afhængigt af niveauet jeg vil foretrække traditionel programmeringsundervisning i scratch eller python. Jeg vi gerne tro på at objektorienteret programmering for svært til et introducerende programmeringsforløb i gymnasiet.

  • 3
  • 0
Palle Simonsen

Kun de der programmere REXX, bør kalder sig programmøre

Er det flamebait eller alvorlig ment?

Har kun prøvet REXX for OS/2 mange, mange år siden. Min eneste anke den gang var den ALGOL lignende syntax, mens dynamisk typing og andre arbejdsbesperende tiltag, altid er et hit. Hvorfor skal man slide sine fingre til blods med at skrive fyld ord som 'then', 'end' etc., hvis man kan nøjes med '{', '}' eller ';' ? :)

On topic: Programmering har meget med abstrakt tænkning, algoritme forståelse og computational thinking at gøre. Særlig det abstrakte aspekt vil nok gøre, at elevernes forskelle i mental modenhed vil kunne spille dem og læreren et puds. Man bør kunne vække begejstringen ved programmering med en kombination af scratch+robotter (Mindstorms) eller f.eks. scratch + mobiler og der også indlære de basale abstraktioner såsom funktioner/procedurer etc. Derefter kan man tage fat på mere voksne sprog som f.eks. REXX, Python etc. Egentlige frameworks ala J2EE, kan man tids nok blive udsat for, hvis man vælger programmering som levevej.

Efter at have reviewet diverse forsøg på professionel programmering er jeg kommet til den konklusion, at ikke alle kan lære programmering til at punkt, hvor de bør forsøge at leve af det. Ligesom med musik. Man kan lære teknikken, men ikke musikaliteten.

  • 2
  • 0
John Andresen

At modtage undervisning i at programmere, kræver at man modtager en viden om grundlæggende struktur, der kan bruges i alle sammenhæng.
Uanset sprog eller framework er alt grundlæggende omkring programmering kogt ned til 3 elementer.
sequentiel
selection
iteration
Alt andet - funktioner og procedurer - er et produkt af disse elementer.
Elever kan lære at tegne programmets kode elementer - for eksempel 'Nassi–Shneiderman diagram' for herved at
forstå sammenhænget og tegnet korrekt vil det give struktureret program forståelse.
At så samme 'notations form' kan benyttes til at bringe systematik i komplexe programmer, hvor hvert element kan dække over store blokke af kode er kun en fordel.

  • 0
  • 0
magnus jensen

Det at lære at programmer "rigtigt", medfølger ofte at man også lære en computer bedre ... Så de skal bare igang!
I en alder af 17 år kan jeg HTML, css, js, php(+sql), samt java til androide og object-c til iOS... Der er jo næsten ikke det problem jeg ikke kan løse selv?(næsten) så ja.. De burde lære det

  • 0
  • 3
Claus Jensen

Det vigtigste for at øge viden hos de kommende generationer må være, at de lærer hvad en computer er og hvordan den fungerer. Helst på et lidt abstrakt niveau, for ellers er deres viden bare forældet 10 år senere.

Selve det at lære at programmere er en lille niche, som jeg ikke mener er en væsentlig del af det. Mit indtryk er, at de færreste i dag kan forklare, hvad et program er. Det skal nok være på plads inden man skal begynde at snakke om programmering. Og jeg mener, der er mange ting, der skal læres, før man egentlig forstår, hvad et program er for noget - så programmering kommer meget senere i forløbet.

Når man så skal lære at programmere, så tror jeg igen, det er væsentligt at holde det abstrakt. Ellers risikerer vi at fokusere for meget på de tekniske detaljer i et bestemt sprog eller en bestemt metode, som aldrig bliver relevant for de unge senere i livet. Det kan være ved at bruge nogle værktøjer, der fx grafisk viser flowet (som Mindstorms o.l.) eller det kan simpelthen være ved at bruge en form for pseudo-kode i ganske almindeligt sprog - at udmønte den pseudo-kode til noget, der kører i C#, Java eller noget andet er et håndværk, der så kan komme ovenpå senere...

  • 0
  • 0
Torben Mogensen Blogger

Uanset sprog eller framework er alt grundlæggende omkring programmering kogt ned til 3 elementer.
sequentiel,
selection,
iteration.
Alt andet - funktioner og procedurer - er et produkt af disse elementer.

Min væsentligste anke over den påstand er, at den fokuserer udelukkende på kontrolstrukturer, hvor datastrukturer er mindst lige så vigtige. Her er de grundlæggende konstruktionselementer både-og (par, records, osv.), enten-eller (unions, datatypes, m.v.), samlinger (lister, arrays, mængder osv.) og funktionelle værdier. Samlinger kan undværes, da de kan konstrueres fra både-og samt enten-eller med rekursion eller ved at bruge funktionelle værdier.

Dernæst er din samling af kontrolstrukturer specifikt imperative. Sekventialitet er ikke et nødvendigt kontrolbegreb i funktionelle eller logiske sprog, og at se funktioner som et produkt af de tidligere elementer er ikke oplagt. Man kan med lige så stor ret se iteration som et specialtilfælde af rekursion eller som fordeling af en operation over en samling (iteratorer, map, reduce, osv.), uden at der nødvendigvis er en rækkefølge. I en verden med et tocifret antal processorer selv i håndholdte enheder er en ren sekventiel model ikke passende, og parallelitet er ikke spor svært, hvis man ikke er opfostret med en beregningsmodel hvor sekventiel opdatering af en global tilstand er grundlaget.

Hvis du virkelig vil koge kontrol- og datastrukturer ned til et absolut minimum, så er funktionelle værdier og funktionskald (dvs. lambdakalkulen) nok.

  • 2
  • 0
Povl H. Pedersen

Den væsentligste del af programmering er problemløsningen. Hvis man ser hvordan mange mennesker "koder" i dag, så er det at stjæle kode og tilpasse det. Men man skal stadig vide hvordan man løser et problem.

Det væsentligste er at kunne splitte et problem op, og få det løst, så kan den trivielle del af programmeringen starte.

Jeg mener, at det at kunne lave en opskrift på hvordan man sorterer (Der er mange der har opfundet bubblesort), eller løser Towers of Hanoi, eller kryds-og-bolle er gode simple opgaver. Det er relativt simpel programmering, men det sætter lærlingen igennem en tankeprocess, som er det vigtigste.

Men ikke alle kan lære /lide programmering/udvikling. Der er mange der ikke bryder sig om opgaver de skal løse, og slet ikke når det er anderledes end det de har prøvet før. Ovenstående kan være med til at gøre de studerende klar over om de har en plads i IT, eller om de skal hjem og øve sig (Talenetshowets formulering af, at de skal løbe langt bort og finde en anden levevej).

Programmering og logisk tænkegang er ikke for alle.

  • 3
  • 0
Niels Langager Ellegaard

Min væsentligste anke over den påstand er, at den fokuserer udelukkende på kontrolstrukturer, hvor datastrukturer er mindst lige så vigtige.

Det er en god pointe. Samtidigt er jeg lidt i tvivl om hvad eleverne skal bruge deres viden til. Da jeg var på pædagogikumkursus i gymnasiefysik spurgte jeg en af underviserne hvad eleverne skulle kunne bruge et års undervisning i gymnasiefysik til. Så vidt jeg husker var svaret at eleverne skulle kunne læse en avis og/eller være journalister (meget frit efter hukommelsen).

Hvis vi stiller det samme krav til programmeringsundervisningen i folkeskolen og gymnasiet, så er det måske en god ide at at forsøge at afgrænse en minimal mængde af begreber der er nødtvendige for at skrive meningsfyldte programmer i et højniveausprog. På den måde får eleverne en oplevelse af hvad det vil sige at programmere uden at de bliver belastet med unødtvendigt mange begreber. Jeg har ikke undervist i IT i gymnasiet, men jeg vil gætte på at man får mere ud af at fokusere på problemløsning end på forskellen mellem lister, arrays og mængder.

  • 0
  • 0
Silas Ørting

Det vigtige spørgsmål må være hvorfor skal man lære at programmere?
Der vil sikkert også være brug for en masse forskellige slags programmører i fremtiden, både til at kode embedded systemer og websider. Men ligesom idag vil langt de flestes arbejde ikke primært være at programmere, tilgengæld tror jeg de fleste vil have behov for at arbejde med data, analysere det og præsentere det.

Værktøjer som Libreoffice Calc eller Excel er oplagte til at lære folk programmering så det er direkte anvendeligt. I udgangspunktet kan man klikke sig til det meste, men får man sat sig lidt ind i hvordan man kan udvælge og aggregere data går det langt hurtigere og nemmere. Det næste skridt er at udvide og automatisere med macroer, i begyndelsen ved at optage sine handlinger, siden hen tilpasse dem og til sidst skrive macroerne selv. Calc kan scriptes med flere sprog, bla python der bliver brugt en del i naturvidenskabelige kredse og javascript der dominerer nettet.

Der er også andre gode væktøjer end Excel og Calc, det centrale er at bruge værktøjer der er direkte anvendelige og samtidigt har indbygget mulighed for at lære mere avancerede koncepter lidt af gangen.

Det er muligvis ikke en god metode til at uddanne programmører, men forestil jer hvor fantastisk det ville være hvis størstedelen af gymnasieeleverne mestrede kunsten at udtrække data af et regneark, beregne relevant statistik og lave brugbare visualiseringer.

  • 1
  • 0
Log ind eller Opret konto for at kommentere