The Principal Programming Paradigms