ElementsofProgrammingprovidesadifferentunderstandingofprogrammingthanispresentedelsewhere.Itsmajorpremiseisthatpracticalprogramming,likeotherareasofscienceandengineering,mustbebasedonasolidmathematicalfoundation.Thebookshowsthatalgorithmsimplementedinarealprogramminglanguage,suchasC++,canoperateinthemostgeneralmathematicalsetting.Forexample,thefastexponentiationalgorithmisdefinedtoworkwithanyassociativeoperation.Usingabstractalgorithmsleadstoefficient,reliable,secure,andeconomicalsoftware.Thisisnotaneasybook.Norisitacompilationoftipsandtricksforincrementalimprovementsinyourprogrammingskills.Thebook’svalueismorefundamentaland,ultimately,morecriticalforinsightintoprogramming.Tobenefitfully,youwillneedtoworkthroughitfrombeginningtoend,readingthecode,provingthelemmas,anddoingtheexercises.Whenfinished,youwillseehowtheapplicationofthedeductivemethodtoyourprogramsassuresthatyoursystem’ssoftwarecomponentswillworktogetherandbehaveastheymust.Thebookpresentsanumberofalgorithmsandrequirementsfortypesonwhichtheyaredefined.Thecodeforthesedescriptions—alsoavailableontheWeb—iswritteninasmallsubsetofC++meanttobeaccessibletoanyexperiencedprogrammer.ThissubsetisdefinedinaspeciallanguageappendixcoauthoredbySeanParentandBjarneStroustrup.Whetheryouareasoftwaredeveloper,oranyotherprofessionalforwhomprogrammingisanimportantactivity,oracommittedstudent,youwillcometounderstandwhatthebook’sexperiencedauthorshavebeenteachinganddemonstratingforyears—thatmathematicsisgoodforprogramming,andthattheoryisgoodforpractice.
1