Java(script) er upædagogisk

Rolf har startet lidt af et nostalgitrip med sine Sinclair historie og en eller anden gang kommer der nok også en historie fra Commodore ud af mig.

Men har I lagt mærke til hvad det er folk siger de tændte på ?

Hvis man skal koge det ned, er det "her var en computer som de havde magten over".

Når man sidder foran en PC med en browser, så har man ikke magten over noget som helst, man er en passiv supplikant foran alteret og reklamerne er klokken der ringer magtesløsheden ind.

Man kan naturligvis godt skrive noget java eller javascript på sin egen web-side, men det er bliver ikke mere ophidsende end side-9 konerne i EkstraBladet, for man ved at der er 50 mio linier kode imellem en selv og computeren.

Fidusen ved en lillebitte computer er, at man kan rumme den i sin hjerne.

Med 4k eller for den sags skyld 64k, er det ikke mere end at man kan printe hele lageret ud og kigge efter, hvis det kommer dertil.

Med 1GB skal der en halv regnskov til.

Der er ikke mange ting der er så store for en præ-teenager som at lodde sin egen astabile multivibrator sammen og se den blinke, eller at skrive sit første program og se det virke.

Men følelsen er der ikke, hvis man blot sidder of fiffler lidt med en mus på en PC, det virker ikke på den måde.

Hvis vi vil have it-nørder i hobetal, har vi brug for at skaffe et programmeringslegetøj der er ligeså godt som en Sinclair eller en Commodore.

Legos MindStorm NXT er ikke helt ringe som robotlegetøj beset.

Men det lider af to problemer som computerlegetøj: Der skal en PC til at programmere den, dermed mister man autenciteten og der mangler et programmeringssprog der faktisk er et sprog.

En af mine små projekter er at bygge en miniaturemodel af en RC7000/RC3600 computer, komplet med knapper og lysdioder, for det er sandsynligvis den med pædagogiske computer der nogensinde har existeret, jeg må se at komme videre med det projekt.

phk

Kommentarer (25)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
#1 Uffe R. B. Andersen

Det handler vel basalt set om, at man skal kunne kravle, før man kan gå. Som på 1. semester på DTH, hvor vi udsattes for et tegnekursus; de fleste syntes det var pjat, for vi ville jo alligevel komme til at tegne alt på CAD-systemer. Alligevel gi'r det en hel del, når man selv skal sidde og nørkle med horisont-punkter, perspektiver osv. Når jeg tegner med mine børn, så kan jeg faktisk få bondegården til at se realistisk ud, fordi jeg ved at alle parallelle linjer skal mødes i ét punkt i horisonten, hvilket jeg nok aldrig havde erkendt, hvis jeg kun havde anvendt CAD.

  • 0
  • 0
#2 Kristian Poulsen

Jeg kan ikke lade være med at tænke på hvordan situationen er i dag for en 10 årig knægt der ønsker at lære hvordan man laver programmer til sin computer, og hvordan man nogensinde får startet op.

Det kan godt være at unge mennesker i dag har et større drive end jeg havde dengang, og derfor sagtens kan overskue at hvordan man bruger et moderne udviklingsmiljø. Men det var sgu nemt at sætte sin Vic20 til fjernsynet, og så gå i gang fra en ende af med den DANSKE! manual.

10 Print "Kristian" 20 Goto 10

run

WHAU! - og derfra var det kun fantasien (og hukommelsen) der satte grænsen...

  • 0
  • 0
#3 Uffe R. B. Andersen

Det er jo ikke kun indenfor it-branchen det gælder. Mine forældres gamle Fiat 128 blev for nogen tid siden afhentet af en ung mekanikerlærling, som sammen med sin far ville sætte den i stand; den havde ellers stået opklodset i deres baghave i en del år. Knægten var dog smart nok til at erkende, at moderne biler lærer man ikke mekaniker-håndværk af. Jeg håber han får en fin Fiat 128 Rally ud af sine anstrengelser og ellers hjalp han da min far af med den :-)

  • 0
  • 0
#4 Torben Mogensen Blogger

Jeg er også enig. Der findes forskellige systemer til "nem" programmering for børn, men de har det med ofte at være oversimplificerede, så man hurtigt når loftet for, hvad man kan eller kun kan lave en slags programmer (f.eks. animationer eller spil). På de gamle maskiner kunne man ikke alene komme hurtigt i gang, man kunne gradvist gå videre til mere og mere komplicerede programmer til alle mulige formål -- fra grafik til fysiksimulering eller løsning af kombinatoriske problemer.

