lunduniversity / introprog

Teaching material for "Introduction to Programming using Scala" at Lund University, LTH. http://cs.lth.se/pgk/
140 stars 167 forks source link

Discussion: Project-photo #716

Closed DavveDP closed 1 year ago

DavveDP commented 1 year ago

Efter att ha genomfört projektet photo har jag några synpunkter om projektets utformning. Som Björn nämnt i sina föreläsningar är "Bank" det "bästa" projektet eftersom den kräver kunskaper i majoriteten av delarna som kursen omfattar. Vad gäller photo tycker inte jag att den kan mäta sig med bank av anledningarna nedan.

1. För mycket fokus på att skapa nya Filterklasser

Alla uppgifter är av typen att skapa nya filterklasser. Inte nog med det, den givna filterklassen som ser ut som på bilden är redan ett fullt fungerande filter. Screenshot from 2022-12-08 13-52-18 Kodaren måste bara klura ut att Image.update tar en funktion som bestämmer färgen för varje pixel och sedan modifiera den. Därefter är det bara att använda copy-paste och göra nästa, och sedan nästa tills alla uppgifter är gjorda. Visserligen blir det teoretiskt tungt i de senare uppgifterna, men den komplicerade logiken som involverar matrismultiplikation och så vidare är redan definierad i convolve.

2. Utvecklar snäva kunskaper

Till följd av att endast skapa nya filter får utövaren inga nya typer av problem att angripa. Det framgår väldigt tydligt av den anledningen att photo tidigare varit en labb som fokuserat på ett specifikt ämne och inte ett projekt. Att utföra labben är som att göra monotona uppgifter i matteboken (no pun intended) under ett specifikt kapitel en efter en. Det saknar variation helt enkelt.

3. För mycket given kod

I kompendiet finns, likt andra labbar, givna klasser och funktionshuvuden som saknar implementationer. En otroligt smart design eftersom labbutövaren då inte måste spendera onödig tid på att formulera programmets arkitektur, vilket inte heller är kursens huvudsakliga syfte. Däremot stämmer koden i kompendiet inte överens med den i introprog/workspace. Där finns redan implementerade funktioner som t.ex computeIntensity och den tidigare nämnda convolve (inklusive dokumentation). Screenshot from 2022-12-09 11-33-22

Förändringsförslag

1. Uppdatera kodbasen i introprog/workspace för att matcha den i kompendiet

Den klart enklaste lösningen som ger utövaren en utmaning att översätta den matematiska teorin till kod. Förklaringen i kompendiet är väldigt utförlig, men i nulägen behöver labbutövaren inte ens läsa majoriteten av den utan istället bara använda convoleoch computeIntensity.

2. Låt utövaren själv implementera imageChooser

Om utövaren ska få implementera hela klassen eller bara några enskilda funktioner är en bedömningsfråga. Oavsett får utövaren repetera att arbeta med filer, i det här fallet flertalet bilder dessutom. En liten förändring, som ger en helt ny smak av uppgift att sänka tänderna i.

3. Låt användaren utveckla verktyg

Brush, erase, subsection, textbox etc. Alla som har använd en image editor innan är bekant med dessa begrepp. Event.MousePressed, Pixelwindow.drawText och introprog.Image.subsection är exempel på funktioner ur introprogbiblioteket som skulle kunna användas av användaren för att efterlikna dem här verktygen. Det skulle dock kräva att applikationsloopen skrevs om för att använda ett eventdrivet system istället, vilket inte gör så mycket eftersom utövaren redan känner till eventsystemet vid det här laget i kursen.

Slutsats

Att det ska finnas flera olika projekt som alternativ är nog en stor angelägenhet för studenter. Det skapar fler avenyer som kan väcka intresse och inspiration, vilket jag anser är en av kursens viktigaste aspekter. Men att projekten riktar in sig på ett specifikt ämne ska inte hämma deras huvudsakliga uppgift att sätta utövarens kunskapsbredd inom scala på prov. Ju fler olika kodavsnitt och varians inom respektive projekt desto bättre. Vad gäller photo kan förslagen ovan göras olika krävande beroende på mängden given kod. De är bara några spontana idéer på hur projektet skulle kunna reworkas. Med hjälp av att implementera dem på ett eller annat sätt lär projektet lämpa sig bättre som ett avslutningsprojekt. Ett sådant som till större utsträckning syftar till kursen mål att ge studenten en så bred bas inom programmering som möjligt.

//David Riley

bjornregnell commented 1 year ago

Tack för bra synpunkter!! Vi tar med det i kursutvecklingen inför nästa år.

bjornregnell commented 1 year ago

I have worked on this here: https://github.com/lunduniversity/introprog/commit/dddf1624f3aa9aaa7cac216e949245072d46b999 Now ready for review.

bjornregnell commented 1 year ago

@DavveDP If you are interested I would be happy of you could check out the new photo project in this compendium2.pdf here, section 12.5: https://fileadmin.cs.lth.se/pgk/compendium2.pdf The given code-files are here: https://github.com/lunduniversity/introprog/tree/master/workspace/w13_photo_proj

I have tried to make it more fun and lagom challenging. Also improved explanations on convolve and intensity and made the whole code base more Scala-idiomatic.

Let me know what you think, if you have some minutes available to check it out.

DavveDP commented 1 year ago

It looks a lot better overall! The code base resembles the rest of the scala code in the course and the focus is shifted more to understanding the actual image manipulation. Clever column function in the Button-object I must say. The gui should be quite straight-forward thanks to it and the other functions of pixelwindow, as long as students know to look for them. It’s also a lot clearer how to build the application.

TLDR: Looks good to me! Great Job @bjornregnell !

bjornregnell commented 1 year ago

Thanks! Closing this based on your review @DavveDP

bjornregnell commented 1 year ago

And many thanks again for your detailed comments on the old version! @DavveDP

bjornregnell commented 1 year ago

I have added som more optional tasks based on ideas in this issue here: a46d439a61c5059b5d36e18503ae834bc80f8405