ETF engineer the future

GODE RÅD: Lær dit barn at kode

Fremtiden er digital og den er her nu! Børn i dag har næsen klistret til deres eller deres forældres iPads! Hverken børn eller voksne kan længere have mere end 20 sekunders ventetid, før der da lige kan tjekke Facebook, mail og nyheder!

Oh verden, af lave. Da jeg var barn, brugte jeg tiden på at løbe orienteringsløb, spille violin og at læse alle skolebibliotekets bøger. Det var såmænd udmærket, men hvis der var én ting, der kunne have været virkelig fedt, så var det, hvis jeg havde lært at kode.

I skolerne lærer vi tysk, historie og idræt, men at kode? Ahhh – det må være noget man evt. tager som datalogi C på gymnasiet, eller – gisp! – hvis man er en af dem, der vælger det tekniske gymnasium, HTX.

Hvorfor det? Efter at have ændret min LinkedIn-lokation til San Francisco får jeg 3 gange om ugen en lang liste af jobopslag, hvor Google, Dropbox, Groupon, IBM, Apple og Facebook søger software engineers, data scientists, data managers, programmers eller lignende. En omgang obligatorisk programmering i de videregående uddannelser kunne løse mangt et afsætningsproblem.

Man kan jo sagtens i sin barnefritid også forfølge andre interesser, men hvis man bare lige får det kombineret med at forstå logikken og grundtrinene i programmering, så tror jeg virkeligt, at man er bedre stillet i ens videre uddannelses- og jobforløb. Basic literacy, kan man kalde det.

Derfor giver det længe ventede næste blog-indlæg her tre sjove måder, hvorpå børn kan lære at kode. Når de nu alligevel spiller computer, hvorfor så ikke spille et programmeringsspil i forklædning?

Code combat: riddere, sværdkampe og self.moveXY

Codecombat er ret sjovt og man glemmer fuldstændigt, at det ikke bare er et normalt computerspil, når man avancerer i levels og kæmper sig igennem rækker af fjender. Jeg fik dette anbefalet af en af mine bofæller og det er sandsynligvis den sjoveste måde at lære at programmere på, overhovedet.

I løbet af banerne finder man forskellige ting, der låser op for nye kald, f.eks. et par briller, der giver det muligt at kaste en self.findNearestEnemy. Måske er det lige lidt for ridder-slåskamp til mig, men der er helt sikkert mangt en ung pige og dreng, der vil synes, det er skægt.

Illustration: Privatfoto

Codecademy: Den klassiske one-step-at-the-time

Codecademy minder vel lidt om en almindelig indledende programmeringstime, udover at det er interaktivt. Kurserne er meget learning-by-doing (i stedet for learning-by-watching-90-minutes-lectures). Man får små opgaver, der hele tiden bygger lidt ovenpå de forrige, og man kan tage det i det tempo man vil.

Særlig godt til at lære et nyt sprog eller hvis man bare godt kan lide grundighed og sikker progression.

Khan Academy: Viden om alting

Man kan vel bedst beskrive Khan Academy som dit klasseværelse på nettet. Khan Academy indeholder blandt andet en art videobårne MOOCs (Massive Open Online Courses) og Salman Khan var en af forgængerne på området. Han underviste hans fætre og kusiner i forskellige fag over internettet og fandt ud af, at det var virkelig effektivt og sjovt for elevene, hvis han optog film, hvor han forklarer begreberne, og så krydrede videoerne med små opgaver og quizzer der skal løses undervejs.

Deres programmeringsdel fungerer lidt som Codecademy, men er i lidt højere grad rettet mod børn. Her kan man i øvrigt også lære en masse andre spændende ting, f.eks. kunsthistorie, anatomi og makroøkonomi.

God kodning og lad nu ungerne (og dig selv) spille videre med god samvittighed!

Ps. Jeg havde godt nok aldrig forestillet mig, at jeg på et tidspunkt kom til at anmelde computerspil… Lad mig vide, hvis du har erfaringer.

sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først

Børn i dag har næsen klistret til deres eller deres forældres iPads!

Mine bruger Android tablets. Hvorfor promoverer du et bestemt mærke?

  • 5
  • 21

IPatter, IPotter. What goes in..., Androider eller Windozer, who cares ?

Så længe den næste generation får noget ud af det.

  • 3
  • 0

Jeg havde selv stor glæde af LEGO dacta technic med interface (a9750) til først en Picoline lånt i weekender og senere en IBM 286. Det var Lego lavet til undervisningsbrug med input fra to sensorer og flere output til lys eller motorer.

