3 Credits A study of programming in a wide variety of programming languages and paradigms. Paradigms include: imperative/procedural, object-oriented, functional, logic, and scripting. A focus is placed on obtaining proficiency in many languages. A second focus is on understanding language theory, design choices, and implementation.