170 likes | 176 Views
This article explores a variety of approaches to teaching the programming languages course, including an emphasis on formal notations and specifications, historical perspectives, paradigms, and reductionist approaches. It also highlights the importance of learning multiple languages and provides resources for further study.
E N D
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
Computing Curricula 2001Computer 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 From Computing Curriculum 2001
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
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