either define concepts or set of objectives put some effort into some kind of summarizing statement that is a position intended more as notes for someone to write a well crafted document to have impact outside of this group, its important to keep this in mind that everyone involved is not all from top universities what all undergraduates should know shriram's suggestion 2 roles: expose students to things that they don't get elsewhere in the curriculum other is the deep concepts we've talked about herein problem is that if there is no PL person on the faculty that can teach the elective From group A features vs concepts reflection: understanding the underlying architecture of an implementation - Bryan Smith (interpreter that can understand its insides) if we focus on what all undergraduates to have outcomes/objectives/competencies non-PL core course: programs of data if we focus on PL concepts (abstract concepts) we need some layering modularity/interfaces information hiding data abstraction different runtime models: call stacks/frames, address arithmetic, memory model, organization, malloc class hierarchies, objects and classes programming with state higher order functions persistent and ephemeral data structrues mutation/linked lists/ purely functional data structures understanding why your code is correct invariance, abstract types, invariant governs a data struture and operations assume/guarantee it concurrency/parallelism sync primitives, CML data vs task parallelism control, state, naming exceptations, objects, binding/scope cost model very trendy to say it: mapreduce stateful vs statelessness is vital html -- stateless, functional programming the way webservices are built, functional load balancing tie-in with mathematics absense of state pruning have a way of writing down an abstraction concurrency and parallelism - deterministic vs nondeterministic - concurrency: composition (different outcomes) distinction between the two is what is important models of parallel computation data, task concurrency without parallelism ML argument John statelessness programming with immutable data persistent is immutable josh box programming in ML using Java syntax naming -- from outside of Pl ways of programming lay on top of way of programming can program in a purely higher order fashion streams could go under functional programming but too specific dynamic method dispatch could go under control make it dynamic dispatch -- much more general, even interpretation undergraduate PL teach it from a more formal perspective a lot more depth -- consistency across monads -- type systems modal that segregate types dynamic/static typing, binding ----------------------------------------------------------------------