Notes
Outline
Approaches to Teaching the Programming Languages Course
A Potpourri
Potpourri
A combination of incongruous things: “In the minds of many, the real and imagined causes for Russia's defeats quickly mingled into a potpourri of terrible fears” (W. Bruce Lincoln).
A miscellaneous anthology or collection: a potpourri of short stories and humorous verse.
A mixture of dried flower petals and spices used to scent the air.

AND
[French pot pourri(translation of Spanish olla podrida) : pot, pot; see potiche + pourri, past participle of pourrir, to rot (from Old French purir, from Vulgar Latin *putr re, from Latin putr scere. See putrid).]
http://dictionary.reference.com/browse/potpourri
Panelists (alphabetically)

Computing Curricula 2001
Computer Science
http://acm.org/education/curric_vols/cc2001.pdf
Why this panel?
Important course
Somewhat slighted in Computing Curricula 2001
Variety of approaches to teaching it
Emphasis on formal notations and specifications
Affected by object oriented beginnings
Focus on historical perspective
Paradigms
Features
Reductionist approach
PL. Programming Languages (21 core hours)
PL1. Overview of programming languages (2)
PL2. Virtual machines (1)
PL3. Introduction to language translation (2)
PL4. Declarations and types (3)
PL5. Abstraction mechanisms (3)
PL6. Object-oriented programming (10)
PL7. Functional programming
PL8. Language translation systems
PL9. Type systems
PL10. Programming language semantics
PL11. Programming language design
From Computing Curriculum 2001
Programming Languages (PL)
PL1. Overview of programming languages [core]
PL2. Virtual machines [core]
PL3. Introduction to language translation [core]
PL4. Declarations and types [core]
PL5. Abstraction mechanisms [core]
PL6. Object-oriented programming [core]
PL7. Functional programming [elective]
PL8. Language translation systems [elective]
PL9. Type systems [elective]
PL10. Programming language semantics [elective]
PL11. Programming language design [elective]
From Computing Curriculum 2001
Figure 9-1. Advanced courses by area
CS340. Compiler Construction
CS341. Programming Language Design
CS342. Programming Language Semantics
CS343. Programming Paradigms
CS344. Functional Programming
CS345. Logic Programming
CS346. Scripting Language
Why it’s important
“Languages shape the way you think”
Familiarity with a variety of languages makes it possible to select the best one for solving a particular problem
Languages have common elements
Such as data structures, control structures and identifying these elements is worthwhile
Learning many languages makes it easier to learn new ones
And there’s always a new one to master
Class Languages
Everyone in the class
FORTRAN IV
Pascal or Ada
Lisp or Scheme
Prolog
Alice
Project Languages
BURKS
Web
Selected languages:
ABC, Algol, APL,AWK, Beta, C, Eiffel, Euphoria, Haskell, Icon, ML, Modula2, Oberon, Perl,PHP, PL/I, Python, Rebol, REXX, Ruby, SETL,Smalltalk, Snobol4, Titanium,
Useful Links
Dictionary of Programming Languages http://cgibin.erols.com/ziring/cgi-bin/cep/cep.pl
Programming Languages http://www.cs.waikato.ac.nz/~marku/languages.html
“The Open Directory Project is the largest, most comprehensive human-edited directory of the Web. It is constructed and maintained by a vast, global community of volunteer editors. “ http://www.dmoz.org/Computers/Programming/Languages/
And …
Fun course to teach
Biggest problems
Not enough time
Too much to choose from
Biggest hooray
 former students’ comments
Slide 14
Figure 7-2. Units covered by all six of the introductory tracks
Units for which all topics must be covered:
DS1. Functions, relations, and sets
DS2. Basic logic
DS4. Basics of counting
DS6. Discrete probability
PF1. Fundamental programming constructs
PF4. Recursion
PL1. Overview of programming languages
PL4. Declarations and types
PL2. Virtual machines
PL5. Abstraction mechanisms
SP1. History of computing

Units for which only a subset of the topics must be covered:
DS3. Proof techniques: The structure of formal proofs; proof techniques: direct, counterexample, contraposition, contradiction; mathematical induction
PF2. Algorithms and problem-solving: Problem-solving strategies; the role of algorithms in the problem-solving process; the concept and properties of algorithms; debugging strategies
PF3. Fundamental data structures: Primitive types; arrays; records; strings and string processing; data representation in memory; static, stack, and heap allocation; runtime storage management; pointers and references; linked structures
AL1. Basic algorithmic analysis: Big O notation; standard complexity classes; empirical measurements of performance; time and space tradeoffs in algorithms
AL3. Fundamental computing algorithms: Simple numerical algorithms; sequential and binary search algorithms; quadratic and O(N log N) sorting algorithms; hashing; binary search trees
AR1. Digital logic and digital systems: Logic gates; logic expressions
PL6. Object-oriented programming: Object-oriented design; encapsulation and informationhiding; separation of behavior and implementation; classes, subclasses, and inheritance; polymorphism; class hierarchies
SE1. Software design: Fundamental design concepts and principles; object-oriented analysis and design; design for reuse
SE2. Using APIs: API programming; class browsers and related tools; programming by example; debugging in the API environment
SE3. Software tools and environments: Programming environments; testing tools
SE5. Software requirements and specifications: Importance of specification in the software process
SE6. Software validation: Testing fundamentals; test case generation
Computing environments