Der er lærebøger, der forsøger den slags fremgangsmåde med eksisterende sprog (se f.eks. http://www.htdp.org/), men brugen af f.eks. Java eller Scheme hæmmer tilgængeligheden. Jeg vil dog heller ikke kalde BASIC for verdens mest tilgængelige sprog, så der skal nok designes noget nyt.

  • 0
  • 0
#5 Peter Mogensen

10 Print "Kristian" 20 Goto 10

Jeg mindes at jeg som ~13-årig forsøgte at lære min far lidt om hvad programmering var med netop det eksempel. Hans eneste kommentar var: "Hvad smart er der ved at den skriver det? Det har jeg jo lige selv skrevet!"

...og det havde han jo ret i. Længere kom det aldrig.

  • 0
  • 0
#6 Michael Kastoft Nielsen

Hej i efterspørger hvad der kan bruges for nudagens ungdom. En alternativ er måske lommeregneren - dem man bruger på gymnasiet kan såvidt jeg ved programmeres - jeg har dog ikke selv prøvet det så jeg ved ikke hvor nemt eller ikke nemt det er at gå til.

mvh Michael

  • 0
  • 0
#7 Dana Skovsende

Jeg tror at man (læs: jeg) jeger sine første succes oplevelser med computer, den gang man ikke havde andet en ZX80. Og når man finder tilbage så er der en gensynets glæde. Selv om at jeg har store Unix Clustere og Storage systemer til millioner at lege med på arbejdet, så er jeg faktisk mere glad når jeg fifler med min små AVR CPU’er efter arbejde.

Jeg har for nyligt fundet ud af hvor ”nemt” det er at leve en CPU fra bunden, så derfor er jeg i gang med at implementere min egen CPU med 7400 TTL kredse.. Og når man leger med det, så flyver tiden (og man er 13 år igen)

  • 0
  • 0
#9 Peter Lind

Men følelsen er der ikke, hvis man blot sidder of fiffler lidt med en mus på en PC, det virker ikke på den måde.

Det er måske rigtigt nok, men sidste efterår havde jeg fornøjelsen af at deltage i et Python-kursus for folk der aldrig havde programmeret før, og selv om vi havde et stort frafald, så havde alle de 'overlevende' helt klart den der følelse af at have skabt noget, at have tænkt en tanke og få computeren til at udføre den tanke. Og det er det der er den helt store følelse i forbindelse med programmering.

At nogle af os så også helst vil gå skridtet videre og forstå hvad der virkelig sker helt inde i flip-flops, gates og transistorer, det synes jeg er en lidt anden 'gren'. Og selv for den mest langhårede programmør derude er der stadig 50 millioner transistorer imellem hans program og det maskinen rent faktisk gør. Selvfølgelig er det fedt at vide alt, men jeg synes at det er helt fint at nutidens unge kan vælge om de vil fordybe sig i bits og logik, eller om de vil forstå højere og større abstraktioner som matematiske modeller for sorterings-algoritmer, udvikling af virtuelle maskiner, og forskellen på java og javascript.

  • 0
  • 0
#10 Torben Mogensen Blogger

Den lommeregner, som min datter bruger i gymnasiet er ganske rigtigt programmerbar, men det er ikke noget, de bruger i undervisningen. Derimod bruger de et (Windows-only) program fra TI, der supplerer lommeregnerens funktioner med noget ligningsløsning og opstilling af formler til udskrift.

Det er ikke specielt svært at lave simple programmer til disse lommeregnere, men grænsefladen er styg -- man skal f.eks. vælge nøgleordene fra menuer. Man kan lave grafik (med de begrænsninger, displayet har), men man kan ikke frit blande tekst og grafik. Derudover er beregningen meget langsom, så f.eks. animationer kan man godt glemme.

  • 0
  • 0
#11 Jacob Christian Munch-Andersen

Jeg kan ikke lade være med at tænke på hvordan situationen er i dag for en 10 årig knægt der ønsker at lære hvordan man laver programmer til sin computer, og hvordan man nogensinde får startet op.

Det problem sad jeg med i årevis, det forekommer måske trivielt for nogen at hente en stak værktøjer på nettet og gå i gang, men der mangler en rød tråd og man ender let op med en stak løse komponenter uden noget der ligner ordentlig dokumentation. Det var en Ti-83 med en god murstensmanual der fik mig i gang.

Derefter var jeg heldig at støde ind i Blitz Basic, der er masser af dårlige ting at sige om det, men for en begynder er det helt klart de gode ting der vejer tungest. Total integreret IDE med en super manual med kodeeksempler til alle kommandoerne.

Specielt eksemplerne lige ved hånden er noget som rigtigt mange udviklingsmiljøer kunne bruge.

Jeg tror egentlig ikke at det er nødvendigt at gå ned på en simpel platform for at lære at programmere, man skal bare have skåret alt det unødvendige væk. Det kan en lommeregner eller en ZX80 selvfølgelig gøre, men PCen kan også, den skal bare lige have et overlay som dækker over de komplicerede ting.

  • 0
  • 0
#14 Anders Reinhardt Hansen

Tråden her lyser lidt af at personerne er vokset op med goto kommandoer. Det er selvfølgelig også ret nemt og indlysende hvordan de virker, men det er ikke det samme som at det er nemt gennemskue hvordan et lidt større program der indeholder goto kommandoer rent faktisk opfører sig. At der så bliver lavet analogier mellem java og javascript gør ikke forvirringen nemmere, det er fuldstændigt forskellige sprog. Man kan måske endda spørge om hvorvidt javascript egentlig er et sprog eller en klasse af forskellige sprog. Jeg siger ikke at alternativet er Java og .Net for 10 årige børn, men tankegangen omkring C og basic programmering er altså i mine øjne betydeligt sværere at sætte sig ind i end java er. Argumentet med at udviklingsmiljøet er for besværligt holder ikke. Til java findes der f.eks. BlueJ som er en meget simpel editor der er lavet til undervisningsformål, og jeg ved at den bl.a. er blevet brugt på diplom ingeniør uddannelsen på dtu.

  • 0
  • 0
#15 Lars Banner-Voigt

Da jeg engang startede i 7. klasse eller hvornaar det nu var, var det vist nok noget hjemmeside stads foerst, men lykken skete da jeg fandt en gammel QBasic paa min Dos maskine. I QBasic havde man et IDE, med en run knap og hele manualen tilgaengelig ved markere ens kommando og trykke F1, naar den stoedte paa en fejl gik den ud af programmet der hvor det skete. Man kunne bygge kartoteks programmer, snake spil, skak spil, primtals udregnere og alt muligt andet som det var relativt let at finde eksempler til paa nettet eller i boeger paa biblioteket. QBasic var genialt og koerte paa Win98/Dos mener jeg :)

