The objective is to learn various prevalent programming paradigms, and to compare them in the context of various algorithmic implementations. The students would learn the fundamentals of each paradigm and how a difference in the paradigms affects programs. Outcomes: 1. Choose an appropriate paradigm for a given problem. 2. Solve a problem in multiple paradigms. 3. Learn nuances of functional and logic style programming.