Problem solving

L’argomento di que­sta lezio­ne è il pro­blem sol­ving. Argomento vasto, dire­te voi. Vero. E’ un ter­mi­ne così gene­ri­co che non pos­sia­mo cer­to asso­ciar­lo alla sola infor­ma­ti­ca. Sicuramente i mate­ma­ti­ci e i fisi­ci han­no usa­to que­sto ter­mi­ne da decen­ni. Esiste un famo­sis­si­mo libro, “How to sol­ve it” di George Pólya, che descri­ve una serie di meto­di per risol­ve­re pro­ble­mi mate­ma­ti­ci. Date un’oc­chia­ta alla pagi­na Wikipedia dedi­ca­ta al libro.

Nel cam­po infor­ma­ti­co, quan­do si fa rife­ri­men­to al pro­blem sol­ving si fa spes­so rife­ri­men­to al con­cet­to di ste­p­wi­se refi­ne­ment, che è sta­to pro­mos­so da Wirth in un famo­so articolo:

E’ tal­men­te un clas­si­co che non si può non cono­scer­lo. Purtroppo, que­sto arti­co­lo è più vec­chio di me (di tre mesi) e si vede, per quan­to riguar­da lo sti­le.  Vi chie­do quin­di di dare un’oc­chia­ta alme­no all’in­tro­du­zio­ne. Se poi vole­te, lo affron­te­re­te con cal­ma più avan­ti. Alternativamente, esplo­ra­te il web cer­can­do “ste­p­wi­se refi­ne­ment” per cer­ca­re di capi­re come que­sta tec­ni­ca vie­ne descritta.

In segui­to all’ar­ti­co­lo di Wirth, gran par­te dei libri di testo che affron­ta­no la pro­gram­ma­zio­ne par­la­no di que­sta tec­ni­ca, maga­ri citan­do­la come “approc­cio top-down”, spes­so pro­po­nen­do esem­pi del­la sua appli­ca­zio­ne. Elliot Soloway però muo­ve una cri­ti­ca mol­to giu­sta a que­sto approc­cio indut­ti­vo, pro­muo­ven­do poi la sua visio­ne basa­ta su pro­gram­ming plans che abbia­mo visto par­lan­do di ruo­lo del­le varia­bi­li e pro­gram­ming pattern.

Leggete la par­te evi­den­zia­ta in gial­lo (cri­ti­ca) e la par­te evi­den­zia­ta in rosa (pro­po­sta). Se poi vole­te, affron­ta­te con cal­ma l’in­te­ro arti­co­lo per rive­de­re i con­cet­ti del­la lezio­ne precedente.

C’è chi ha pro­va­to a “but­ta­re giù” alcu­ne rego­le, simi­li a quel­le di Polya, per affron­ta­re la riso­lu­zio­ne di pro­ble­mi in ambi­to informatico:

A que­sto pun­to, vi chie­do di riflet­te­re sul vostro pro­ces­so di riso­lu­zio­ne di pro­ble­mi di pro­gram­ma­zio­ne. Non sto par­lan­do di pro­gram­mi com­ples­si (del­la dimen­sio­ne dei nostri pro­get­ti dei cor­si), ma sem­pli­ci task che pos­so­no esse­re pro­po­sti agli studenti.

Come esem­pio, vi pro­pon­go una serie di pro­ble­mi che si tro­va­no in libri di testo per Licei Scientifici — Scienze Applicate:

  • Sceglietene uno
  • Rallentate un atti­mo” e pro­va­te a risol­ver­lo non di get­to, ma cer­can­do di uti­liz­za­re tec­ni­che di ste­p­wi­se refi­ne­ment; con­fron­ta­te­vi con le doman­de di Vasconcelos.
  • Provate a a riflet­te­re come pre­sen­te­re­ste il pro­ble­ma agli studenti

Qui la lista di problemi:

  • Scrivere un algo­rit­mo per stam­pa­re n righe del trian­go­lo di tartaglia
  • Scrivere un algo­rit­mo per deter­mi­na­re se un nume­ro n è per­fet­to (è ugua­le alla som­ma dei suoi divisori)
  • Scrivere un algo­rit­mo che tra­sfor­ma un nume­ro deci­ma­le  n nei sui equi­va­len­te in bina­rio, esa­de­ci­ma­le, ottale
  • Scrivere un algo­rit­mo che stam­pa tut­ti i nume­ri che com­pa­io­no più di una vol­ta in un vet­to­re pre­so in input

Dai nostri stu­den­ti matematici/fisici, sarei inte­res­sa­to ad ave­re una discus­sio­ne su come vie­ne affron­ta­to l’ar­go­men­to pro­blem sol­ving nei loro ambiti.

Se avete tempo

Oltre al mate­ria­le pre­sen­ta­to, un arti­co­lo che affron­ta il pro­blem sol­ving da un pun­to di vista più gene­ra­le è il seguente:

Materiale lezione

  • Slide pre­sen­ta­te duran­te la lezio­ne [Link]
  • 2020: Durante la lezio­ne, Luca Zanini ci ha rias­sun­to una sezio­ne sul pro­blem sol­ving in mate­ma­ti­ca estrat­to da que­sto libro:
Scroll to top