L'eminente scienziato informatico Leslie Lamport, vincitore del Premio Turing 2013, parlando al dialogo tenuto in concomitanza con il SMU-Global Young Scientists Summit 2020. Credito:Rebecca Tan
Hai mai seguito una ricetta per fare il pane? Se hai, Congratulazioni; hai eseguito un algoritmo. Gli algoritmi che ci seguono su Internet per suggerire elementi che potrebbero piacerci, e quelli che controllano ciò che appare nei nostri feed di Facebook possono sembrare misteriosi e inquietanti a volte. Ancora, un algoritmo è semplicemente un insieme di istruzioni da completare in una sequenza specificata, sia da panettieri umani che da programmi per computer.
La differenza, però, sta nel modo in cui l'algoritmo è espresso. Le ricette sono scritte in inglese o in altre lingue parlate mentre i programmi per computer sono scritti in linguaggi di programmazione o codice. Secondo Leslie Lamport, vincitore del Premio Turing 2013, pensare matematicamente può essere un passaggio utile per specificare l'algoritmo per i programmi per computer, in quanto può aiutare i programmatori a chiarire il loro pensiero e rendere i programmi più efficienti.
"La maggior parte dei programmatori inizia a scrivere codice; non sanno nemmeno quale sia l'algoritmo. È come iniziare a costruire senza un progetto, " ha detto il dottor Lamport, parlando a un dialogo esclusivo presso la Singapore Management University (SMU) il 14 gennaio 2020, tenutosi in concomitanza con il Summit SMU-Global Young Scientists 2020.
"E il risultato? Il programma è difficile da eseguire il debug e inefficiente perché si cercherebbe di ottimizzare a livello di codice piuttosto che a livello di algoritmo. Dovremmo fare ciò che fa quasi ogni altro campo della scienza e dell'ingegneria:inizialmente descrivere il problema con matematica invece."
Perché la matematica è meglio del codice?
Utilizzando l'algoritmo di Euclide come esempio, Il Dr. Lampport ha illustrato al pubblico come un algoritmo può essere espresso in modo preciso ma semplice con la matematica. Descritto dall'antico matematico greco Euclide nel 300 a.C., L'algoritmo di Euclide è un metodo per identificare il massimo comun divisore (MCD) di due numeri, questo è, il numero più grande che può dividere i due numeri senza lasciare resto. Per esempio, il MCD dei numeri 15 e 12 è 3.
Il metodo è semplice:sottrai il numero minore dal numero maggiore, quindi ripeti questo fino a quando entrambi i numeri sono gli stessi; il numero risultante è il GCD. L'intera procedura può essere descritta in un'unica formula matematica, disse il dottor Lamport, che è riconosciuto per lo sviluppo del formato di file LaTex ampiamente utilizzato, oltre al suo lavoro pionieristico sui sistemi informatici distribuiti.
In contrasto, scrivere l'algoritmo di Euclide nel codice è più lungo e macchinoso, e quindi più difficile da eseguire il debug se non funziona correttamente. "Il programma di Euclide dovrebbe contenere molti dettagli di livello inferiore, come quello che dovresti fare se uno dei due numeri è minore o uguale a zero, "Ha detto il dottor Lamport. "Dovresti decidere che se stai scrivendo un programma per computer, ma non è un problema dell'algoritmo".
Quanto sarebbe più efficiente usare la matematica invece del codice? Quando gli ingegneri usavano TLA+, un linguaggio di specifica formale di alto livello basato sulla matematica sviluppato dal Dr. Lampport per modellare, documentare e verificare i sistemi informatici concorrenti, sono stati in grado di ridurre drasticamente le dimensioni di un sistema operativo originariamente utilizzato per controllare alcuni esperimenti sulla navicella spaziale Rosetta. "Uno dei risultati della specifica della logica del software con TLA+ è stato che la dimensione del codice è stata ridotta a circa dieci volte inferiore rispetto all'originale, "Il dottor Lamport ha detto. "Non si riduce la dimensione del codice di dieci volte con una migliore codifica; lo fai con un'architettura più pulita, che è solo un'altra parola per un algoritmo migliore."
Oltre ad essere più efficiente, adottare un approccio matematico ha l'ulteriore vantaggio di rendere più semplice il debug. Gli ingegneri di Amazon Web Services e Microsoft Azure utilizzano TLA+ per i loro servizi cloud, Il dottor Lamport ha detto, e attraverso di essa hanno trovato bug nei loro progetti di sistema che non potevano essere trovati con nessun'altra tecnica.
Mettiti a tuo agio con la matematica
Sebbene la matematica sia potente ed elegante quando si tratta di descrivere algoritmi, molte persone, inclusi programmatori di computer e ingegneri, ne sono intimiditi e evitano di usarlo. "Alcuni studenti ci hanno chiesto quando possono smettere di fare e rivedere la matematica e iniziare la programmazione del software, " ha detto il professor Steven Miller, Vice Rettore (Ricerca) presso SMU e già Direttore Fondatore della Scuola di Sistemi Informativi.
Il dottor Lamport crede che abituarsi a "parlare" in matematica sia una questione di esposizione. "Perché 'due più due fa quattro' è considerato semplice ma un'operazione logica come 'un elemento di' è difficile da capire per la maggior parte delle persone? Operazioni logiche come "elemento di" significa semplicemente che qualcosa fa parte di un mucchio di altre cose Questo concetto non richiede che tu impari cose complicate come contare, poiché il conteggio è in realtà piuttosto complicato, " Egli ha detto.
"Perché 'elemento di' dovrebbe sembrare spaventoso quando 'più' sembra così facile? È solo questione di non conoscerlo, e non è tutta colpa tua:i matematici sono terribili nell'insegnarlo."
Per il dottor Lamport, diventare fluenti in matematica è il primo passo, ma affinché il pensiero matematico influisca veramente sul modo in cui gli algoritmi sono scritti, deve cambiare il nostro modo di pensare. "Voglio sottolineare che la matematica non risolve il problema per te; devi risolvere il problema, " ha detto. "Pensare matematicamente ti aiuterà a risolvere il problema; e la matematica aiuta a garantire che la soluzione fosse giusta."