2.2 Programming techniques