Det var sjovt og jeg lavede mange forskellige ting som blev styret. Programmeringen var HVIS 0/1 og Gentag #, samt Gentag Indtil mv. Det gave en lidt skæv introduktion til programering på DTU da jeg kunne noget men egentlig ikke så meget.

Spørgsmålet nu, mener jeg, er hvilken måde forventer vi vores børn skal programmerer på, når de bliver store? For det er vel det vi skal lærer dem og ikke nødvendigvis hvordan vi gør det selv nu.

(jeg er krævet ved duplo klodserne nu!) :-) - beklager alle firmanavnen -

  • 1
  • 0

Jeg kan desværre ikke se hvordan jeg kan tippe bloggeren, men links i bloggen henviser alle til undersider på ing som ikke findes istedet for til de sider de burde.

Lidt sjovt i en blog om hvordan man lærer at kode ;)

  • 2
  • 0

Enig i at det vil gavne mange at lære at kode.

Det helt utrolige er at jeg for over 30 år siden i min folkeskole blev undervist i BASIC, godt nok som valgfag.

I dag kan min søn ikke engang lære HTML i folkeskolen. Pinligt for vores ansvarlig politiker, som viser sig at være utrolig uansvarlig.

En anden ting er at jeg mene at vores børn ej heller får mulighed for at lære basal teknologi forståelse. Dette kan være 1000 andre ting end bare at lære at kode.

F.eks. fik jeg i min skoletid mulighed for at lære at bygge en radio fra grunden selv.

Nu er min søn bare så heldig at jeg er en far som tager ansvar og selv gør noget ved det, men det er langt fra alle andre forælder som har denne mulighed.

Det mindste som vi kan gøre er at tilbyde de børn som er interesseret i teknik en mulighed for at vælge dette som valgfag i folkeskolen. At vi oplever børn som ingen tilbud har er meget for dårligt.

  • 5
  • 0

@ Martin Wolsing:

Det, jeg oponerer imod her og andre steder, er den omsiggribende synonymisering af "tablet" med et bestemt fabrikat.

Jeg vil meget gerne undskylde, at jeg kom til at nævne det her.

  • 6
  • 4

Både min ipad og min iphone er af mærket samsung. jeg har også haft en ipad der hed lenovo. jeg syntes ikke rigtig at jeg kan finde det mærke, android, du nævner nogen steder...

  • 1
  • 3

Tak for en dejlig blog der viser hvor "nemt" det er at komme igang.

I 90'erne var der nogle topledere i Danmark der var bekymret for at børn ikke kunne finde ud af hvordan ting virker mere, for alt var blevet "embedded" (dengang hed det ikke embedded endnu) - man kunne ikke åbne et vækkeur og se hvordan det virkede. Eneste trøst var da lego kom med deres mindstorm sæt i slut 90'erne, men det kostede jo også derefter og var/er trods alt beregnet til børn.

I dag har alle råd til både en raspberry pi og ardoino udviklingskit og det har aldrig været lettere at bygge små og store projekter. Vejledning skal man ikke engang læse sig til - man kan finde det meste på youtube og spille eller øve sig frem.

  • 0
  • 0

Jeg har tit tænkt på hvorfor ledige ikke oplæres til at programmere apps f.eks., evt som selvstudium. Det må være lidt ligesom at tage et truckcertifikat - Det kan aldrig skade, og det er da bedre end spaghettitårne og pipfuglekurser. Det kunne udgøre et grundlag for selvstændig indtjening.

  • 2
  • 0

Man lærer børn at læse, skrive og stave i skolen, ikke at skrive romaner. Man lærer dem de simple regningsarter og regler, ikke at udarbejde komplekse matematiske modeller.

Start med at introducere basal datalogi i skolen, så skal de som kan se sammenhængen til programmering nok selv komme videre til de anbefalede sider. Præcis som dem der kan se sammenhængen fra ord til romaner, og fra simpel regning til kompleks matematik, kommer det hvert år.

At ville undervise i programmering i skolen, springer et vigtigt led i læringen over, og vil på sigt medføre en endnu større mængde elendige programmører, end vi ser i dag. Forslaget er udtryk for en mangel på forståelse for opgaven.

  • 0
  • 0

Kære Andy,

Jeg indrømmer, jeg er nok den forkert person til at svar idet at jeg er nørd, med stort N.

Men jeg kan sige dig at der er meget langt fra ansi C til de 4 GL sprog (scratch og LEGO Mindstorms) kodning som man kan lære af idag. Jeg introduceret National Instruments LEGO Mindstorms kodning til min søn da han var 7 år.

