Sie sind auf Seite 1von 50

What's Wrong with How to

Design Programs; What's New


in How to Design Programs 2e

Matthias Felleisen

Saturday, July 23, 2011


Content Context

Saturday, July 23, 2011


Outside
Context

Content

Academic
Context

Saturday, July 23, 2011


Outside
Context

Content

Academic
Context

Saturday, July 23, 2011


Outside
Context

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

Saturday, July 23, 2011


Outside
Context

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

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

Saturday, July 23, 2011


Outside
Context

Lisp
Fun
Games
Learning
Programming
Stories with Comics
Web Sites, Songs, and Videos

Saturday, July 23, 2011


video

Saturday, July 23, 2011


ROAR:
Realm of
Racket

Lisp
Fun
Games
Learning
Programming
Stories with Comics
Web Sites, Songs, and Videos

Saturday, July 23, 2011


ROAR:
Realm of
Racket

Lisp
Fun
Games
Learning
Programming
Stories with Comics
Web Sites, Songs, and Videos

Saturday, July 23, 2011


ROAR:
Realm of
Racket

Fun
Games
Learning
Programming
Stories with Comics
Web Sites, Songs, and Videos

Saturday, July 23, 2011


ROAR:
Realm of
Racket

Racket
Fun
Games
Learning
Programming
Stories with Comics
Web Sites, Songs, and Videos

Saturday, July 23, 2011


Inofficial
Launch by freshmen,
for freshmen

Saturday, July 23, 2011


Inofficial
Launch by freshmen,
for freshmen

David van Horn

Mimi Lin
Nicole Nussbaum
Spencer Florence
Pranav Gandhi

Saturday, July 23, 2011


We need your help.
When we launch,
please spread the word.
Watch users@racket-lang.org
for announcements.

Saturday, July 23, 2011


Outside
Context

Content

Academic
Context

Saturday, July 23, 2011


Academic
Context

}
How to Design Programs
How to Design Components
How to Design Systems Racket
How to Prove Programs

Saturday, July 23, 2011


Academic
Context
Sam Tobin-Hochstadt
David van Horn

}
How to Design Programs
How to Design Components
How to Design Systems Racket
How to Prove Programs

Saturday, July 23, 2011


Academic
Context
Sam Tobin-Hochstadt
David van Horn

}
How to Design Programs
How to Design Components
How to Design Systems Racket
How to Prove Programs

Carl Eastlund
Daniel Friedman

Saturday, July 23, 2011


Academic
Context

transition to regular programming:


arrays
for loops
types

Saturday, July 23, 2011


Academic
Context

HtDP/2e

transition to regular programming:


arrays
for loops
types

Saturday, July 23, 2011


Academic
Context

HtDP/2e

transition to regular programming:


arrays
for loops
types
HtDP/3e:
signatures
types
contracts

Saturday, July 23, 2011


Content: Context
HtDP/2e

Saturday, July 23, 2011


Content
HtDP/2e

design recipes
design guidelines
topics, order of (mostly)

Saturday, July 23, 2011


Content
HtDP/2e

design recipes algorithmic trade-offs for design


design guidelines animation, games (context)
topics, order of (mostly) modularity plus ADTs
real-world data (context)
vectors and iterators

Saturday, July 23, 2011


Saturday, July 23, 2011
HtDP/2e
order of topics

finite data
simple recursive data
functional abstraction
complex recursive data
generative recursion
design with accumulators
modules and abstract data
functional data representations
loops and iterators

Saturday, July 23, 2011


HtDP/2e
order of topics

finite data missing:


simple recursive data - mutable variables
functional abstraction - mutable structures
complex recursive data
generative recursion
design with accumulators
modules and abstract data
functional data representations
loops and iterators

Saturday, July 23, 2011


HtDP/2e
[order of] topics

finite data
simple recursive data #lang 2htdp/asl

functional abstraction (require 2htdp/universe)


complex recursive data (require common-to-client-and-server.rkt)

generative recursion (define (my-game-server state0)


(universe state0 [on-new ...] ...))
design with accumulators
modules and abstract data
functional data representations
loops and iterators

Saturday, July 23, 2011


HtDP/2e
[order of] topics

finite data
simple recursive data #lang 2htdp/asl

functional abstraction (require 2htdp/universe)


complex recursive data (require common-to-client-and-server.rkt)

generative recursion (define (my-game-server state0)


(universe state0 [on-new ...] ...))
design with accumulators
modules and abstract data common-to-client-and-server

functional data representations #lang 2htdp/asl

loops and iterators (provide create-message parse-message)

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


(define (parse-message m) ...)

Saturday, July 23, 2011


HtDP/2e
[order of] topics

finite data
simple recursive data
functional abstraction
complex recursive data
generative recursion
design with accumulators
modules and data abstraction
functional data representations
loops and iterators

Saturday, July 23, 2011


HtDP/2e
[order of] topics

examples:
finite data + finite sets
simple recursive data + dictionary/hashes
functional abstraction + infinite sets
complex recursive data
generative recursion
design with accumulators
modules and data abstraction
functional data representations
loops and iterators

Saturday, July 23, 2011


