logging in or signing up best oo Elena Download Post to : URL : Related Presentations : Share Add to Flag Embed Email Send to Blogs and Networks Add to Channel Uploaded from authorPOINTLite Insert YouTube videos in PowerPont slides with aS Desktop Copy embed code: (To copy code, click on the text box) Embed: URL: Thumbnail: WordPress Embed Customize Embed The presentation is successfully added In Your Favorites. Views: 180 Category: Entertainment License: All Rights Reserved Like it (0) Dislike it (0) Added: December 05, 2007 This Presentation is Public Favorites: 0 Presentation Description No description available. Comments Posting comment... Premium member Presentation Transcript Slide1: If you view this talk in PowerPoint, turn on comments (View | Comments in PowerPoint) to read remarks made during the talk but not included on the slide Once you do this, you ought to see a comment attached to this slide (outside presentation mode) This is a comment!Current Programming Practice: Current Programming Practice In your favorite C++ environment: wage_per_hour * number_of_hours = total_wage Students who know nothing about pointers must contend with errors owing to their presence in the languageCurrent Programming Practice: Current Programming Practice In your favorite Java environment: class Main { public static void main(String args[]) { if (args.length != 1) { throw new InvalidInput("This program needs one argument."); } System.out.println("You entered " + args[0]); } class InvalidInput extends RuntimeException { public InvalidInput(String mess) { super(mess); } }} Java is not immune to such problemsCurrent Programming Practice: Current Programming Practice In Pascal/Java/C++: i = 0; do { read (j); if (j > 0) i = i + j; } while (j > 0) Likewise, beginners must know details of machine arithmetic -- about 32 bits even if their machine has 32 megSlide5: Even Scheme’s “simple” syntax is not immune to these problemsSlide6: Another Scheme exampleHow to Produce the Best OO Programmers: How to Produce the Best OO Programmers Shriram Krishnamurthi Brown University and The TeachScheme! Project The Project believes computer science, properly taught, belongs at the heart of every liberal arts program, and offers a curriculum consistent with this beliefCurrent Practice in Introductory Courses: Current Practice in Introductory Courses Teach the syntax of a currently fashionable programming language Use Emacs or commercial PE Show examplars of code and ask students to mimic Discuss algorithmic ideas (O(-)) Current Practice: Design vs Tinkering: Current Practice: Design vs Tinkering Syntax: too complex; must tinker Design: exposition of syntactic constructs takes the place of design guidelines Teaching standard algorithms doesn’t replace a discipline of design Lessons: The Trinity: Lessons: The Trinity Simple programming language Programming environment for students A discipline of design algorithmic sophistication follows from design principles TeachScheme!: TeachScheme! Scheme (language) DrScheme (environment) How to Design Programs (methodology) TeachScheme! is not MIT’s Scheme!: TeachScheme! is not MIT’s Scheme! Cleans up the MIT’s Scheme language Not MIT’s programming environment Most importantly: not SICP pedagogy fails the normal student does not discuss program design has an outdated idea of OO programming ignores applications and other attractions There are significant differences between the two approaches on all three points of the trinityPart I: Programming Language: Part I: Programming Language Let’s briefly look at the linguistic issuesProgramming Language: Scheme: Programming Language: Scheme Scheme’s notation is simple: either atomic or (<op> <arg> …) 3 (+ 1 2) (+ (* 3 4) 5) (* (/ 5 9) (- t 32)) Scheme’s semantics is easy: it’s just the rules of algebra no fussing with callling conventions, compilation models, stack frames, activation records, etc. exploits what students already know With Scheme, we can focus on ideas Learning the Language: Learning the Language Students write full programs from the first minute Only five language constructs introduced in the entire semester Takes < 1 week to adapt to prefix no need to memorize precedence tables! And Yet ...: And Yet ... Simple notational mistakes produce error messages beyond the students’ knowledge strange results -- without warning … and even in Scheme (let alone Java/C++/etc.) there are just too many features Recall the examples from the beginning of the talkProgramming Languages: Not One, Many: Programming Languages: Not One, Many Language 1: first-order, functional function definition and application conditional expression structure definition Language 2: local function definitions Language 3: functions and effects higher-order functions mutation and sequencing This is how we help students avoid dealing with details not relevant to their level; this makes the learning environment consistent with textbooks, which introduce languages in fragments, not as a wholeProgramming Languages: Programming Languages Layer language by pedagogic needs Put students in a knowledge-appropriate context Focus on design relative to context Result of over five years of design Part II: Programming Environment: Part II: Programming Environment Next, examine what the environment can contribute to the processProgramming Environment Desiderata: Programming Environment Desiderata Enforce all language levels Safe, so errors are trapped Highlight location of dynamic errors Enable instructors to provide code not at student’s level Facilitate interactive exploration Cross-platform compatibility How about a “Break” button? The last point is in response to the amount of effort teachers put into finding techniques for halting the execution of programs (see the AP-COMPSCI list)Some of DrScheme’s Features: Some of DrScheme’s Features Layer-oriented languages and errors Highlighting of dynamic errors Explanation of scoping rules Algebraic stepper Interesting values (even pictures) Teachpacks cross-platform GUIs, networking, etc. Oh, and that “Break” button In the talk, this is accompanied by a demoPart III: Design Methodology: Part III: Design Methodology The third, critical part of the trinityProgram Design for Beginners: Program Design for Beginners Implicitly foster basic good habits Rational in its design its steps explain the code’s structure Accessible to beginner Note that design methodologies need to be much richer than top-down design aloneDesign Recipes: Design Recipes IMPERATIVE: Teach Model-View Separation Perhaps the oldest picture in CS. What is the only thing we have to go on to design a program? Specifications of the inputs and the desired outputsDesign Recipes: Design Recipes Given data, the central theme: Data Drive Designs From the structure of the data, we can derive the basic structure of the program … So let’s do! So let’s use the only thing we have!Design Recipes: Class Definitions: Design Recipes: Class Definitions use rigorous but not formal language start with the familiar basic sets: numbers, symbols, booleans intervals on numbers extend as needed structures unions self-references vectors (much later) This is how we specify classes of dataDesign Recipes: Class Definitions (2): Design Recipes: Class Definitions (2) Consider the lowly armadillo: it has a name it may be alive (but in Texas …) A concrete example of a structured class (make- is like new in an OO language)Design Recipes: Class Definitions (3): Design Recipes: Class Definitions (3) A zoo animal is either an armadillo, or a tiger, or a giraffe Each of these classes of animals has its own definition A union classDesign Recipes: Class Definitions (4): Design Recipes: Class Definitions (4) A list-of-zoo-animals is either empty (cons animal list-of-zoo-animals) Let’s make examples: empty (cons (make-armadillo ’Bubba true) empty) (cons (make-tiger ’Tony ’FrostedFlakes) (cons (make-armadillo … …) empty)) A class with self-referenceDesign Recipes: Templates: Design Recipes: Templates A list of zoo animals is either empty (cons animal a-list-of-zoo-animals) ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) … ) is it conditionally defined? From the classes of data follow the code templateDesign Recipes: Templates: Design Recipes: Templates A list of zoo animals is either empty (cons animal a-list-of-zoo-animals) ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ <<condition>> <<answer>> ] [ <<condition>> <<answer>> ])) what are the sub-classes? Design Recipes: Templates: Design Recipes: Templates A list of zoo animals is either empty (cons animal a-list-of-zoo-animals) ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) <<answer>> ] [ (cons? a-loZA) <<answer>> ])) are any of the inputs structures? Design Recipes: Templates: Design Recipes: Templates A list of zoo animals is either empty (cons animal a-list-of-zoo-animals) ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) … ] [ (cons? a-loZA) … (first a-loZA) … … (rest a-loZA) … ])) is the class definition self-referential? Design Recipes: Templates: Design Recipes: Templates A list of zoo animals is either empty (cons animal a-list-of-zoo-animals) ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) … ] [ (cons? a-loZA) … (first a-loZA) … … (rest a-loZA) … ])) Recursion follows from self-reference in the data; students have little difficulty understanding self-referential data, or that the control naturally follows from itDesign Recipes: Templates: Design Recipes: Templates A template reflects the structure of the class definitions (mostly for input, often for input) This match helps designers, readers, modifiers, maintainers alike Greatly simplifies function definition Defining Functions: Defining Functions ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) … ] [ (cons? a-loZA) … (first a-loZA) … … (fun-for-zoo (rest a-loZA)) … ])) ;; zoo-size : list-of-zoo-animals -> number (define (zoo-size a-loZA) (cond [ (empty? a-loZA) 0 ] [ (cons? a-loZA) (+ 1 (zoo-size (rest a-loZA)))])) Red represents the actual code used to replace the ellipses in the template to describe the actual functionDefining Functions: Defining Functions ;; has-armadillo? : list-of-zoo-animals -> boolean (define (has-armadillo? a-loZA) (cond [ (empty? a-loZA) false ] [ (cons? a-loZA) (or (armadillo? (first a-loZA)) (has-armadillo? (rest a-loZA)))])) ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) … ] [ (cons? a-loZA) … (first a-loZA) … … (fun-for-zoo (rest a-loZA)) … ])) Again: the template contains most of the code already (thus reducing the syntactic effort in writing the solution also)Design Recipes: Defining Functions : Design Recipes: Defining Functions Templates remind students of all the information that is available which cases which field values, argument values what natural recursions can compute The act of a function definition is to choose which computations to use to combine the resulting values The Design Recipe: The Design Recipe data analysis and class definition contract, purpose statement, header in-out (effect) examples function template function definition testing, test suite development Notice the (almost) total ordering between the steps, and the crucial dependence on the class definitionTemplate Construction: Template Construction basic data, intervals of numbers structures unions self-reference, mutual references circularity The recipe is parameterized over template construction, which depends on the actual classes of data, each of which has its own template construction techniquesIntermezzo: Intermezzo Which sorting method to teach first? Selection sort Insertion sort Quicksort Heap sort Mergesort Bubble sort … How do we distinguish between these sorting techniques?Special Topic: Generative Recursion: Special Topic: Generative Recursion Generative recursion: the recursive sub-problem is determined dynamically rather than statically What is the base case? What ensures termination? Who provides the insight? Special case: not reusable! Insertion sort is the only one that doesn’t employ generative recursion; it follows from the natural recursion that arises in template constructionSpecial Topic: Abstraction: Special Topic: Abstraction Factor out commonalities in contracts corresponds to parametric polymorphism function bodies leads to inheritance and overriding Design Recipes: Conclusion : Design Recipes: Conclusion Get students used to discipline from the very first day Use scripted question-and-answer game until they realize they can do it on their own Works especially well for structural solutions Part IV:From Scheme to Java : Part IV: From Scheme to Java or, “But What Does All This Have to do With OOP?” How to proceed from TeachScheme! to industrially popular materialScheme to Java: OO Computing : Scheme to Java: OO Computing focus: objects and method invocation basic operations: creation select field mutate field select method via “polymorphism” structures and functions basic operations: creation select field mutate field recognize kind f(o) becomes o.f() They’ve really seen much of the core intellectual contentScheme to Java: OO Programming: Scheme to Java: OO Programming develop class and interface hierarchy allocate code of function to proper subclass develop class definitions allocate code of function to proper conditional clause Much of the transition to well-designed OO programs is mechanicalScheme to Java: Class Hierarchy: Scheme to Java: Class Hierarchy A list of zoo animals is either empty (cons animal a-list-of-zoo-animals) Class definitions in the two cases are extremely similarScheme to Java: Code Allocation: Scheme to Java: Code Allocation ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) ] [ (cons? a-loZA) … (first a-loZA) … … (rest a-loZA) … ])) … and so is the constructions of templates and their conversion into codeScheme to Java: Scheme to Java Design recipes work identically to produce well-designed OO programs The differences are notational The differences are instructive The resulting programs use standard design patterns Why not just Java first?: Why not just Java first? Complex notation, complex mistakes No PE supports stratified Java Design recipes drown in syntax Scheme to Java: Ketchup & Caviar: Scheme to Java: Ketchup & Caviar abstract class List_Zoo_Animal { int fun_for_list(); } class Cons extends List_Zoo_Animal { Zoo_Animal first; List_Zoo_Animal rest; int fun_for_list() { return 1 + rest.fun_for_list(); } } class Empty extends List_Zoo_Animal { int fun_for_list() { return 0; } } From the instructor’s manual of Structure and Interpretation of Computer Programs: “… it is possible to use [other languages] as the vehicle for a general, modern introduction to programming, but it is a little like pouring ketchup over caviar.”Scheme to Java: Ketchup & Caviar: Scheme to Java: Ketchup & Caviar abstract class List_Zoo_Animal { int fun_for_list(); } class Cons extends List_Zoo_Animal { Zoo_Animal first; List_Zoo_Animal rest; int fun_for_list() { return 1 + rest.fun_for_list(); } } class Empty extends List_Zoo_Animal { int fun_for_list() { return 0; } } This doesn’t include the code needed to actually run the program! Red highlights the code necessary in Java but not in SchemePart V: Experiences : Part V: Experiences Sample Exercise: Sample Exercise File systems by iterative refinement #1: An example of an extended exerciseSample Exercise: Sample Exercise File systems by iterative refinement #2: A file is a symbol A file-or-directory is either a file, or a directory A list-of-file/dir is either empty (cons file-or-directory list-of-file/dir) A directory is a structure (make-dir symbol list-of-file/dir) Sample Exercise: Sample Exercise File systems by iterative refinement #3: A file is a structure (make-file symbol number list-of-values) A file-or-directory is either a file, or a directory A list-of-file/dir is either empty (cons file-or-directory list-of-file/dir) A directory is a structure (make-dir symbol list-of-file/dir) Sample Exercise: Sample Exercise The functions: number-of-files disk-usage tree-of-disk-usage find-file all-file-and-directory-names empty-directories ... Sample Exercise: Sample Exercise File systems by iterative refinement #1: Notice the pattern of references: the classes of data are mutually referentialSample Exercise: Sample Exercise File systems by iterative refinement #3: A file is a structure (make-file symbol number list-of-values) A file-or-directory is either a file, or a directory A list-of-file/dir is either empty (cons file-or-directory list-of-file/dir) A directory is a structure (make-dir symbol list-of-file/dir) The mutual reference is even more complex: there’s a three-step (but no two-step) cycleSample Exercise: Most students are helpless without the design recipe The templates provide the basic structure of solutions The final programs are < 20 lines of actual code With Teachpack, runs on file system Second midterm (7th/8th week) Exercise extends further (links, …) Sample Exercise How do your students perform on such exercises?Experiences: Rice University Constraints: Experiences: Rice University Constraints All incoming students Life-long learners Accommodate industry long-term Work after two semesters Level playing field, make 1st sem. useful Minimize fashions OO, components, etc. C++ to Java, true OOP Experiences: The Rice Experiment: Experiences: The Rice Experiment beginners: none to three years of experience comp sci introduction: TeachScheme curriculum good evaluations huge growth many different teachers applied comp introduction: C/C++ curriculum weak evaluations little growth several teachers second semester: OOP, classical data structures, patterns Experiences: The Rice Experiment : Experiences: The Rice Experiment Even faculty who prefer C/C++/Java find students from Scheme introduction perform better in 2nd course now teach the Scheme introduction Students with prior experience eventually understand how much the course adds to their basis Nearly half the Rice campus takes it! Experiences: Other Institutions: Experiences: Other Institutions Trained nearly 200 teachers/professors Over 100 deployed and reuse it Better basis for second courses Provides grading rubric Immense help to algebra teachers Much higher retention rate especially among females These numbers are circa 2002Conclusion: Conclusion Training good programmers does not mean starting them on currently fashionable languages and tools Provide a strong, rigorous foundation data-oriented thinking value-oriented programming Then, and only then, expose to i/o details, current fashions, etc. Conclusion : Conclusion Training takes more than teaching some syntax and good examples We must present students with a simple, stratified language an enforcing programming environment a rational design recipe Teach Scheme! What We Offer: What We Offer Textbook: published by MIT Press, available on-line Problem sets and solutions Teacher’s guide, environment guide Programming environment Teaching libraries Summer workshops All other than paper book are free The text is available for free on the Web even though it is available in printPrimary Project Personnel: Primary Project Personnel Matthias Felleisen Northeastern University Matthew Flatt University of Utah Robert Bruce Findler University of Chicago Shriram Krishnamurthi Brown University with Steve Bloch Adelphi University Kathi Fisler WPI http://www.teach-scheme.org/ You do not have the permission to view this presentation. In order to view it, please contact the author of the presentation.
best oo Elena Download Post to : URL : Related Presentations : Share Add to Flag Embed Email Send to Blogs and Networks Add to Channel Uploaded from authorPOINTLite Insert YouTube videos in PowerPont slides with aS Desktop Copy embed code: (To copy code, click on the text box) Embed: URL: Thumbnail: WordPress Embed Customize Embed The presentation is successfully added In Your Favorites. Views: 180 Category: Entertainment License: All Rights Reserved Like it (0) Dislike it (0) Added: December 05, 2007 This Presentation is Public Favorites: 0 Presentation Description No description available. Comments Posting comment... Premium member Presentation Transcript Slide1: If you view this talk in PowerPoint, turn on comments (View | Comments in PowerPoint) to read remarks made during the talk but not included on the slide Once you do this, you ought to see a comment attached to this slide (outside presentation mode) This is a comment!Current Programming Practice: Current Programming Practice In your favorite C++ environment: wage_per_hour * number_of_hours = total_wage Students who know nothing about pointers must contend with errors owing to their presence in the languageCurrent Programming Practice: Current Programming Practice In your favorite Java environment: class Main { public static void main(String args[]) { if (args.length != 1) { throw new InvalidInput("This program needs one argument."); } System.out.println("You entered " + args[0]); } class InvalidInput extends RuntimeException { public InvalidInput(String mess) { super(mess); } }} Java is not immune to such problemsCurrent Programming Practice: Current Programming Practice In Pascal/Java/C++: i = 0; do { read (j); if (j > 0) i = i + j; } while (j > 0) Likewise, beginners must know details of machine arithmetic -- about 32 bits even if their machine has 32 megSlide5: Even Scheme’s “simple” syntax is not immune to these problemsSlide6: Another Scheme exampleHow to Produce the Best OO Programmers: How to Produce the Best OO Programmers Shriram Krishnamurthi Brown University and The TeachScheme! Project The Project believes computer science, properly taught, belongs at the heart of every liberal arts program, and offers a curriculum consistent with this beliefCurrent Practice in Introductory Courses: Current Practice in Introductory Courses Teach the syntax of a currently fashionable programming language Use Emacs or commercial PE Show examplars of code and ask students to mimic Discuss algorithmic ideas (O(-)) Current Practice: Design vs Tinkering: Current Practice: Design vs Tinkering Syntax: too complex; must tinker Design: exposition of syntactic constructs takes the place of design guidelines Teaching standard algorithms doesn’t replace a discipline of design Lessons: The Trinity: Lessons: The Trinity Simple programming language Programming environment for students A discipline of design algorithmic sophistication follows from design principles TeachScheme!: TeachScheme! Scheme (language) DrScheme (environment) How to Design Programs (methodology) TeachScheme! is not MIT’s Scheme!: TeachScheme! is not MIT’s Scheme! Cleans up the MIT’s Scheme language Not MIT’s programming environment Most importantly: not SICP pedagogy fails the normal student does not discuss program design has an outdated idea of OO programming ignores applications and other attractions There are significant differences between the two approaches on all three points of the trinityPart I: Programming Language: Part I: Programming Language Let’s briefly look at the linguistic issuesProgramming Language: Scheme: Programming Language: Scheme Scheme’s notation is simple: either atomic or (<op> <arg> …) 3 (+ 1 2) (+ (* 3 4) 5) (* (/ 5 9) (- t 32)) Scheme’s semantics is easy: it’s just the rules of algebra no fussing with callling conventions, compilation models, stack frames, activation records, etc. exploits what students already know With Scheme, we can focus on ideas Learning the Language: Learning the Language Students write full programs from the first minute Only five language constructs introduced in the entire semester Takes < 1 week to adapt to prefix no need to memorize precedence tables! And Yet ...: And Yet ... Simple notational mistakes produce error messages beyond the students’ knowledge strange results -- without warning … and even in Scheme (let alone Java/C++/etc.) there are just too many features Recall the examples from the beginning of the talkProgramming Languages: Not One, Many: Programming Languages: Not One, Many Language 1: first-order, functional function definition and application conditional expression structure definition Language 2: local function definitions Language 3: functions and effects higher-order functions mutation and sequencing This is how we help students avoid dealing with details not relevant to their level; this makes the learning environment consistent with textbooks, which introduce languages in fragments, not as a wholeProgramming Languages: Programming Languages Layer language by pedagogic needs Put students in a knowledge-appropriate context Focus on design relative to context Result of over five years of design Part II: Programming Environment: Part II: Programming Environment Next, examine what the environment can contribute to the processProgramming Environment Desiderata: Programming Environment Desiderata Enforce all language levels Safe, so errors are trapped Highlight location of dynamic errors Enable instructors to provide code not at student’s level Facilitate interactive exploration Cross-platform compatibility How about a “Break” button? The last point is in response to the amount of effort teachers put into finding techniques for halting the execution of programs (see the AP-COMPSCI list)Some of DrScheme’s Features: Some of DrScheme’s Features Layer-oriented languages and errors Highlighting of dynamic errors Explanation of scoping rules Algebraic stepper Interesting values (even pictures) Teachpacks cross-platform GUIs, networking, etc. Oh, and that “Break” button In the talk, this is accompanied by a demoPart III: Design Methodology: Part III: Design Methodology The third, critical part of the trinityProgram Design for Beginners: Program Design for Beginners Implicitly foster basic good habits Rational in its design its steps explain the code’s structure Accessible to beginner Note that design methodologies need to be much richer than top-down design aloneDesign Recipes: Design Recipes IMPERATIVE: Teach Model-View Separation Perhaps the oldest picture in CS. What is the only thing we have to go on to design a program? Specifications of the inputs and the desired outputsDesign Recipes: Design Recipes Given data, the central theme: Data Drive Designs From the structure of the data, we can derive the basic structure of the program … So let’s do! So let’s use the only thing we have!Design Recipes: Class Definitions: Design Recipes: Class Definitions use rigorous but not formal language start with the familiar basic sets: numbers, symbols, booleans intervals on numbers extend as needed structures unions self-references vectors (much later) This is how we specify classes of dataDesign Recipes: Class Definitions (2): Design Recipes: Class Definitions (2) Consider the lowly armadillo: it has a name it may be alive (but in Texas …) A concrete example of a structured class (make- is like new in an OO language)Design Recipes: Class Definitions (3): Design Recipes: Class Definitions (3) A zoo animal is either an armadillo, or a tiger, or a giraffe Each of these classes of animals has its own definition A union classDesign Recipes: Class Definitions (4): Design Recipes: Class Definitions (4) A list-of-zoo-animals is either empty (cons animal list-of-zoo-animals) Let’s make examples: empty (cons (make-armadillo ’Bubba true) empty) (cons (make-tiger ’Tony ’FrostedFlakes) (cons (make-armadillo … …) empty)) A class with self-referenceDesign Recipes: Templates: Design Recipes: Templates A list of zoo animals is either empty (cons animal a-list-of-zoo-animals) ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) … ) is it conditionally defined? From the classes of data follow the code templateDesign Recipes: Templates: Design Recipes: Templates A list of zoo animals is either empty (cons animal a-list-of-zoo-animals) ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ <<condition>> <<answer>> ] [ <<condition>> <<answer>> ])) what are the sub-classes? Design Recipes: Templates: Design Recipes: Templates A list of zoo animals is either empty (cons animal a-list-of-zoo-animals) ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) <<answer>> ] [ (cons? a-loZA) <<answer>> ])) are any of the inputs structures? Design Recipes: Templates: Design Recipes: Templates A list of zoo animals is either empty (cons animal a-list-of-zoo-animals) ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) … ] [ (cons? a-loZA) … (first a-loZA) … … (rest a-loZA) … ])) is the class definition self-referential? Design Recipes: Templates: Design Recipes: Templates A list of zoo animals is either empty (cons animal a-list-of-zoo-animals) ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) … ] [ (cons? a-loZA) … (first a-loZA) … … (rest a-loZA) … ])) Recursion follows from self-reference in the data; students have little difficulty understanding self-referential data, or that the control naturally follows from itDesign Recipes: Templates: Design Recipes: Templates A template reflects the structure of the class definitions (mostly for input, often for input) This match helps designers, readers, modifiers, maintainers alike Greatly simplifies function definition Defining Functions: Defining Functions ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) … ] [ (cons? a-loZA) … (first a-loZA) … … (fun-for-zoo (rest a-loZA)) … ])) ;; zoo-size : list-of-zoo-animals -> number (define (zoo-size a-loZA) (cond [ (empty? a-loZA) 0 ] [ (cons? a-loZA) (+ 1 (zoo-size (rest a-loZA)))])) Red represents the actual code used to replace the ellipses in the template to describe the actual functionDefining Functions: Defining Functions ;; has-armadillo? : list-of-zoo-animals -> boolean (define (has-armadillo? a-loZA) (cond [ (empty? a-loZA) false ] [ (cons? a-loZA) (or (armadillo? (first a-loZA)) (has-armadillo? (rest a-loZA)))])) ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) … ] [ (cons? a-loZA) … (first a-loZA) … … (fun-for-zoo (rest a-loZA)) … ])) Again: the template contains most of the code already (thus reducing the syntactic effort in writing the solution also)Design Recipes: Defining Functions : Design Recipes: Defining Functions Templates remind students of all the information that is available which cases which field values, argument values what natural recursions can compute The act of a function definition is to choose which computations to use to combine the resulting values The Design Recipe: The Design Recipe data analysis and class definition contract, purpose statement, header in-out (effect) examples function template function definition testing, test suite development Notice the (almost) total ordering between the steps, and the crucial dependence on the class definitionTemplate Construction: Template Construction basic data, intervals of numbers structures unions self-reference, mutual references circularity The recipe is parameterized over template construction, which depends on the actual classes of data, each of which has its own template construction techniquesIntermezzo: Intermezzo Which sorting method to teach first? Selection sort Insertion sort Quicksort Heap sort Mergesort Bubble sort … How do we distinguish between these sorting techniques?Special Topic: Generative Recursion: Special Topic: Generative Recursion Generative recursion: the recursive sub-problem is determined dynamically rather than statically What is the base case? What ensures termination? Who provides the insight? Special case: not reusable! Insertion sort is the only one that doesn’t employ generative recursion; it follows from the natural recursion that arises in template constructionSpecial Topic: Abstraction: Special Topic: Abstraction Factor out commonalities in contracts corresponds to parametric polymorphism function bodies leads to inheritance and overriding Design Recipes: Conclusion : Design Recipes: Conclusion Get students used to discipline from the very first day Use scripted question-and-answer game until they realize they can do it on their own Works especially well for structural solutions Part IV:From Scheme to Java : Part IV: From Scheme to Java or, “But What Does All This Have to do With OOP?” How to proceed from TeachScheme! to industrially popular materialScheme to Java: OO Computing : Scheme to Java: OO Computing focus: objects and method invocation basic operations: creation select field mutate field select method via “polymorphism” structures and functions basic operations: creation select field mutate field recognize kind f(o) becomes o.f() They’ve really seen much of the core intellectual contentScheme to Java: OO Programming: Scheme to Java: OO Programming develop class and interface hierarchy allocate code of function to proper subclass develop class definitions allocate code of function to proper conditional clause Much of the transition to well-designed OO programs is mechanicalScheme to Java: Class Hierarchy: Scheme to Java: Class Hierarchy A list of zoo animals is either empty (cons animal a-list-of-zoo-animals) Class definitions in the two cases are extremely similarScheme to Java: Code Allocation: Scheme to Java: Code Allocation ;; fun-for-zoo : list-of-zoo-animals -> ??? (define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) ] [ (cons? a-loZA) … (first a-loZA) … … (rest a-loZA) … ])) … and so is the constructions of templates and their conversion into codeScheme to Java: Scheme to Java Design recipes work identically to produce well-designed OO programs The differences are notational The differences are instructive The resulting programs use standard design patterns Why not just Java first?: Why not just Java first? Complex notation, complex mistakes No PE supports stratified Java Design recipes drown in syntax Scheme to Java: Ketchup & Caviar: Scheme to Java: Ketchup & Caviar abstract class List_Zoo_Animal { int fun_for_list(); } class Cons extends List_Zoo_Animal { Zoo_Animal first; List_Zoo_Animal rest; int fun_for_list() { return 1 + rest.fun_for_list(); } } class Empty extends List_Zoo_Animal { int fun_for_list() { return 0; } } From the instructor’s manual of Structure and Interpretation of Computer Programs: “… it is possible to use [other languages] as the vehicle for a general, modern introduction to programming, but it is a little like pouring ketchup over caviar.”Scheme to Java: Ketchup & Caviar: Scheme to Java: Ketchup & Caviar abstract class List_Zoo_Animal { int fun_for_list(); } class Cons extends List_Zoo_Animal { Zoo_Animal first; List_Zoo_Animal rest; int fun_for_list() { return 1 + rest.fun_for_list(); } } class Empty extends List_Zoo_Animal { int fun_for_list() { return 0; } } This doesn’t include the code needed to actually run the program! Red highlights the code necessary in Java but not in SchemePart V: Experiences : Part V: Experiences Sample Exercise: Sample Exercise File systems by iterative refinement #1: An example of an extended exerciseSample Exercise: Sample Exercise File systems by iterative refinement #2: A file is a symbol A file-or-directory is either a file, or a directory A list-of-file/dir is either empty (cons file-or-directory list-of-file/dir) A directory is a structure (make-dir symbol list-of-file/dir) Sample Exercise: Sample Exercise File systems by iterative refinement #3: A file is a structure (make-file symbol number list-of-values) A file-or-directory is either a file, or a directory A list-of-file/dir is either empty (cons file-or-directory list-of-file/dir) A directory is a structure (make-dir symbol list-of-file/dir) Sample Exercise: Sample Exercise The functions: number-of-files disk-usage tree-of-disk-usage find-file all-file-and-directory-names empty-directories ... Sample Exercise: Sample Exercise File systems by iterative refinement #1: Notice the pattern of references: the classes of data are mutually referentialSample Exercise: Sample Exercise File systems by iterative refinement #3: A file is a structure (make-file symbol number list-of-values) A file-or-directory is either a file, or a directory A list-of-file/dir is either empty (cons file-or-directory list-of-file/dir) A directory is a structure (make-dir symbol list-of-file/dir) The mutual reference is even more complex: there’s a three-step (but no two-step) cycleSample Exercise: Most students are helpless without the design recipe The templates provide the basic structure of solutions The final programs are < 20 lines of actual code With Teachpack, runs on file system Second midterm (7th/8th week) Exercise extends further (links, …) Sample Exercise How do your students perform on such exercises?Experiences: Rice University Constraints: Experiences: Rice University Constraints All incoming students Life-long learners Accommodate industry long-term Work after two semesters Level playing field, make 1st sem. useful Minimize fashions OO, components, etc. C++ to Java, true OOP Experiences: The Rice Experiment: Experiences: The Rice Experiment beginners: none to three years of experience comp sci introduction: TeachScheme curriculum good evaluations huge growth many different teachers applied comp introduction: C/C++ curriculum weak evaluations little growth several teachers second semester: OOP, classical data structures, patterns Experiences: The Rice Experiment : Experiences: The Rice Experiment Even faculty who prefer C/C++/Java find students from Scheme introduction perform better in 2nd course now teach the Scheme introduction Students with prior experience eventually understand how much the course adds to their basis Nearly half the Rice campus takes it! Experiences: Other Institutions: Experiences: Other Institutions Trained nearly 200 teachers/professors Over 100 deployed and reuse it Better basis for second courses Provides grading rubric Immense help to algebra teachers Much higher retention rate especially among females These numbers are circa 2002Conclusion: Conclusion Training good programmers does not mean starting them on currently fashionable languages and tools Provide a strong, rigorous foundation data-oriented thinking value-oriented programming Then, and only then, expose to i/o details, current fashions, etc. Conclusion : Conclusion Training takes more than teaching some syntax and good examples We must present students with a simple, stratified language an enforcing programming environment a rational design recipe Teach Scheme! What We Offer: What We Offer Textbook: published by MIT Press, available on-line Problem sets and solutions Teacher’s guide, environment guide Programming environment Teaching libraries Summer workshops All other than paper book are free The text is available for free on the Web even though it is available in printPrimary Project Personnel: Primary Project Personnel Matthias Felleisen Northeastern University Matthew Flatt University of Utah Robert Bruce Findler University of Chicago Shriram Krishnamurthi Brown University with Steve Bloch Adelphi University Kathi Fisler WPI http://www.teach-scheme.org/