Det er ikke svært at lære en SWITCH (if/else) eller en LOOP (løkke) på meget besat niveau. Det kan sagtens lege's ind uden at kan forklare de akademiske bagved.

Se disse videoer omkring hvad LEGO Mindstorms kodning er: https://www.youtube.com/watch?v=vv5X3zzkBk4

Eller denne video for hvad Scratch er: https://www.youtube.com/watch?v=jxRXEcIxxWI

Barren er ikke super høj :-)

  • 1
  • 0

Det er ikke svært at lære en SWITCH (if/else) eller en LOOP (løkke) på meget besat niveau. Det kan sagtens lege's ind uden at kan forklare de akademiske bagved.

Problemet er, at det forbliver på et basalt niveau for størsteparten. Hvis ikke du forstår den grundlæggende datalogi, bliver det, med undtagelse af talenterne, svært at skifte sprog, efterhånden som moderne skifter, og næsten umuligt at skifte paradigme.

At tro man kan afhjælpe programmørmangel, ved at undervise i højniveausprog i folkeskolen, svarer til at tro man kan afhjælpe mangel på symfonikere, ved at indføre en times klaverspil om ugen. Det forstår de fleste er umuligt, men kun få forstår at kodning ikke er meget forskelligt fra musik.

  • 0
  • 0

Hov, hov jeg taler slet ikke om at man ved at lære Scratch eller LEGO Mindstorms bliver til programmør. Hvis jeg tror dette er jeg ekstrem naive. Af at lære plus og minus i matematik bliver man ikke matematik professor. Eller at lære navneord eller analyser en tekst bliver man ikke cand. mag i dansk. IT og teknologi er så stor en del af vores verden idag, og jeg er 100% sikker på at det bliver en endnu større del i fremtiden og for mine børn. Det som jeg tænker er, at de har behov for at lære og forstå teknologien og dens muligheder. Jeg er over 99% sikker på at min søn ikke bliver programmør. Men jeg klæder ham på til morgendagens udfordringer og håber at giver ham værktøjer til bedre at kunne forstå hans egne muligheder. Nej efter min mening så skal, så mange børn som muligt ikke bare lære at bruge teknologien, men forstå den og udnytte dem, og dette gør dem ikke til programmører, men klæder dem på til morgendagens udfordringer. Hvis du tror at målet er at alle skal lære at være perfekt til programmere bare fordi de lære et programmeringssprog så er hele den britiske regering en samling landsbytosser, for i england har de som mål at alle børn skal lære at programmere.: http://www.version2.dk/artikel/nu-skal-all...

  • 1
  • 0

Jeg savner lidt de gamle processorer som 8080 og 8085. De var ekstremt simple, men egnede til at lære hvad der skete internt i computerne. Moderne processorer er blevet så komplicerede, at de ikke giver mening at lære.

De gamle TTL kredse, tællere, addere osv. var også fint til børn at lære - metoderne bag at tælle binært, og lave en binær tæller / eller BCD tæller, hænger fint sammen med det som undervises i i matematik i de første klasser. Om der tælles binært, eller i 10-tals systemet er omtrent ens, bortset fra at 10-tals systemet er lidt mere kompliceret. Børn kan nemt lære elementær digital elektronik helt ned til 7 års alderen, og lære at "dekode" f.eks. en tæller, og or'e udgange for en simpel styring af noget.

På et tidspunkt kan man kan måske også lave opgaver, hvor de skal prøve at se hvilke rækkefølge en "maskine" går igennem, når der slås op i en tabel (tilstandsmaskine). Og herefter, lave en med et eller to inputs. Eller vende opgaven om, så børnene skal prøve at se, om de kan regne en maskine ud, der f.eks. detekterer en lille sekvens. En tilstandsmaskine, kan også beskrives som en if/then/goto program.

Analog elektronik og programmering, er efter min mening lidt sværere - men fint at undervise de lidt større børn i. Analog elektronik giver indblik i svingningskredse, differentialregning, og analog styreteknik. Det er relevant mange steder - der er reguleringssystemer med feedback overalt. Både i naturen, og i dyr samt mennesker. Relæer er nemt at forstå, og transistorer som "analoge" relæer.

Og min helt personlige mening: Tysk er ingen grund til at undervise børn i. Brug i stedet tiden på elektronik og programmering. Engelsk og dansk undervises det bedst i, ved at give børnene nogle fagbøger.

  • 0
  • 1

