ebSkola

8.1 Problēmas formulēšana un automatizācija

Stundas uzdevums: Pārtraukt būt tikai "kodētājam" un kļūt par "sistēmu arhitektu". Pirms mēs būvējam jaudīgu spēles dzinēju, mums ir jāsaprot, kādu tieši problēmu mēs risinām un kuras darbības mēs varam deleģēt datoram, lai atvieglotu savu darbu nākotnē.

SR 2.4.1. Analizē problēmu un veic dekompozīciju

Stundas mērķi:

70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - atrodi trīs rutīnas darbības · 2. uzdevums (~25 min) - uzraksti 'pirms un pēc' salīdzinājumu · 3. uzdevums (~20 min) - noformē problēmas ziņojumu. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.

Pirms sāc: atver savu projekta mapi un izveido failu projekta_plans.txt. Šajā stundā kodu nerakstīsi - rakstīsi par to, ko kods risinās.

Teorija: No Problēmas līdz Automatizācijai

  • Projektēšanas sākumpunkts: Programmēšana nesākas ar kodu, bet ar problēmas saprašanu. Ja nezinām, ko precīzi risinām, kods būs haotisks un grūti labojams.
  • Problēmas formulēšana (Problem Statement): Tas ir skaidrs apraksts tam, kas pašlaik kavē izstrādi (piemēram: "Jauna stāsta pievienošana spēlei prasa manuāli mainīt 20 Python funkcijas, kas rada loģikas kļūdas").
  • Automatizācija izstrādē:
    • Rutīnas darbu (datu ievade, aprēķini, navigācija) nodošana datoram.
    • Mērķis: Atbrīvot programmētāja laiku radošiem un sarežģītiem uzdevumiem.
  • Ko mēs automatizēsim "Krustiņi un nullītes" projektā?
    • Satura ielāde: Tekstus vairs nerakstīsim kodā, bet ielādēsim automātiski no CSV faila.
    • Lokāciju sasaiste: Izmantosim ID sistēmu, lai dators pats zinātu, kurp spēlētājam jādodas, neizmantojot milzīgus if/else blokus.

Vides sagatavošana (Windows)

Šajā tēmā mēs strādāsim pie arhitektūras dokumentācijas. Sagatavo darba vidi jaunam projektam.

  1. Atver PowerShell.
  2. Izveido mapi jaunajam arhitektūras projektam un ieej tajā:

mkdir KrustiniNullites_Arhitektura
cd KrustiniNullites_Arhitektura
    
  1. Izveido plānošanas failu, kurā šodien fiksēsi savas idejas:

ni projekta_plans.txt
code projekta_plans.txt
    

Praktiskie uzdevumi

1. uzdevums -

Atrodi trīs rutīnas darbības

Beigās tev būs saraksts ar darbiem, kurus programma varētu paveikt tavā vietā.

  1. Izveido failu projekta_plans.txt.
  2. Pieraksti trīs darbības, kuras spēles izstrādē atkārtojas vai ir apnicīgas.
  3. Pieraksti katrai, cik minūtes tā aizņem vienu reizi.
  4. Pieraksti katrai, cik reižu nedēļā tu to dari.
  5. Izrēķini katrai kopējo laiku nedēļā.
  6. Pasvītro to darbību, kas aizņem visvairāk laika.

Gatavs, kad: failā ir trīs darbības ar skaitļiem, un viena no tām ir atzīmēta kā laikietilpīgākā.

2. uzdevums -

Uzraksti 'pirms un pēc' salīdzinājumu

Beigās tu skaidri redzēsi, ko tieši automatizācija uzlabotu.

  1. Izvēlies pasvītroto darbību no 1. uzdevuma.
  2. Uzraksti sadaļu PIRMS un tajā soli pa solim, kā tu to dari tagad.
  3. Pieraksti, kurā solī visbiežāk rodas kļūda.
  4. Uzraksti sadaļu PĒC un tajā, kā tas notiktu ar programmu.
  5. Pieraksti, cik soļu paliktu cilvēkam.
  6. Salīdzini abus sarakstus un pieraksti ietaupīto soļu skaitu.

Gatavs, kad: abās sadaļās ir numurēti soļi, un PĒC sarakstā cilvēkam paliek mazāk soļu nekā PIRMS.

3. uzdevums -

Noformē problēmas ziņojumu

Beigās tev būs viens teikums, ko var parādīt skolotājam vai komandai.

  1. Uzraksti vienu teikumu pēc formulas: kas notiek tagad, cik tas maksā laikā, kāpēc tas ir slikti.
  2. Pārbaudi, vai teikumā ir vismaz viens skaitlis.
  3. Pārbaudi, vai teikumā nav minēts risinājums - tikai problēma.
  4. Iedod teikumu klasesbiedram un palūdz to pārstāstīt saviem vārdiem.
  5. Pārraksti teikumu, ja klasesbiedrs to saprata nepareizi.
  6. Saglabā gala versiju faila augšā zem virsraksta PROBLĒMA.

Gatavs, kad: klasesbiedrs pārstāstīja tavu problēmu pareizi, un teikumā ir konkrēts skaitlis.

Papildu uzdevums - Novērtē automatizācijas ieguvumu

Ja pamatdarbs ir gatavs, izrēķini, vai automatizācija vispār ir tā vērta.

  1. Novērtē, cik stundas prasītu programmas uzrakstīšana.
  2. Izrēķini, cik laika tā ietaupītu vienā mēnesī.
  3. Izrēķini, pēc cik mēnešiem ieguldījums atmaksātos.
  4. Pieraksti secinājumu vienā teikumā.
  5. Pieraksti, vai tu joprojām gribi šo darbību automatizēt.

Gatavs, kad: tev ir konkrēts mēnešu skaits, pēc kura automatizācija sāk atmaksāties.

Koda piemērs (vāja pret spēcīgu problēmas formulējumu - grūtākā daļa)

# PROBLĒMA

## Vājš formulējums (tā raksta lielākā daļa)
Spēli ir grūti papildināt un tas aizņem daudz laika.

  Kāpēc tas ir vājš:
  - "grūti" un "daudz laika" nav skaitļi - to nevar pārbaudīt
  - nav pateikts, KAS tieši ir grūti
  - nav skaidrs, kad problēma būtu atrisināta

## Spēcīgs formulējums (tāds ir vajadzīgs)
Katras jaunas lokācijas pievienošana prasa manuāli labot 20 Python
funkcijas un aizņem ~40 minūtes. Nedēļā pievienoju 3 lokācijas, tātad
2 stundas nedēļā aiziet kopēšanai, un 4 no 10 reizēm rodas kļūda
nepareizā ID dēļ.

  Kāpēc tas ir spēcīgs:
  - ir skaitļi: 20 funkcijas, 40 minūtes, 2 stundas, 4 no 10
  - ir nosaukta konkrēta darbība: lokācijas pievienošana
  - NAV minēts risinājums - tikai problēma

## Ārpus formulējuma (šeit to NErakstām)
Uztaisīšu CSV failu un ielasīšu ar csv.DictReader.   <-- tas ir risinājums
Spēcīgais formulējums ļauj vēlāk pārbaudīt, vai problēma tiešām atrisināta: ja pēc automatizācijas lokācijas pievienošana aizņem 2 minūtes, nevis 40, mērķis ir sasniegts. Vājo formulējumu pārbaudīt nevar, tāpēc nekad nav skaidrs, kad apstāties.