I dag hvis man skal finde ordentligt boeger til programmering skal man, i hvertfald paa sydfyn, helt ind paa SDU's bibliotek som heldigvis er aabent for os der endnu ikke er naaet dertil.

  • 0
  • 0
#16 Jacob Christian Munch-Andersen

BlueJ udstiller på aller væmmeligste måde hvorfor Java ikke er et optimalt begyndersprog. Skal man tro bogen så kan man ikke skrive "Hello World" uden at oprette fire forskellige klasser først.

Hvad jeg umiddelbart lærte af et BlueJ kursus er hvor nytteløst det er at putte sin kode i flere forskellige klasser.

Java kan da også godt bruges som begyndersprog, men man bliver bare nødt til at vende 180 grader ifht. BlueJ. Et begynderkursus i Java må nødvendigvis lægge ud med at der skal stå "public static void main", og hvorfor der skal det lærer I senere.

  • 0
  • 0
#17 Anders Reinhardt Hansen

BlueJ udstiller på aller væmmeligste måde hvorfor Java ikke er et optimalt begyndersprog. Skal man tro bogen så kan man ikke skrive "Hello World" uden at oprette fire forskellige klasser først.

Hvad jeg umiddelbart lærte af et BlueJ kursus er hvor nytteløst det er at putte sin kode i flere forskellige klasser.

Håber du har opnået bedre forståelse for java siden da. Ellers har du da noget at glæde dig til. Men pointen med BlueJ var at jeg ville vise at man ikke behøver en stor IDE for at kode java(som der ellers blev påstået længere oppe). Vil 100% mene at BlueJ er meget mere tilgængeligt end, emacs, vi, notepad, nedit for første gangs kodere.

Men kom da gerne med eksempler på sprog kombineret IDE'er/editorer der er bedre for førstegangskodere.

Java kan da også godt bruges som begyndersprog, men man bliver bare nødt til at vende 180 grader ifht. BlueJ. Et begynderkursus i Java må nødvendigvis lægge ud med at der skal stå "public static void main", og hvorfor der skal det lærer I senere.

Det er vel op til underviseren hvilken type start han vil lægge ud med for de studerende. Jeg vil mene at man godt kan lære af den objektorienterede tankegang. Men hvis man skal lære programmering er det rigtigt at den procedurale måde er praktisk i starten. Det er dog vigtigt at de studerende får forståelse for den objektorienterede tankegang tidligt. Det er hæsligt at se 3000 kodelinjer programmer opbygget af 2-3 klasser.

  • 0
  • 0
