50
What's Wrong with How to Design Programs; What's New in How to Design Programs 2e Matthias Felleisen Saturday, July 23, 2011

Matthias Slides (1)

  • Upload
    mrapex

  • View
    15

  • Download
    3

Embed Size (px)

DESCRIPTION

matthis silva de corongoa

Citation preview

Page 1: Matthias Slides (1)

What's Wrong with How to Design Programs; What's New in How to Design Programs 2e

Matthias Felleisen

Saturday, July 23, 2011

Page 2: Matthias Slides (1)

Content Context

Saturday, July 23, 2011

Page 3: Matthias Slides (1)

Content

AcademicContext

OutsideContext

Saturday, July 23, 2011

Page 4: Matthias Slides (1)

Content

AcademicContext

OutsideContext

Saturday, July 23, 2011

Page 5: Matthias Slides (1)

OutsideContext

What is a student to do when s/he reaches the end of HtDP?

Saturday, July 23, 2011

Page 6: Matthias Slides (1)

OutsideContext

What is a student to do when s/he reaches the end of HtDP?

What is a student to do who doesn’t see HtDP in his/her first year?

Saturday, July 23, 2011

Page 7: Matthias Slides (1)

OutsideContext

LispFun

GamesLearning

ProgrammingStories with Comics

Web Sites, Songs, and Videos

Saturday, July 23, 2011

Page 8: Matthias Slides (1)

video

Saturday, July 23, 2011

Page 9: Matthias Slides (1)

FunGames

LearningProgramming

Stories with ComicsWeb Sites, Songs, and Videos

ROAR: Realm of Racket

Lisp

Saturday, July 23, 2011

Page 10: Matthias Slides (1)

FunGames

LearningProgramming

Stories with ComicsWeb Sites, Songs, and Videos

ROAR: Realm of Racket

Lisp

Saturday, July 23, 2011

Page 11: Matthias Slides (1)

FunGames

LearningProgramming

Stories with ComicsWeb Sites, Songs, and Videos

ROAR: Realm of Racket

Saturday, July 23, 2011

Page 12: Matthias Slides (1)

FunGames

LearningProgramming

Stories with ComicsWeb Sites, Songs, and Videos

ROAR: Realm of Racket

Racket

Saturday, July 23, 2011

Page 13: Matthias Slides (1)

InofficialLaunch by freshmen,

for freshmen

Saturday, July 23, 2011

Page 14: Matthias Slides (1)

InofficialLaunch

Mimi LinNicole NussbaumSpencer FlorencePranav Gandhi

David van Horn

by freshmen,for freshmen

Saturday, July 23, 2011

Page 15: Matthias Slides (1)

We need your help. When we launch,

please spread the word.Watch [email protected]

for announcements.

Saturday, July 23, 2011

Page 16: Matthias Slides (1)

Content

AcademicContext

OutsideContext

Saturday, July 23, 2011

Page 17: Matthias Slides (1)

AcademicContext

How to Design ProgramsHow to Design Components

How to Design Systems

How to Prove Programs } Racket

Saturday, July 23, 2011

Page 18: Matthias Slides (1)

AcademicContext

How to Design ProgramsHow to Design Components

How to Design Systems

How to Prove Programs } Racket

Sam Tobin-HochstadtDavid van Horn

Saturday, July 23, 2011

Page 19: Matthias Slides (1)

AcademicContext

How to Design ProgramsHow to Design Components

How to Design Systems

How to Prove Programs } Racket

Carl EastlundDaniel Friedman

Sam Tobin-HochstadtDavid van Horn

Saturday, July 23, 2011

Page 20: Matthias Slides (1)

AcademicContext

transition to ‘regular’ programming:arrays

for loopstypes

Saturday, July 23, 2011

Page 21: Matthias Slides (1)

AcademicContext

transition to ‘regular’ programming:arrays

for loopstypes

HtDP/2e

Saturday, July 23, 2011

Page 22: Matthias Slides (1)

