CSCI-C 311 Programming Languages
3-4 credits
- Prerequisite(s): CSCI-C 310, CSCI-C 343, or CSCI 36200
- Delivery: On-Campus
- Semesters offered: Spring (Check the schedule to confirm.)
Description
A systematic approach to programming languages. Relationships among languages, properties, and features of languages; and the computer environment necessary to use languages.
Extended course description
This course systematically explores programming languages, examining their core components, paradigms, and design principles. Students analyze syntax and semantics, compare language features, and evaluate how language choices influence software development. Emphasis is placed on understanding paradigms—procedural, object-oriented, functional, and logic-based—and the trade-offs in selecting a language for specific tasks.
Topics
Foundations of Programming Languages
- Reasons for studying languages
- Language evaluation criteria
- Key influences on language design
- Formal methods for describing syntax and semantics
Language Paradigms
- Imperative programming
- Functional programming (Scheme, ML, Haskell, F#)
- Logic programming (Prolog)
- Object-oriented programming (Smalltalk, C++, Java)
Syntax and Semantics
- Syntax definition (BNF, attribute grammars)
- Dynamic semantics (operational, denotational, axiomatic)
- Lexical and syntax analysis
Programming Language Constructs
- Names, bindings, and scope rules
- Data types and type systems
- Expressions and assignment statements
- Control flow mechanisms
Subprograms and Abstraction
- Subprograms and parameter passing
- Implementing subprograms
- Abstract data types and encapsulation
- Parameterized types and modules
Memory Management and Execution Models
- Stack-based and heap-based memory models
- Subprogram linkage and activation records
- Concurrency models (threads, message passing, synchronization)
Advanced Language Features
- Exception handling and event-driven programming
- Reflection and dynamic language features
- Optional types and type safety
Practical Perspectives
- Evolution of major programming languages
- Trade-offs in language design and selection
- Comparison of real-world language support for features
Learning Outcomes
- Explain the primary components and features inherent to any programming language. CS 2
- Classify programming languages based on their paradigms, such as procedural, object-oriented, functional, and logic-based. CS 2
- Compare several programming languages based on criteria like expressiveness, efficiency, readability, and writability, and analyze the trade-offs of using one language vs. another for specific tasks or domains. CS 2
- Distinguish between the syntax and semantics of a programming language. CS 2
- Construct formal definitions for the syntax of a programming language using grammars and other syntactical notations. CS 2
- Define a programming language's denotational and operational semantics, and explain their significance in language design and interpretation. CS 2
- Assess how a programming language's design influences its ease of use, maintainability, and portability. CS 2
- Evaluate how different programming languages shape problem-solving approaches and software architecture decisions. CS 2
Policies and Procedures
Please be aware of the following linked policies and procedures. Note that in individual courses instructors will have stipulations specific to their course.