COP 4020 meeting -*- Outline -*- * the course itself ** What is a programming language? ------------------------------------------ PROGRAMMING LANGUAGE def: a *programming language* is a language that is def: a *general-purpose language* is one that is not tailored to some particular application area. Examples: def: a *special-purpose language* is a language that is designed to support some particular application. Examples: ----------------------------------------- ... capable of expressing all computations For example, Java, C, and C++ are programming languages. Q: Others? AspectJ, Lua, Oz, Scala, F#, Haskell, JavaScript, OCaml, Racket, Scheme, Erlang, Orc, Clojure, lambdaProlog, XSB, Ruby, Smalltalk, Python, Java, Ada, PL/I, BASIC, COBOL, Pascal, SNOBOL, Icon, Algol W, Algol 60, Algol 68, Edison, ... (literally thousands) But the techniques we'll study aren't just limited to general-purpose programming languages. These don't have to be able to compute all computable functions. examples: Lotus 1-2-3 macros, the MFC class library, MUMPS, R, JavaScript, VBA, Cold Fusion Q: Others? Formal languages are also used in a variety of settings: music (Csound, Tidal), knitting, mathematics (Mathematica), engineering (Matlab/Simulink),... ** objectives Q: What are your objectives for this course? Q: How do you want this course to help you in 5 years? (make a list) My objectives for you: ------------------------------------------ COURSE OBJECTIVES Quickly Learn Master Evaluate ------------------------------------------ ... - Quickly Learn new programming languages, - Master, i.e., effectively use them, - Evaluate what combination of programming model and language features would best solve a given problem, Why these objectives? - languages are changing constantly people also use several at one time - learn new languages quickly mapping ideas from this class to the language read/write language reference manual - knowing good ways to program is fundamental to CS - good programming techniques are closely related to good language design (abstraction) - most programs evolve into languages, or have language parts - programming languages aren't good or bad themselves - concurrent hardware is causing a fundamental changes ** outcomes My essential learning outcomes: ------------------------------------------ LEARNING OUTCOMES Concepts Use Models Evaluate Models Map To Languages ------------------------------------------ ... [Concepts] understand, use, apply concepts and terms [UseModels] use each essential model in programming model to solve problems [EvaluateModels] For each essential programming model convincingly evaluate its advantages for solving a given problem [MapToLanguages] Convincingly explain what features in C, C++, and Java support each essential programming model ** plan for the course ------------------------------------------ PLAN FOR THE COURSE Broad outline: - overview - functional programming - parallel programming - actor-based concurrent programming We will use "real" languages to help you evaluate them and learn about learning them ------------------------------------------ *** computational models ------------------------------------------ COMPUTATION MODELS def: A *computational model* is a very small programming language that provides primitives necessary for computation. Properties of computation models (Abelson et al) data (operations, means of computation), structuring mechanisms (means of combination), abstraction mechanisms (means of abstraction) Examples: ------------------------------------------ ... a Reduced Instruction Set Computer the lambda Calculus (functional programming) names, functions, and application Abadi and Cardelli's object calculus variables, objects, method calls, method update *** programming models ------------------------------------------ PROGRAMMING MODELS def: A *programming model* (or *paradigm*) is a programming language together with: Examples: ------------------------------------------ ... a way to design, code, test/verify/reason a way to approach problems in design a way to *organize* programs (a style) a set of questions how to evaluate a design/program what makes a good/bad design/program built on a set of tools (the computation model) variables, procedures, while-loops, declarations, ... Examples: object-oriented programming, functional programming *** grading ------------------------------------------ GRADING + No curve grading + Your grade is 65% based on tests 35% on homework ------------------------------------------ moral: use homeworks to learn, cheating on homework won't help in class questions will be used to: - get students to read for first exposure on own time, - make class more productive - make class more interactive details in grading_policy.shtml web page *** cooperation and cheating ------------------------------------------ COOPERATION Can talk with others about homework - but must cite them Can cooperatively do homework - but must use a "group" in webcourses (see grading policy for details) CHEATING Exchange of finished answers - without cooperation in solving them - without certification Using ideas of others - without citation Copying answers from the web - without citation ------------------------------------------ See grading policy for details. *** ask for questions/concerns discuss them