CSE 341: Programming Languages
This document gives the high-level preconditions and postconditions for
341, as ordained by the Department (in other words, what you're supposed to
know before you take the course, and what you should know afterwards).
Purpose:
Teach basic concepts of programming languages. Study
non-imperative programming paradigms.
Precondition Concepts:
- abstraction
- modularity, encapsulation, information hiding
- interface vs. implementation
- user-defined data types
- pointers and dynamic data
- static allocation vs. stack allocation vs. heap allocation
- dynamic memory management
- allocation, deallocation, dangling pointers, storage
- recursion
- basics of types
Precondition Abilities:
- design and implement medium-sized programs (up to about 1000 lines),
consisting of several (4-12) modules
- understand and extend medium-sized (500+ lines) programs
Precondition Skills:
- familiarity with NT
- experience with C++
Postcondition Concepts
- general programming language issues
- design principles (readability, orthogonality, etc.)
- compiled vs. interpreted languages
- language and environment interaction
- lexical (static) vs. dynamic scoping
- memory models (static, stack, heap storage)
- type systems
- strong typing vs. weak typing
- dynamic vs. static typing
- conversion and coercion
- name vs. structural equivalence
- type inference
- polymorphism and overloading
- control, data and function abstraction
- parameter passing mechanisms (call by reference, call by value,
call by value-result,call by name)
- aliasing
- exception handling
- fundamentals of functional programming
- aggressive use of recursion
- higher-order functions (functions as values)
- referential transparency
- lazy vs. eager evaluation
- fundamentals of object-oriented programming
- messages vs. methods
- classes vs. objects
- object creation
- inheritance
- instance vs. class variables
- multiple inheritance
- prototype- vs. class-based languages
- single vs. multiple dispatching
- fundamentals of symbolic programming (e.g., Lisp, Prolog)
Postcondition Abilities
- write medium-sized applications in the selected languages
- learn new languages more quickly than before
- effectively use a rich programming environment