PROGRAMMERINGSMETODIK 1 Metaforer för programmering Hierarki, modularitet, överblick Programbyggnadskunskap Utvecklingsprocessen Kategorier av programspråk Programmering som allmän konst
Metaforer för programmering Instruktion programmering: att instruera datorn vad som ska göras lära sig programmera som att lära sig italienska? Konstruktion (av programmet) programmering: som att bygga ett hus botten-upp instrumentalism Problemlösning programmering: att lösa problem Strukturerad Programmering (föranledd av mjukvarukrisen) strukturella ideal: hierarki, modularitet, överblickbara kontrollstrukturer toppen-ned, stegvis detaljering, arbetsdelning software engineering konst/hantverk eller industri? jfr Taylorism, scientific management realism några komplikationer: ofullständig information svårspecificerbara villkor lösningen förändrar problemet 2
Metaforer för programmering (2) Adaptation programmering: att gradvis anpassa ett beteende (programmet) till dess slutliga kontext ej väldefinierat slut Demonstration programmering genom att med exempel visa det avsedda beteendet ett stort problem: avgränsning, abstraktion, induktion gemensamt med ostensiva definitioner och radikal översättning (Quine) 3
Hierarki, modularitet, överblick 4 ej modulärt modulärt Hierarki Modularitet olika delar av ett program bör vara så löst kopplade, så oberoende av varandra som möjligt Notera: viss modularitet följer naturligt ur toppen-ned-ansatsens stegvisa nedbrytning av problemet Överblickbara kontrollstrukturer Go To Statement Considered Harmful (Dijkstra 1968) Fördelarna med att följa dessa strukturella ideal är i huvudsak kognitiva: de underlättar att förstå hur programmet fungerar validera programmet lokalisera fel korrigera fel anpassa programmet till förändringar i uppgiften anpassa programmet till förändringar i driftsmiljön (både mjukvara och hårdvara) utnyttja programmet eller dess komponenter för nya ändamål
Vad behöver man kunna för att bygga ett program? Förståelse för hur den färdiga konstruktionen ska utnyttjas, vilken uppgift den fyller, driftsförhållanden, framtida behov, etc. speciellt för programmering är att uppgifterna kan gälla nästan vad som helst Materialkännedom, teknikkunskap, kunskap i bakomliggande teorier grundläggande datatyper och kontrollstrukturer grundläggande algoritmer (standardlösningar) designmönster programspråk Kunskap och färdighet i att använda olika hjälpmedel och verktyg editorer, språkprocessorer, felsöknings- och mätverktyg komponentbibliotek operativsystem Metodkunskap, förmåga att utvärdera konstruktionsförslag, kvalitetskriterier, kreativitet problemanalys, problemlösningsmetodologi effektiva arbetsmönster, arbetsorganisation valideringsmetoder utvärderingskriterier 5
Den klassiska utvecklingsprocessen 6 1. Problemspecifikation, uppgiftsformulering, 2. Algoritmkonstruktion (problemlösning) 3. Verifikation (att algoritmen uppfyller specifikationen) 4. Kodning (programskrivning) 5. Testning och avlusning 6. Validering (att programmet löser uppgiften) 7. Dokumentering (löper parallellt med de andra momenten) 8. Underhåll, förvaltning (sträcker sig över programmets hela livslängd) Problemspecifikationen är viktig, så viktig att en del har menat att när man har den rätta specifikationen av problemet så har man också lösningen Notera att man vill skjuta på kodningen och arbeta mer abstrakt och programspråksoberoende så länge det går Verifikation: idealiskt ett strikt bevis, men mycket mödosamt för icketriviala program Varför behövs Dokumentering? programmet beskriver ju beteendet? Varför behövs Underhåll? program ruttnar väl inte? Verkligheten är inte fullt så rätlinjig
Kategorier av programspråk Manipulativa / imperativa språk Ex: Fortran, Cobol, Algol, Pascal, Basic, c hantverksmetafor: beskriv hur dataobjekten ska bearbetas och manipuleras steg för steg i kronologisk ordning Funktionella och relationella språk Ex: Lisp, APL, ML; Prolog (logikbaserat) matematiska funktioner resp. relationer som förebild Objektorienterade och agentorienterade Ex: Simula, Smalltalk, c++, Java objektmetafor; agentmetafor 7
Programspråk 8 105! Lars-Erik Janlert 2013!
Programspråk (~R R. R)/R 1 R life { 1. 3 4=+/, 1 0 1. 1 0 1. } 106! 9 2013!
Programspråk 10 107! Lars-Erik Janlert 2013!
Programmering som allmän konst Läsa, skriva, räkna kraftfulla kognitiva instrument som idag ses som självklara grundläggande färdigheter för envar (men de startade som kunskaper för en mycket liten elit av experter) Borde programmera läggas till listan av grundläggande färdigheter som samhällsmedborgaren i det 21:a århundradet bör behärska? Programmering är ju ett sätt att beskriva och kontrollera beteende att planera och kontrollera beteende och utveckling av artefakter, system, miljöer, sitt personliga vardagsliv (yrkesliv såväl som privatliv), etc. är av intresse för de flesta behovet av mer, bättre och smartare kontroll tycks öka med den allmänna ökningen av tempo, effektivitet, uthållighet och teknologisk nivå programmering kan också fungera som agerande genom ombud: automatisering av uppgifter man helst slipper att göra själv, eller för att utsträcka räckvidden eller omfattningen av sina handlingar genom att använda program som (personliga) ombud Notera att program även kan vara ett sätt att analysera och förklara beteenden enkelt exempel från Artificiellt Liv: boids (http://www.red3d.com/cwr/boids/) 11
Programmering som allmän konst (2) Computer literacy ( datakunskap ) har kommit att inte betyda mer än att kunna använda datorer vilket är att inte säga just någonting alls man har föreslagit att en allmän programmeringsfärdighet istället kunde kallas programming literacy eller computational literacy Två starka företrädare för computational literacy är Seymour Papert, bl.a. uppfinnare av språket Logo (och inspiration till Lego Mindstorms som används i datalabbarna), och Andrea disessa, bl.a. uppfinnare av Boxer båda intresserade av utbildning, kreativitet och personlig utveckling Vad behövs för att detta ska bli verklighet? tidiga övningar med grundläggande kontrollstrukturer och och datatyper?; övningar i problemlösning och kreativitet?; utveckling av programspråk som är lättare att förstå och använda?; integration av programmering i grundläggande undervisning i de flesta skolämnen (som redan sker med att läsa och skriva)?; eller ytterligare något, eller något helt annat?
Visuella programspråk Janus, Lego Mindstorms, Satin-appar 13
Handgripliga (tangible) programspråk Ex: Tern 14
Att diskutera Varför behövs programunderhåll? Vilka paradigm för programspråk har vi? Metaforer för programmering? Vad kännetecknar strukturerad programmering? Vilka kompetenser är viktiga för en programmerare? Vilka steg ingår i klassisk programutvecklingsprocess? 15