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:
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.