HtDP/2e
[order of] topics

examples:
finite data + finite sets
simple recursive data + dictionary/hashes
functional abstraction + infinite sets
complex recursive data
#lang 2htdp/isl
generative recursion ;; Set = [Any -> Boolean]
design with accumulators
;; Set Set -> Set
modules and data abstraction
(check-expect
functional data representations (element-of (union odd? even?)
loops and iterators (random 100000))
true)

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

Saturday, July 23, 2011


HtDP/2e
[order of] topics
#lang 2htdp/asl

;; [Vectorof Number] -> Number

finite data (check-within (norm (vector 1 1 1)) (sqrt 3)


.0001)
simple recursive data
functional abstraction (define (norm v)
(sqrt
complex recursive data (for/fold ((sum 0)) ((x v))
(+ sum (sqr x)))))
generative recursion
design with accumulators
modules and abstract data
functional data representations
loops and iterators

Saturday, July 23, 2011


HtDP/2e
[order of] topics
#lang 2htdp/asl

;; [Vectorof Number] -> Number

finite data (check-within (norm (vector 1 1 1)) (sqrt 3)


.0001)
simple recursive data
functional abstraction (define (norm v)
(sqrt
complex recursive data (for/fold ((sum 0)) ((x v))
(+ sum (sqr x)))))
generative recursion
design with accumulators
#lang 2htdp/asl
modules and abstract data
functional data representations ;; Number [Vectorof Number] -> [Vectorof Number]

loops and iterators (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


Saturday, July 23, 2011
HtDP/2e
algorithmic trade-off
...
functional abstraction
intermezzo: O(...), running time, vectors
complex recursive data:
lookup in lists vs BSTs
measurements
generative recursion:
insertion sort vs quicksort,
graph traversals based on lists, vectors, links
design with accumulators:
more data accumulators (invariants)
tree structures w/ accumulators
...

Saturday, July 23, 2011


HtDP/2e
context: animation &
games & real data

Saturday, July 23, 2011


HtDP/2e
context: animation &
games & real data

Saturday, July 23, 2011


HtDP/2e
context: animation &
games & real data

Input/Output:

Saturday, July 23, 2011


HtDP/2e
context: animation &
games & real data

Input/Output:

interactive I/O

Saturday, July 23, 2011


HtDP/2e
context: animation &
games & real data

Input/Output:

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

Saturday, July 23, 2011


HtDP/2e
context: animation &
games & real data

Input/Output:

how to build a complete application


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

Saturday, July 23, 2011


HtDP/2e
context: real data

finite data
#lang 2htdp/bsl
simple recursive data
functional abstraction (require 2htdp/batch-io)
(require 2htdp/itunes)
complex recursive data
generative recursion ;; String -> [Listof iTuneRecords]
(define (retriev-database file-name)
design with accumulators (list->iTune-Record
(read-file-as-list file-name)))
modules and abstract data
functional data representations ... process titles, singers, ...

loops and iterators

Saturday, July 23, 2011


HtDP/2e
context: real data

finite data #lang 2htdp/isl

simple recursive data (require 2htdp/batch-io)

functional abstraction ;; String -> [Listof iTuneRecords]


complex recursive data (define (retriev-database file-name)
(write-as-csv-file
generative recursion (add-row-to-spread-sheet
design with accumulators (read-file-as-csv file-name
process-cell)))
modules and abstract data
;; Cell -> ...
functional data representations (define (process-cell c)
loops and iterators ...)

Saturday, July 23, 2011


HtDP/2e
context: real data
#lang 2htdp/isl

(require 2htdp/universe)
finite data (require 2htdp/batch-io)
(require google-yahoo-credentials.rkt)
simple recursive data
functional abstraction (define (main s)
(big-bang (retrieve-maps
complex recursive data (retrieve-coordinates s))
generative recursion [to-draw draw-first-map]
[on-key rotate-maps]))
design with accumulators
;; Address -> Coordinates
modules and abstract data
(define (retrieve-coordinates address)
functional data representations (read-url YAHOO-GEO-SERVICE ...))

loops and iterators ;; Coordinates -> [Listof Image]


(define (retrieve-maps coordinates)
(read-url GOOGLE-MAPS ...))

Saturday, July 23, 2011


HtDP/2e
context: beyond big-bang

finite data #lang 2htdp/isl

simple recursive data (require 2htdp/universe)


(require 2htdp/image)
functional abstraction
complex recursive data ;; Nat -> OrcWorld
(define (launch-orc-battle s)
generative recursion (big-bang (create-orcs-and-fighter s)
design with accumulators [to-draw render-orc-game]
[on-key fight-orcs]
modules and abstract data [stop-when win-or-lose?]
[on-tick counting-down]))
functional data representations
loops and iterators ...

Saturday, July 23, 2011


HtDP/2e
context: beyond big-bang

finite data
World World
simple recursive data
functional abstraction
complex recursive data
World
generative recursion UniverseServer
design with accumulators
modules and abstract data
World
functional data representations World
loops and iterators

Saturday, July 23, 2011


stop

Saturday, July 23, 2011


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

Das könnte Ihnen auch gefallen