6. května 2006

Jak učit programování

Na svém novém blogu Guy Peters napsal:

Řekl bych, že účelem výuky programování není naučit triviální úlohy typu třídění seznamu apod.

Smím-li parafrásovat G. B. Shawa, kdo umí, umí, kdo neumí, učí, a kdo neumí učit, stane se didaktickým methodikem...

Účelem výuky programování je naučit studenta dvěma věcem: 1. algorithmickému myšlení a 2. abstraktní počítačové representaci datových struktur. Třetím, méně podstatným aspektem výuky programování, je vysvětlit adeptu zásady strukturovaného programování.

Každý obor lidského poznání má určitý základ, bez něhož lze sice dospět k pozoruhodným vědeckým výsledkům, ale s pravděpodobností asi tak 999:1 bude výsledkem pozoruhodně desorientovaný diletant neboli totální mimoň.

Knuthův Pascal je praktický prostředek, jak lze tomuto základu naučit a při výuce přitom abstrahovat od všeho, co je implementačně závislé nebo irelevantní. V tom - a jen v tom - je Pascal dokonalý. Naučit se for i:=1 to n do begin ... end; je pro člověka, který základ zatím nemá, principiálně daleko jednodušší než pochopit *p++, což je fakticky jen zkratka a těsnopisný zápis často opakovaného triviálního úkonu, a jazyk C/C++ je jen geniální systém takových zkratek.

Na druhé straně nemůže být hlubšího omylu, než že se lze stát programátorem bez tohoto základu. Implementace grafu stromem, třídění seznamu methodou QuickSort nebo řešení šachových problémů pomocí backtrackingu jsou osvědčené učební úlohy, které usnadňují pochopení myšlenkových základů tohoto fascinující oboru lidského poznání.

Nevěřím, že umělou inteligenci naprogramuje někdo, kdo se nenaučil programovat v Pascalu.

3 komentáře:

  1. Nenaučil jste se programovat. Naučil jste se psát programy v C++, to je rozdíl.

    OdpovědětVymazat
  2. Pascal se na praktické programování nehodí, přestože díky zdařilé implementaci společností Borland se dodnes používá.

    OdpovědětVymazat
  3. To je zásadní nepochopení toho, k čemu je Pascal určen (bohužel, velmi rozšířené - Borland Pascalu poskytl medvědí službu).

    Pascal vůbec nepotřebuje I/O (k čemu?), o packed arrays nemluvě, a pokud jde rekursivní funkce, je dobré naučit se jejich princip, i když v praxi používány zřejmě nebudou a identickou funkcionalitu bude programátor implementovat jiným způsobem.

    Ve zbytku souhlasím.

    Mimochodem, české učebnice neznám, Pascal jsem se kdysi učil z Knutha a C/C++ z Kernighana & Ritchieho.

    OdpovědětVymazat

Kursiva: <i></i>
Tučné písmo: <b></b>
Uvozovky: „“
Odkaz: <a href = ""></a>