#18 Torben Mogensen Blogger

Det er dog vigtigt at de studerende får forståelse for den objektorienterede tankegang tidligt.

Det var dog en hæslig tanke. Den objektorienterede model er ugennemskuelig og overkompliceret.

Det du mener er nok, at de studerende skal få forståelse for at dele programmet op i logiske komponenter. Men der er mange andre (og bedre) måder til det end objekter og klasser.

  • 0
  • 0
#19 Anders Reinhardt Hansen

Det var dog en hæslig tanke. Den objektorienterede model er ugennemskuelig og overkompliceret.

Det du mener er nok, at de studerende skal få forståelse for at dele programmet op i logiske komponenter. Men der er mange andre (og bedre) måder til det end objekter og klasser.

Det jeg mente var at i en java sammenhæng er det vigtigt at få forståelse for den objektorienterede tankegang tidligt. Men i andre sprog er der selvfølgelig andre måder at opbygge "logiske" komponenter på. Hvad mener du iøvrigt med "bedre" måder end objektorienteret? Lidt sjovt at sige uden at nævne konkrete eksempler og desuden vil det næsten altid være at sammenligne æbler og pærer.

  • 0
  • 0
#20 Claus Stovgaard

Som PHK nævner er NXT rigtig god til robot legetøj. Jeg studere på SDU hvor den bl.a. benyttes til AI, da det er hurtigt at bygge en robot i LEGO og der stadig er mange muligheder med den.

Der er det der labview inspireret interface som følger med kassen, hvilket hurtigt kommer til kort. PHK er det det du tænker på med hensyn til ”der mangler et programmeringssprog der faktisk er et sprog.” ellers vil jeg gerne have det uddybet.

Et af de næste ting man støder på er Next Byte Codes og Not eXactly C, der kan sammenlignes med henholdsvis assembler sprog og C for den her klods. Det virker fint under Linux så man kan beholde sin emacs / vim editor og bare kode der ud af.

Faktisk har jeg lige sat en NXT på min ønskeseddel i år.

  • 0
  • 0
#21 Torben Mogensen Blogger

Hvad mener du iøvrigt med "bedre" måder end objektorienteret?

Jeg vil starte med at sige, hvad jeg synes er problemet med OO, specielt til undervisning af nybegyndere.

Virtuelle metodekald er en meget kompliceret kaldmekanisme, hvor det selv for kyndige programmører kan være svært at overskue, hvilke metoder, der bliver kaldt hvornår. Man bliver næsten nødt til at kende detaljer i implementeringen for at få en nogenlunde operationel forståelse af virkemåden.

Derudover er subtypebegrebet (uden tilføjet eksplicitte generiske typer) ikke ideelt til genbrug -- genbrugelige datastrukturer skal i reglen bruge elementer af type object, og man skal downcaste efter brugen. Tilføjelse af eksplicit generiske typer afhjælper dette, men kombinationen af subtyper og generiske typer er meget kompleks (kontravariante typer m.m.).

Til at opdele et program i logiske komponenter med skjult implementering kan man sagtens bruge almindelige funktioner (gerne med polymorfi for at øge genbrug). Til støre komponenter eller mere generisk programmering kan man bruge moduler eller typeklasser, som begge er enklere end subtypepolymorfi.

Endvidere er ideen med at have lokal skjult tilstand i objekter, der bliver ændret bag ryggen på den, der kalder metoder i klassen, noget, der gør det meget svært at overskue, hvad der sker i et program.

  • 0
  • 0
#22 Jacob Christian Munch-Andersen

Jeg har ikke brugt Java siden, så nej, jeg har ikke opnået bedre forståelse. At det er dumt at forsøge at sprede sin kode ud over flere forskellige klasser var blot den praktiske erfaring jeg tog med mig. Den lidt mere efterrationaliserede konklusion var så at jeg havde gang i et projekt som bare ikke egnede sig til at blive spredt ud over 5-6 forskellige klasser, det var nok mere undervisningen og BlueJ end Java og klasser den var gal med. Men den distinktion kunne jeg kun lave fordi jeg havde lært at programmere i forvejen.

Jeg har allerde nævnt Blitz Basic som et godt begyndermiljø http://blitzbasic.com/ den nyeste iteration Blitz Max halter desværre noget i begyndervenlighed, så de gamle versioner Blitz 3D og Blitz Plus er dem jeg primært vil udpege som gode eksempler.

  • 0
  • 0
