Du är här: keryx/Lars blogg/68. Hoppa till huvudinnehållet (h) Sidans menysektion:
Keryx logotype

Lars Gunthers bloggsida

Framtidens programmeringsundervisning = patterns and paradigms first (del 3)

De elever jag undervisar kommer vara aktiva i utvecklingen av olika slags mjukvara från år 2011 till kanske år 2055. Vi kan inte hålla på och diskutera som om det fortfarande vore 1993. Vi lärare måste blicka framåt. Jag är inte så värs bekymrad över att dagens elever inte lär sig assembler eller ens sorteringsalgoritmer. Ytterst få kommer jobba på den nivån. 99 % av alla utvecklare på morgondagens arbetsmarknad kommer jobba på en högre abstraktionsnivå.

Sortering är inte (längre) svårt

Alla moderna språk har tillgång till högoptimerade bibliotek med färdiga sorteringsfunktioner. Att sortera är inte svårare än att skriva sort i sin kod. Den som kan läsa manualen kommer alltid vinna över den som återimplementerar redan befintliga funktioner i sin egen kod.

Sorteringsalgoritm - mindre viktigt

Varför fokuseras då sorteringsalgoritmer så mycket? För att dagens lärare har fått lära sig dessa och fått intutat i sig att de är viktiga.

Ett annat exempel: Jag och mina kollegor som började med datorer på 70-talet – jo, jag är så gammal – är uppvuxna med en programmering som fokuserat frågor om maximalt nyttjande av hårdvaran. Peek och poke blandades in i Basic för att öka farten! Kort sagt, vår Basic hade inslag av assembler. Men varför skall dagens nya utvecklare gå igenom våra utvecklingsfaser?

Paradigmskiften

Programmerare är ett konservativt släkte. Detta säger en av mina gurus, Douglas Crockford. Det är som om varje förbättring i våra arbetsmetoder och vårt sätt att programmera kräver ett generationsskifte:

Who was most enraged by this suggestion [to drop goto]? Programmers. This debate went on for literally a decade, for two decades, for a generation, arguing about whether GOTO should be eliminated or not. Ultimately we got rid of it, and that was the right thing to do. I think it's not coincidental that it took a generation to do it, because basically we had to come up and train a whole new set of people who were not stuck in the previous idea. Again, who better should have understood the value of structuring your programs in such a way that they could scale better? Only programmers should understand the value of that argument, and programmers were least able to understand that argument. (Mina betoningar.)

Att få en överblick om olika programmeringsparadigm och att kunna ta till sig de paradigm som kommer få störst betydelse i framtidens utveckling ser jag som en klart viktigare kunskap, än att återskapa alla algoritmer som forskades fram på 60- och 70-talen. Åtminstone inte på gymnasienivå.

Somliga programmerare kommer behöva djup förankring i datavetenskapen, så som den presenteras på högskolan, men det gäller inte alla. Och speciellt inte de som kommer få jobb efter ett fjärde år på gymnasiet. Branschen var mycket tydlig med detta. Det är inte gymnasiets jobb att utbilda framtidens programmerare i klassisk mening. Från början var uppdraget inte ens att utbilda något annat än webbutvecklare, men som jag tidigare skrivit, så menar jag att disciplinerna konvergerar och att en sådan utgång skulle därför bli för snäv.

Att förstå patterns är viktigare algorimer

I det arbete jag förutser för gymnasieingenjörer, så ingår alltså inte problemen att skapa perfekta, sökalgorimer optimerade simuleringsflöden eller program för data-mining. Däremot tror jag de kan jobba med lokalisering, att skriva tester utifrån buggrapporter, porta en iOS app till Android, skapa en webbplats med Drupal och JQuery och komplettera ett sådant kodbibliotek med några inte alltför komplicerade egna funktioner.

Model Controller View

För den sortens arbete är det viktigt att man förstår applikationsarkitektur och designmönster. Att kunna känna igen, använda och skapa singletons, factorymetoder, active record eller en front end controler, det är saker jag tycker är grunder!

Historia och framtid

Specifikt för gymnasiets teknikprogram är att eleverna skall få helhetsbilder inom sina teknikområden. Yrkeshögskolorna utbildar med stor specialisering mot enskilda arbetplatser. De kan ge en utbildning som bara fokuserar exempelvis Flash eller RIA. Universitet och högskolor skall soms sagt fokusera på datavetenskap. Gymnasiet skall däremot ge en bredare kunskap.

Switchboard som styr ENIAC

