At the end of this course, students will be able to:
1. Understand the concepts of programing languages, and understand the different programming language paradigms.
2. Differentiate various programming language paradigms.
3. Understand and apply a language from a suitable programming language paradigm for a given problem.
4. Understand the executions of programs from different programming language paradigms, and predicting the quality of programs implemented by using different paradigms.
5. Check the syntax and semantical correctness of a program written in different programming languages.
6. Remember and use various programming language concepts.
7. Critique different programming languages for the same computational problem.
8. Interpret a computational problem specification and implement a solution in a programming language to solve that problem
9. Construct new data types, abstractions, encapsulations in various languages.
10. Modify an existing program to solve a similar but different problem.
11. Design a modular solution to a problem by decomposing it into smaller sub-problems.