#23 Kenneth Geisshirt

Jeg kan ikke lade være med at tænke på hvordan situationen er i dag for en 10 årig knægt der ønsker at lære hvordan man laver programmer til sin computer, og hvordan man nogensinde får startet op.

Nu vil jeg ikke lyde elitær (selvom jeg nok er det), men der er stor forskel på at være "god til computere" og "have evnen til at kunne programmere". Du vil sikkert finde mange børn som er bedre til computere end deres forældre. Jeg har hørt argumentet (fra forældre) i min søns SFO at det er godt at børnene spiller computerspil da de så lærer en masse om computere. Hmmm, jeg tror ikke at der er en korrelation mellem Counter Strike og assembler.

Det børn/unge, som jeg gerne vil have i tale og hjælpe i gang med at programmere, er af "puzzle solving" typen. Og er du af den type, så tror jeg ikke at det er så vigtigt om det er en ZX-81 eller en moderne PC.

For børn er det nok vigtigt at der er noget fysisk involveret. Derfor er LEGO Mindstorm et godt bud. Til de større børn (og os voksne), kunne http://www.buglabs.net/ også være en mulighed.

Jeg tror ikke at jeg er enig i PHKs mening (at Javascript er upædagogisk). Især børn vil gerne have hurtig tilbagemelding på om det de gør, er rigtigt. Skriver du Javascript/HTML er en reload nok til at se det. Skal du derimod gennem compile/link-cyklus, tager det for lang tid. PHK, trænger du til en pause en dag fra dine compile/link/rebot-cyklus, skulle du prøve http://www.digitalinsane.com/api/yahoo/pacman/ og se hvad Javascript også kan bruges til.

  • 0
  • 0
#24 Anders Reinhardt Hansen

Jeg vil starte med at sige, hvad jeg synes er problemet med OO, specielt til undervisning af nybegyndere.

Virtuelle metodekald er en meget kompliceret kaldmekanisme, hvor det selv for kyndige programmører kan være svært at overskue, hvilke metoder, der bliver kaldt hvornår. Man bliver næsten nødt til at kende detaljer i implementeringen for at få en nogenlunde operationel forståelse af virkemåden.

Derudover er subtypebegrebet (uden tilføjet eksplicitte generiske typer) ikke ideelt til genbrug -- genbrugelige datastrukturer skal i reglen bruge elementer af type object, og man skal downcaste efter brugen. Tilføjelse af eksplicit generiske typer afhjælper dette, men kombinationen af subtyper og generiske typer er meget kompleks (kontravariante typer m.m.).

Til at opdele et program i logiske komponenter med skjult implementering kan man sagtens bruge almindelige funktioner (gerne med polymorfi for at øge genbrug). Til støre komponenter eller mere generisk programmering kan man bruge moduler eller typeklasser, som begge er enklere end subtypepolymorfi.

Endvidere er ideen med at have lokal skjult tilstand i objekter, der bliver ændret bag ryggen på den, der kalder metoder i klassen, noget, der gør det meget svært at overskue, hvad der sker i et program.

Al imperativ programmering er jo også udelukket da man ikke kan vide om et funktionskald har sideeffekter. Så konklusionen er at vi burde kode alt i funktionelle sprog som f.eks. SML eller Camel. Konsekvensen af dette er dog i mine øjne at vi så har sat de 10 årige godt og grundigt af... Men det er jo en smagssag.

Iøvrigt kan jeg tilføje at en jeg arbejder hos en af dine tidligere Ph.D'eres firma der tjener forholdsvis gode penge på at lave god software baseret på netop objektorientert kode. ;-)

  • 0
  • 0
#25 Torben Mogensen Blogger

[quote]Endvidere er ideen med at have lokal skjult tilstand i objekter, der bliver ændret bag ryggen på den, der kalder metoder i klassen, noget, der gør det meget svært at overskue, hvad der sker i et program.

Al imperativ programmering er jo også udelukket, da man ikke kan vide om et funktionskald har sideeffekter.[/quote]

Nej, det er ikke sideeffekter som sådan, jeg har noget imod. Det er sideeffekter i en tilstand, der ikke er globalt synlig, men alligevel har betydning efter, man vender tilbage fra metodekaldet. Generelt er der tre former af sideeffekter, som jeg synes er O.K.

  1. Input og output.

  2. Sideeffekter på global synlig tilstand.

  3. Sideeffekter på lokal tilstand, der oprettes og nedlægges igen, inden man vender tilbage til kalderen, sådan at der ikke er nogen påvirkning af senere kald.

De kan alle misbruges, men de er til at have med at gøre.

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