Den framstående datavetaren Leslie Lamport, vinnare av 2013 års Turing Award, talar vid dialogen som hölls i samband med SMU-Global Young Scientists Summit 2020. Kredit:Rebecca Tan
Har du någonsin följt ett recept för att baka bröd? Om du har, grattis; du har kört en algoritm. Algoritmerna som följer oss runt på internet för att föreslå saker vi kanske gillar, och de som styr vad som dyker upp i våra Facebook-flöden kan ibland verka mystiska och kusliga. Än, en algoritm är helt enkelt en uppsättning instruktioner som ska slutföras i en specificerad sekvens, antingen av mänskliga bagare eller datorprogram.
Skillnaden, dock, ligger i hur algoritmen uttrycks. Recept skrivs på engelska eller andra talade språk medan datorprogram skrivs i programmeringsspråk eller kod. Enligt Leslie Lamport, vinnare av 2013 års Turing Award, att tänka matematiskt kan vara ett användbart steg för att specificera algoritmen för datorprogram, eftersom det kan hjälpa programmerare att förtydliga sitt tänkande och göra programmen mer effektiva.
"De flesta programmerare börjar bara skriva kod, de vet inte ens vad algoritmen är. Det är som att börja bygga utan en ritning, sa Dr Lamport, talar vid en exklusiv dialog vid Singapore Management University (SMU) den 14 januari 2020, hölls i samband med SMU-Global Young Scientists Summit 2020.
"Och resultatet? Programmet är svårt att felsöka och ineffektivt eftersom du skulle försöka optimera på kodnivå snarare än på algoritmnivå. Vi borde göra som nästan alla andra områden inom vetenskap och teknik gör:initialt beskriva problemet med matematik istället."
Varför matematik är bättre än kod
Med Euklids algoritm som exempel, Dr Lamport ledde publiken genom hur en algoritm kan uttryckas exakt men ändå enkelt med matematik. Beskrevs av den antika grekiske matematikern Euklid år 300 f.Kr. Euklids algoritm är en metod för att identifiera den största gemensamma divisorn (GCD) av två tal, det är, det största talet som kan dela de två talen utan att lämna en rest. Till exempel, GCD för siffrorna 15 och 12 är 3.
Metoden är enkel:subtrahera det mindre talet från det större, upprepa sedan detta tills båda siffrorna är samma; det resulterande talet är GCD. Hela proceduren kan beskrivas i en enda matematisk formel, sa Dr Lamport, som är erkänd för att utveckla det flitigt använda LaTex-filformatet, utöver sitt banbrytande arbete med distribuerade datorsystem.
I kontrast, att skriva Euklids algoritm i kod är mer tidskrävande och krångligt, och därför svårare att felsöka om det inte fungerar korrekt. "Euclids program skulle behöva innehålla många detaljer på lägre nivå, som vad du ska göra om endera siffran är mindre än eller lika med noll, "Dr. Lamport sa. "Du måste bestämma det om du skriver ett datorprogram men det är inte algoritmens problem."
Hur mycket effektivare skulle det vara att använda matematik istället för kod? När ingenjörer använde TLA+, ett formellt specifikationsspråk på hög nivå baserat på matematik utvecklat av Dr. Lamport för att modellera, dokumentera och verifiera samtidiga datorsystem, de kunde dramatiskt minska storleken på ett operativsystem som ursprungligen användes för att kontrollera vissa experiment på rymdfarkosten Rosetta. "Ett av resultaten av att specificera mjukvarulogiken med TLA+ var att kodstorleken kunde reduceras till ungefär tio gånger mindre än originalet, " Dr. Lamport sa. "Du minskar inte kodstorleken tio gånger genom bättre kodning; du gör det med renare arkitektur, vilket bara är ett annat ord för en bättre algoritm."
Utöver att vara effektivare, att använda ett matematiskt tillvägagångssätt har den ytterligare fördelen att göra felsökning enklare. Amazon Web Services och Microsoft Azure-ingenjörer använder TLA+ för sina molntjänster, Dr Lamport sa, och genom det har hittat buggar i sina systemdesigner som inte kunde hittas via någon annan teknik.
Bli bekväm med matematik
Även om matematik är både kraftfullt och elegant när det gäller att beskriva algoritmer, många människor – inklusive datorprogrammerare och ingenjörer – skrämms av det och drar sig för att använda det. "Några elever har frågat oss när de kan sluta göra och granska matematiken och börja programmera, sa professor Steven Miller, Vice prost (forskning) vid SMU och tidigare grundardekanus för School of Information Systems.
Dr Lamport tror att att vänja sig vid att "tala" i matematik är en fråga om exponering. "Varför anses "två plus två lika med fyra" vara enkel men en logisk operation som "ett element av" är svår att förstå för de flesta? Logiska operationer som "element av" betyder helt enkelt att något är en del av en massa andra saker Det konceptet kräver inte att du lär dig någon komplicerad sak som att räkna, eftersom att räkna faktiskt är ganska komplicerat, " han sa.
"Varför ska "element av" verka skrämmande när "plus" verkar så lätt? Det är bara en fråga om att inte vara bekant med det, och allt detta är inte ditt eget fel - matematiker är hemska på att lära ut det."
För Dr Lamport, att bli flytande i matematik är det första steget, men för att matematiskt tänkande verkligen ska påverka hur algoritmer skrivs, det måste förändra vårt sätt att tänka. "Jag vill betona att matematik inte löser problemet för dig, du måste lösa problemet, " sade han. "Att tänka matematiskt kommer att hjälpa dig att lösa problemet; och matematik hjälper till att säkerställa att lösningen var rätt."