Som en konsekvens av detta tror jag på att lära eleverna historisk kunskap om hur programmeringen har utvecklats från Eniacs dagar till våra. Jag tror bara inte att vi skall låta dem i detalj återuppleva historien. Men den sortens kunskap som Douglas Crockford framför i detta föredrag är klart väsentlig. (Föredraget inleder en serie om JavaScript, men handlar till 80 % om programmering i allmänhet.)

Douglas crockford föreläser om programmeringens historia. (Flash krävs.) Källa

Om du har det allra lilla minsta intresse för programmering, så skall du lyssna på detta föredrag av the Crock. Allt annat är tjänstefel!

Ett liknande synssätt finns i denna artikel av Gary pollice, med den talande rubriken Beyond an objects-first approach.

I also noticed that people who were competent with functional languages, such as LISP, could adapt to the OO languages and methods with greater ease than I could.

Students who come from an objects-first program have learned the hard part of software development. They understand design principles and how to manage complexity. (Min betoning.)

Nej. Våra elever måste inte vandra igenom den utveckling vi som lärare gjort. De måste inte börja med radbaserad imperativ programmering, för att gå vidare till strukturer och sedan objekt – och stanna där!

Vad det sista stycket i citatet ovan illustrerar är att det svåra som måste bemästras är inte syntax eller kommandon, utan att kunna bygga ihop ett program, enligt en funktionell och modulär arkitektur.

För 2010-talet så måste vi ställa oss frågan vad kommer efter OO? Vad för landskap skall våra elever vandra igenom när deras karriär kommer vara mellan år 2015 och år 2055? Historia är alltid bra, men att föra vidare grälen från 90-talets början mellan objektorienterad och strukturerad programmering, det känns som att utvärdera huruvida våra fordon skall dras av hästar eller drivas med bensinmotorer, just när vi borde leta efter något annat än bensin.

Funktionell programmering

Gary Pollice drar en lans för aspektorienterad programmering. Själv tror jag att funktionell programmering kommer ta en stor del av marknaden. På minst tre sätt:

  1. Befintliga språk utökas med funktionella möjligheter. Exempelvis har PHP 5.3 såväl lambda som closures.
  2. Tydligt funktionella språk, som OCaml, Haskell, Clojure, Erlang, F#, Scala och inte minst Ruby vinner terräng. (Många av dessa kan användas i hybridläge mellan OO och funktionell programmering.)
  3. JavaScript är redan världens mest använda programmeringsspråk, och växer snabbare än något annat. JavaScript är baserat på Self och Scheme och i grunden alltså ett funktionellt språk, med många drag av Lisp, alla funktionella språks urmoder.

Ett exempel ur verkligheten

Jag har precis skaffat mig en LiveScribe penna. Jag älskar den! Men det finns inget stöd för Linux och jag är en Linuxälskare av stora mått, så när jag sökte efter ett program för Linux, så hittade jag LibreScribe. Och det här citatet:

Even small things, such as documenting functions, adding comments, ensuring source code style consistency, and making it easier to maintain the source code are incredibly important.

Som taget ur mina kursplaner och min idé om att göra praktik i öppen källkodsprojekt:

Här har vi alltså någon som efterlyser hjälp på lämplig svårighetsnivå och med konkreta uppgifter.

Hur kan ni hjälpa till?

Publicerad: 2011-05-22 07:00
Uppdaterad: 2011-05-22 07:00


Permalink

Senaste bloggar

Ny lärobok: Webbserverprogrammering 1 med PHP
2013-09-05 15:26

Köp min lärobok
2012-08-03 21:21

Vad är diskreta domskript?
2011-10-11 21:02

Framtidens programmeringsundervisning = web first (del 2)
2011-05-08 14:35

Framtidens programmeringsundervisning = user first (del 1)
2011-04-19 13:38

Mina tankar och resurser om gy11 kurserna
2011-03-17 20:46

Alternativ utformning av arbetsplatsförlagt lärande
2010-11-07 07:16

Kort politiskt mellanspel
2010-09-05 18:34

Tyck till om mina kursplaner och köp min bok!
2010-05-31 16:00

Gy -11 webbkursernas inbördes relation
2010-02-26 09:13

Bloggar i samma ämne

Framtidens programmeringsundervisning = web first (del 2)
2011-05-08 14:35

Framtidens programmeringsundervisning = user first (del 1)
2011-04-19 13:38

Artiklar i samma ämne

Inga artiklar finns i ämnet.

Technorati


RSS-ikon
Uppdaterad: 2011-05-22 07:00    © Keryx