CS 342 Lecture -*- Outline -*- * Introduction ** Who's teaching and learning? My name, etc. Handouts, pass around sheet to get names ** Red Tape (see handout) *** TA info. *** Course texts. don't have to buy the recommended text reserve materials at library *** Grading. Problem set collaboration (vs. last term) Late policy this is a hard course! (last year gave our several Cs and Ds) many assignments like English essays, more than one right ans. look your work over critically will give special mention to particularly good solutions *** Format of lectures discussion of previous stuff (quiz), lecture please ask questions, come prepared *** Recitations important so have more communication with us ** What is a programming language? Formal language capable of expressing any computation. Examples: Pascal, Ada, Prolog, Smalltalk, machine language. even: Lotus 1-2-3.... ** Course specification *** Prerequisites what was learned in CS 330, CS 361? *** Description *** Objectives (basis for tests) ** Why study programming languages? First: Why study computer science? design? (Why is this course required? Why is it part of the ACM cirriculum?) *** design (creative part of programming) *** user interfaces (often hardest part of design) important, but least analytical tools Programming languages are the ultimate user interface. The Turing tarpit: all languages are equally powerful. New to compare "expressive power." designing new interface is hard *** programming is central to CS. ==> paradigms important Languages can help or hinder various tasks/pardigms (Sapir-Worf) Example: list processing and LISP. Example: Pascal and top-down design. Often need a programming system to support a paradigm (such as design with data abstractions). Systems include libraries, debuggers (discussed in recitation). *** Subsidiary goals **** evaluation of designs (cycle: design, formalize, use, evaluate). importance of being critical, judging good from bad: expressiveness, economy, aesthetics. costs and benefits, tradeoffs evaluation summarized by measurements (efficiency) but often using abstract concepts (principles) Principles are first attempt to codify "good judgement" sense of judgement is what's important Summaries of design experience. can help avoid mistakes. Not much help in actual design, rather in evaluation **** Why study specific languages? Concreteness. Develop your judgment, sense of history, taste. **** Why study run-time implementation techniques? Know costs (programming time, execution time, space). Can simulate if not present (in a language or implementation). ** Course outline (summarize plan of course) Give motivation for each language/concept.