Myślenie komputacyjne — jak ugryźć problem

Wstęp do działu

Zanim napiszesz pierwszą linijkę kodu, musisz umieć coś znacznie rzadszego niż programowanie: precyzyjnie powiedzieć, czego właściwie chcesz. Komputer jest genialnym wykonawcą i beznadziejnym zgadywaczem. Zrobi dokładnie to, co każesz — i ani odrobiny tego, co „miałeś na myśli". Dlatego informatyka zaczyna się nie od klawiatury, tylko od sposobu myślenia: jak z mglistego „chciałbym…" zrobić problem opisany tak ostro, że rozwiąże go maszyna bez krzty wyobraźni.

Ten sposób myślenia ma nazwę: myślenie komputacyjne. Wbrew nazwie nie jest o komputerach — jest o problemach. Używają go inżynierowie planujący most, lekarze układający procedurę reanimacji i logistycy pakujący ciężarówki. Komputer jest tylko najwierniejszym testerem: jeśli Twój przepis ma lukę, maszyna w nią wpadnie za każdym razem.

W tym dziale nauczysz się patrzeć na problemy jak informatyk: określać dane i wynik, układać przepis, który nie zostawia wątpliwości, zapisywać go na trzy sposoby, ciąć wielkie problemy na małe i porównywać przepisy między sobą. Wszystko, co przyjdzie później — pętle, sortowania, fraktale, bazy danych — stoi na tym fundamencie.

Mapa pojęć działu

                    MYŚLENIE KOMPUTACYJNE
                            |
     ┌──────────────┬───────┴───────┬────────────────┐
  problem        algorytm       trzy zapisy       dekompozycja
 (dane, wynik,  (przepis bez    lista kroków ·   (tnij na pod-
  warunki =     wątpliwości:    schemat blokowy   problemy;
  SPECYFIKACJA)  skończony,     · pseudokod       połowienie,
                 jednoznaczny)                     zachłanność,
                            |                      rekurencja)
                 PORÓWNYWANIE ALGORYTMÓW
                 (liczba kroków; ten sam wynik,
                  różna cena)

Jednostki w tym dziale

  • 1.1 Co to znaczy „rozwiązać problem" — specyfikacja i etapy myślenia komputacyjnego
  • 1.2 Algorytm — przepis, który nie zostawia wątpliwości
  • 1.3 Trzy języki algorytmów — lista kroków, schemat blokowy, pseudokod
  • 1.4 Dziel problem na kawałki — dekompozycja i trzy wielkie pomysły
  • 1.5 Który przepis lepszy? — pierwsze porównywanie algorytmów
  • 1.6 Strategie ataku — wstępująca, zstępująca, abstrakcja, heurystyka (rozszerzenie)