I have two personal, intertwined research goals: learning how to
design programs systematically and creating a language that helps me
express my thoughts.
My first goal is to discover how to design programs, components,
and programming systems systematically. I don't know any other way
to understand design than to program and re-program and re-re-program
small and large programs. As I am getting to understand what happens,
I am writing things down in How to Design
Programs, How to Design Components and
How to Design Systems, ordinary text books at first glance but a second look will pay off.
One day I may distill the
ideas in to a small little book called How to Design.
My second goal is to design a programming language that supports the
programming styles needed for my first
goal. Racket is the evolving
subject of this project. I recently had a chance to lead-author
Manifesto, which spells out my perspective on this 20-year-old and
on-going project. Please read the paper if you want to know what
the Racket project is all about.
With my current and former students I work on a variety of projects in
support of the Racket project:
In addition, Tony
Garnock-Jones and I are working on a functional framework for
programming and reasoning about distributed and interactive graphical
programs, a generalization of my 2htdp
library for Racket. This provides me with a personal "playground" for
exploring and testing all of the above in practice.
Financial support for my research currently comes from NSF, DARPA, AFOSR,
CISCO, and Mozilla. Past funding sources include CORD, US DoED, Exxon,
Microsoft, and Texas ATP.