Varför måste en programmerings algoritmen alltid vara fullständigt, exakt eller i rätt ordning?
Måste koden vara alltid i rätt ordning?
Om din fråga gäller "vanliga" program skrivna i språk som java, python eller C# så kan man kanske förklara så här.
Program skrivs ju ofta för att utföra en uppgift. Kanske vill vi göra något enkelt, som att beräkna arean av en rektangel. Jag skriver lite "pseudokod", alltså inte riktig programkod utan vanlig svenska som beskriver vad programmet skall göra:
- Be användaren mata in längden av sida X.
- Be användaren mata in längden av sida Y.
- Räkna ut arean A=X*Y.
- Skriv ut svaret A på skärmen.
Här är det ganska tydligt att vi inte kan göra beräkningen på rad 3 innan vi fått sidorna. Vi kan heller inte skriva ut resultatet på rad 4 innan vi räknat ut det i 3.
Ett annat exempel, baka en sockerkaka:
- Sätt ugnen på 175 grader.
- Blanda ihop ingredienserna till smeten.
- Smöra och bröa en kakform.
- Häll smeten i formen.
- Vänta tills ugnen är 175 grader.
- Sätt in kakformen i ugnen.
- Vänta tills den är färdiggräddad.
- Ta ut kakan ur ugnen.
Här kan vi till en viss del välja i vilken ordning vi vill göra sakerna, precis som när vi skriver en del program.
Vi börjar med att sätta på ugnen, för vi vet att vi i steg 5 måste vänta på att den blivit varm. Då kan vi göra stegen 2-4 under tiden. Det går förstås också att sätta på ugnen när smeten är klar, men då måste vi vänta "i onödan".
(Googletips, om du är nyfiken: I programmeringsvärlden talar man om samtidighet och parallellism, samt att utföra arbetsuppgifter synkront och asynkront.)
Vad gäller om koden måste vara fullständig, så är svaret att det nog inte alltid är det. Åtminstone inte till en början. När jag skriver ett program, så börjar jag ofta med någon bit och testar sedan att den fungerar som den ska, innan jag fortsätter med nästa. Till slut har jag de delar som behövs och ett tillräckligt färdigt program.
Det här med fullständig kan också handla om hur tolerant programmet skall vara för oförutsedda händelser. Det här programmet som räknar ut arean förväntar sig två sidor i en rektangel. Om användaren matar in "5" och "7", blir svaret "35". Men vad händer om användaren matar in "5" och "banan"? Kommer programmet att krascha, skriver det ut "5banan" eller kommer det att snällt be om ett tal istället för en frukt? Det är upp till den som programmerar att bestämma.
Exakthet ...? Ja, det beror också på. Ibland kan det vara jätteviktigt. Ett program som styr en rymdsond som skall landa på Mars måste vara väldigt exakt. Om det saknas någon pixel i Minecraft spelar kanske inte så stor roll. Det beror på vilka krav man har. Programmen gör ju alltid exakt vad man bett dem om, så man skall inte förvänta sig något annat.
Om du tar tre ägg istället för fyra ägg i en sockerkaka så blir det nog en god kaka ändå. Om du tar tre nävar jord istället för tre ägg, så blir det något annat.
Programmet du skriver är ett recept som datorn följer slaviskt. Program blir vad du gör dem till. Är koden inte exakt, så blir resultatet nog inte vad du förväntar dig. Detsamma om det inte är fullständigt.
Om du har läst så här långt så finns det ytterligare varianter att kika på:
- Villkorsprogrammering - Här beskriver man ett problem och reglerna för hur det skall lösas, men skriver inte programmet som löser det. Tänk ett "sudoku": Du matar bara in de siffror du har och talar om vilka regler som gäller, så får du lösningen av programmet.
- Neurala nätverk, AI - Här vet du kanske inte själv hur man löser problemet. Du har istället en modell som du tränar. Du vill kanske ha ett system som kan känna igen katter på fotografier. Först visar du systemet 1000 bilder på katter, så att det tränas att känna igen olika raser, färger och från olika håll. Sedan visar du ytterligare bilder, med och utan katter. När det känner igen en katt, får det en tumme upp. När det tror att det finns en katt, men det inte gör det, så blir det en tumme ned. Efter en tid så kan det ganska så säkert hitta kattbilder bland andra utan katter.
Vill bara lägg till vad en datorguru som heter Ted Nelson lär ha sagt:
The good news about computers is that they do what you tell them to do. The bad news is that they do what you tell them to do.
Dvs om man av misstag säger till en dator att göra fel, så gör den det!