AcademicContext

transition to ‘regular’ programming:arrays

for loopstypes

HtDP/2e

HtDP/3e:signatures

typescontracts

Saturday, July 23, 2011

Page 23: Matthias Slides (1)

Content:HtDP/2e

Context

Saturday, July 23, 2011

Page 24: Matthias Slides (1)

ContentHtDP/2e

design recipesdesign guidelines

topics, order of (mostly)

Saturday, July 23, 2011

Page 25: Matthias Slides (1)

ContentHtDP/2e

design recipesdesign guidelines

topics, order of (mostly)

algorithmic trade-offs for designanimation, games (context)

modularity plus ADTsreal-world data (context)

vectors and iterators

Saturday, July 23, 2011

Page 26: Matthias Slides (1)

Saturday, July 23, 2011

Page 27: Matthias Slides (1)

HtDP/2eorder of topics

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and abstract data functional data representationsloops and iterators

Saturday, July 23, 2011

Page 28: Matthias Slides (1)

HtDP/2eorder of topics

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and abstract data functional data representationsloops and iterators

missing:- mutable variables- mutable structures

Saturday, July 23, 2011

Page 29: Matthias Slides (1)

HtDP/2e[order of] topics

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and abstract data functional data representationsloops and iterators

#lang 2htdp/asl

(require 2htdp/universe)(require “common-to-client-and-server.rkt”)

(define (my-game-server state0) (universe state0 [on-new ...] ...))

Saturday, July 23, 2011

Page 30: Matthias Slides (1)

HtDP/2e[order of] topics

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and abstract data functional data representationsloops and iterators

#lang 2htdp/asl

(require 2htdp/universe)(require “common-to-client-and-server.rkt”)

(define (my-game-server state0) (universe state0 [on-new ...] ...))

#lang 2htdp/asl

(provide create-message parse-message)

(define (create-message x y z) ...)(define (parse-message m) ...)

common-to-client-and-server

Saturday, July 23, 2011

Page 31: Matthias Slides (1)

HtDP/2e[order of] topics

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and data abstraction functional data representationsloops and iterators

Saturday, July 23, 2011

Page 32: Matthias Slides (1)

HtDP/2e[order of] topics

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and data abstraction functional data representationsloops and iterators

examples:+ finite sets+ dictionary/hashes+ infinite sets

Saturday, July 23, 2011

Page 33: Matthias Slides (1)

HtDP/2e[order of] topics

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and data abstraction functional data representationsloops and iterators

examples:+ finite sets+ dictionary/hashes+ infinite sets #lang 2htdp/isl;; Set = [Any -> Boolean]

;; Set Set -> Set

(check-expect (element-of (union odd? even?) (random 100000)) true)

(define (union s t) (lambda (x) (or (s x) (t x))))

Saturday, July 23, 2011

Page 34: Matthias Slides (1)

HtDP/2e[order of] topics

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and abstract data functional data representationsloops and iterators

#lang 2htdp/asl

;; [Vectorof Number] -> Number

(check-within (norm (vector 1 1 1)) (sqrt 3) .0001)

(define (norm v) (sqrt (for/fold ((sum 0)) ((x v)) (+ sum (sqr x)))))

Saturday, July 23, 2011

Page 35: Matthias Slides (1)

HtDP/2e[order of] topics

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and abstract data functional data representationsloops and iterators

#lang 2htdp/asl

;; [Vectorof Number] -> Number

(check-within (norm (vector 1 1 1)) (sqrt 3) .0001)

(define (norm v) (sqrt (for/fold ((sum 0)) ((x v)) (+ sum (sqr x)))))

#lang 2htdp/asl

;; Number [Vectorof Number] -> [Vectorof Number]

(check-expect (scalar* 3 (vector 0 -4 2)) (vector 0 -12 6))

(define (scalar* a v) (for/vector ((x v)) (* a x)))

Saturday, July 23, 2011

Page 36: Matthias Slides (1)