På et tidspunkt, mener jeg at det er relevant at blive undervist i programmering og grafer - altså hvordan man tager et almindeligt program og omsætter til graf. Det giver forståelse for, hvordan at "kode" kan beskrive systemer i virkeligheden, og hvor to additioner svarer til to fysiske add funktioner. F.eks. en løkke kan også opfattes sekventielt, således der kun bruges en add funktion. Programmet viser ikke direkte om koden skal blive til en enorm parallel struktur, eller om den skal "genbruge" blokkene, med mindre der adderes f.eks. vent på klok ordre til koden, således der ventes på klok, og blokken genbruges og sekventialiseres.

Årsagen til, at jeg mener det er relevant, er at mange ting i virkeligheden beskrives ved hjælp af et program, og svarer til at dataflow grafer og ting opbygges af programmer. Som eksempel kan vi nævne VHDL og DNA. Her bruges programmeringssprog til at opbygge parallelle fysiske strukturer.

Endeligt er dataflow graferne dem som viser hvad der sker uafhængigt at kodens skrevne rækkefølge.

  • 0
  • 0

Stakkels børn! Har selv kodet siden 1970'erne, og jeg fatter ikke en disse af hvad du skriver :-)

Ok - jeg er dårligt til at formulere mig. Og jeg ved ikke, om jeg kan gøre det bedre. Normalt beskriver dine programmer kodens vej - f.eks. rutediagrammer. I Dataflow diagrammer, beskrives dataenes vej. Hardwarediagrammer med flipflops og gates er dataflow diagrammer. Hvis du vil lave en maskinkode dataflow beskrivelse, kan det f.eks. gøres ved at linke datafelterne, således en maskinsprogsinstruktion der anvender outputtet fra en anden maskinsprogsinstruktion, har henholdsvis indgang og udgang knyttet til hinanden gennem en link (oftest dobbeltkædet). Kontrolstrukturer laves med multipleksere og demultipleksere, på samme måde som det laves i hardware, og det er datastrømmene der beskriver om data skal gå i f.eks. loop, eller flettes ud. Du kan enten have dataflow diagrammer der fungerer som hardware, hvor du har forsinkelsesled der klokkes, når data går i loop, eller du kan anvende fifoer mellem blokkene, som der typisk gøres ved parallel programmering. Anvendes fifoer, vil de typisk initialiseres til at indeholde nogle data efter reset, således at der er et input til multiplexerne i f.eks. loops, så de starter op med at føre initialiseringsværdierne ind i loop'en. Når de kommer til løkkebetingelsen, skrives den ind i fifoen til henholdsvis multiplexeren og demultiplexeren, således dataene kan føres retur. Præcist, som når du laver hardware diagrammer. En dataflow repræsentation er i princippet en massiv parallel beskrivelse. Og det er ikke muligt at se kodens rækkefølge. Beder du om et output, kan du i princippet arbejde dig baglands, og se hvilke dele af programmet der udføres. Normalt, vil man for at udføre det effektivt, lave det om til en så sekventiel beskrivelse som muligt, ved at analysere hvilke dele der hænger naturligt sammen. Skal det køre på et mindre antal processorer, vil det analyseres med henblik på det, men koden samles således at kode med stor datatransport imellem placeres på samme processor, for at undgå forsinkelsen ved datatransporten. Ofte anvender man i dag i cpuen delvis dataflow beskrivelser i maskinkode, ved at der ikke anvendes registre, men henvises til hvor mange instruktioner tilbage, at dataene skal hentes - dette svarer nemlig til forwarding på processoren, og når der anvendes flere parallelle processorer, så hentes data direkte mellem dem ud fra maskinkoden. Bruger du således output fra forrige instruktion, så anvendes ikke et register, men en pointer angiver i stedet for et register, at du tager outputtet fra forrige instruktion. Dette svarer til en dataflow beskrivelse, hvor du anvender enkeltkædede lister. Ofte kan dataene hentes op til mange instruktioner tilbage afhængigt af f.eks. pipeline dybden, og af om der er sat ekstra registre på, for at opnå kompatibilitet til større pipeline dybde. En moderne CPU fungerer oftest sådan internt, og det er reelt dataflow grafen der lægges ind i inderste cache - og da felterne således er linket til hinanden, begynder CPU'en at minde om en lille FPGA. For at huske data med større dybde, anvendes stadigt ramceller og registre.

Det er også interessant når programmeringssprog anvendes til at beskrive noget fysisk med - f.eks. hardware, eller hvordan ting bygges op. I et sprog som VHDL kan man beskrive hvordan komponenterne bygges sammen - både ved at anvende netlister og kode til at opbygge netlisterne med, og ved at bruge en process, hvor funktionen beskrives sekventielt. Den sekventielle beskrivelse oversættes via dataflow grafen til den fysiske opbygning.

  • 0
  • 0
Bidrag med din viden – log ind og deltag i debatten