4.3.1 Programming paradigms