Saturday, July 23, 2011

Page 37: Matthias Slides (1)

HtDP/2ealgorithmic trade-off

...functional abstractionintermezzo: O(...), running time, vectorscomplex recursive data: lookup in lists vs BSTs measurements generative recursion: insertion sort vs quicksort, graph traversals based on lists, vectors, linksdesign with accumulators: more data accumulators (invariants) tree structures w/ accumulators ...

Saturday, July 23, 2011

Page 38: Matthias Slides (1)

HtDP/2econtext: animation &

games & real data

Saturday, July 23, 2011

Page 39: Matthias Slides (1)

HtDP/2econtext: animation &

games & real data

Saturday, July 23, 2011

Page 40: Matthias Slides (1)

HtDP/2econtext: animation &

games & real data

Input/Output:

Saturday, July 23, 2011

Page 41: Matthias Slides (1)

HtDP/2econtext: animation &

games & real data

Input/Output:

interactive I/O

Saturday, July 23, 2011

Page 42: Matthias Slides (1)

HtDP/2econtext: animation &

games & real data

Input/Output:

interactive I/O batch (file, net) I/O

Saturday, July 23, 2011

Page 43: Matthias Slides (1)

HtDP/2econtext: animation &

games & real data

Input/Output:

interactive I/O batch (file, net) I/Ohow to build a complete application

Saturday, July 23, 2011

Page 44: Matthias Slides (1)

HtDP/2econtext: real data

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and abstract data functional data representationsloops and iterators

#lang 2htdp/bsl

(require 2htdp/batch-io)(require 2htdp/itunes)

;; String -> [Listof iTuneRecords](define (retriev-database file-name) (list->iTune-Record (read-file-as-list file-name)))

... process titles, singers, ...

Saturday, July 23, 2011

Page 45: Matthias Slides (1)

HtDP/2econtext: real data

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and abstract data functional data representationsloops and iterators

#lang 2htdp/isl

(require 2htdp/batch-io)

;; String -> [Listof iTuneRecords](define (retriev-database file-name) (write-as-csv-file (add-row-to-spread-sheet (read-file-as-csv file-name process-cell)))

;; Cell -> ...(define (process-cell c) ...)

Saturday, July 23, 2011

Page 46: Matthias Slides (1)

HtDP/2econtext: real data

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and abstract data functional data representationsloops and iterators

#lang 2htdp/isl

(require 2htdp/universe)(require 2htdp/batch-io)(require “google-yahoo-credentials.rkt”)

(define (main s) (big-bang (retrieve-maps (retrieve-coordinates s)) [to-draw draw-first-map] [on-key rotate-maps]))

;; Address -> Coordinates (define (retrieve-coordinates address) (read-url YAHOO-GEO-SERVICE ...))

;; Coordinates -> [Listof Image](define (retrieve-maps coordinates) (read-url GOOGLE-MAPS ...))

Saturday, July 23, 2011

Page 47: Matthias Slides (1)

HtDP/2econtext: beyond big-bang

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and abstract data functional data representationsloops and iterators

#lang 2htdp/isl

(require 2htdp/universe)(require 2htdp/image)

;; Nat -> OrcWorld (define (launch-orc-battle s) (big-bang (create-orcs-and-fighter s) [to-draw render-orc-game] [on-key fight-orcs] [stop-when win-or-lose?] [on-tick counting-down]))

...

Saturday, July 23, 2011

Page 48: Matthias Slides (1)

UniverseServer

HtDP/2econtext: beyond big-bang

finite datasimple recursive datafunctional abstractioncomplex recursive datagenerative recursion design with accumulators modules and abstract data functional data representationsloops and iterators

World

World

World

World

World

Saturday, July 23, 2011

Page 49: Matthias Slides (1)

stop

Saturday, July 23, 2011

Page 50: Matthias Slides (1)

HtDP/2e is a large undertaking. It will still take a while,

but it is on the Web and feedback is

desired.

Saturday, July 23, 2011