designing and writing algorithms