CSE 341 -- Why?

Besides a good introduction to a number of novel programming paradigms, CSE 341 intends to introduce you to a number of important concepts related to programming language design.

What follows is a whirlwind tour of some of the concepts/topics we'll touch on throughout the quarter.

Control Abstractions

By the end of the course you should be comfortable with most of the following vocabulary.
Primitives
If, case, while, for, etc.
Procedural Abstraction
A group of statements that acts like a single statement
Functional Abstraction
Code that acts like an expression
Recursion
Functions that call themselves.
Parameter passing techniques
Call-by: value, result, value-result, reference, name. More here.
Higher order functions
Functions as first-class citizens: functions as data which can be dynamically created, passed around, invoked
Message dispatch in object oriented languages
Function call == selecting proper code to invoke based upon class of receiver(s)
Others
Parallelism, exceptions, iterators, concurrency

Data Abstractions

Primitives
User defined data types (ADTs)
Objects

Memory organization

Static, stacks, heaps, garbage collection. More here.

Types

Scoping

Static (lexical) vs. dynamic scoping. More here.