2.2.1 Programming techniques