meeting -*- Outline -*- needed: EOPL 2e, The Little Schemer, and SICP 2e! tell them to read the forward and the preface of SICP, (note: SICP is on-line) and to start reading the Little Schemer, chapters 1-4 * The course itself ** What is a programming language? ------------------------------------------ PROGRAMMING LANGUAGE def: a *programming language* is a language that is def: a *general-purpose langauge* is one that is not tailored to some particular application area. Examples: def: an *special-purpose language* is a language that is designed to support some particular application. Examples: ----------------------------------------- ... capable of expressing all computations For example, Scheme and C++ are programming languages. Q: Others? AspectJ, Ruby, Python, Java, Ada, PL/I, BASIC, COBOL, Pascal, SNOBOL, Icon, Algol W, Algol 60, Algol 68, C, Haskall, Edison, ... (literally thousands) But the techniques we'll study aren't just limited to general-purpose programming langauges. These don't have to be able to compute all computable functions. examples: Lotus 1-2-3 macros, the MFC class library, MUMPS, JavaScript, VBA, Cold Fusion Q: Others? Formal languages are also used in a variety of settings: music, knitting, mathematics, engineering, ... ** Overview ------------------------------------------ THE COURSE IN A NUTSHELL The journey to the mountain: functional programming techniques The mountain climb: using functional techniques to write interpreters Our equipment: Scheme, a Lisp dialect Our guides: the textbook authors ------------------------------------------ ** history tell how this course came about (briefly) how I come to it ** objectives In one sentence, the main objective is that you will have - a deep, working knowledge of the functional paradigm, and - the key ideas used in modern programming languages. ------------------------------------------ Com S 342 ESSENTIAL OBJECTIVES You should be able to: 1. Write and modify programs in functional style 2. Make effective use of data abstraction 3. Change or enhance interpreters to have features such as: - control flow, - variables, - recursion, - scoping, - syntactic sugars, - arrays, - parameter passing mechanisms, - type checking, - objects, and inheritance 4. Write programs using such features and explain their behavior 5. Explain the data structures and algorithms used in interpreters. 6. Compare alternatives in design and implementation. ------------------------------------------ these are the essential ideas in PLs. Q: what is functional style? use functions as arguments etc. to help modularize your code Why these objectives? - help you think about good ways to program, abstraction mechanisms - (see below for functional style) - data abstraction is key to making programs easily modifiable - learn new languages quickly mapping ideas from this class to the language - read/write language reference manual - help you program more effectively - most programs evolve into languages, or have language parts ------------------------------------------ REASONS FOR USING FUNCTIONAL STYLE - Makes certain programs clearer - can see all inputs eval(exp, env) - functions as arguments helps in: abstraction modularization - gives you more ways to solve problems - ideas important for: - algorithm design - specification - describing programming languages - web services - it's interesting and fun ------------------------------------------ ** skills ------------------------------------------ SKILLS WE TEACH IN 342 + functional abstraction techniques + data abstraction + how to build interpreters + meta-linguistic abstraction ------------------------------------------ explain that meta-linguistic abstraction is building a new language to help you solve your problems, OOP is like that. Can consider doing this in Scheme to be supporting objectives because of the book, mostly but Scheme is well suited to task Why? - polymorphic (no type limitations) - matches semantic formalism (lambda calculus) pure theory of functions, core of PLs - programs similar to data - part of the material for a course like this is to learn ways to program ** syllabus *** when note how the above connects with the meetings the class, and chapters of the book we'll try to go fast up to chapter 3, then take however much time needed *** prerequisites We intend to enforce the formal prerequisites as best we can, if you don't have these, drop this course. ------------------------------------------ PREREQUISITES Com S 321 Engl 104 Com S 330 or Cpr E 310 Com S 309 or Com S 361 or Com S 363 ------------------------------------------ Q: In what course do you learn about the halting problem? Q: Context-free grammars? Data abstraction? Q: Machine representation of data? The run-time stack? Q: Recursion? *** what work is involved think of this as like a math course, frequent problems to do, we go fast ------------------------------------------ ESTIMATED TIME NEEDED FOR HOMEWORK Average: about 12 hrs/week. Mode: about than 13.5 hrs/week. Range: 0-5 to more than 14 hrs/week. ------------------------------------------ time needed depends on your background *** texts show them ------------------------------------------ TEXTBOOKS Required: Essentials of Programming Languages (2e) The Little Schemer (4th ed.) Recommended: Structure and Interpretation of Computer Programs (2e) ------------------------------------------ Also there is stuff on reserve and on the web *** grading ------------------------------------------ GRADING + No curve grading + Your grade is 70% based on tests 30% on homework ------------------------------------------ moral: use homeworks to learn, cheating on homework won't help details in grade_policy web page *** ask for questions/concerns discuss them