Send email to
Send physical documents to my postal address.
If you come yourself you'll want directions.
Telephone +1 617 627 4923.
Skype (chat preferred): norman-ramsey
Yahoo chat: norman_ramsey
Fax +1 617 627 2227 (but if you can, scan and email instead)
My vita and public key (now with photo!) are online.
I type 75 words per minute. We are typists first, so test yourself.
I do research in programming languages and teach a mix of classes at Tufts University. In the last five or six years, I have had my fingers in a lot of pies:
Working with João Dias, I developed methods of automatically generating an instruction selector—the heart of a code generator—from declarative machine descriptions. We've also published the abstraction that the instruction selector is built on. We published this work in POPL.
I have poured a great deal of effort and creativity into the design and implementation of tiny programming languages that students and others can use not just to learn about, but actually to build programs using, some of the greatest ideas in programming languages: functions, types, and objects. These languages form the skeleton of a new book, Programming Languages: Build, Prove, and Compare, which will be published by Cambridge University Press.
My professional home (and my heart) are in functional programming, and recently
I've done a little functional programming with computational biologists, which we published in ICFP.
I've also been investigating ways of engineering definitional interpreters to be more efficient, without making them much harder to write. We published this work in PPDP.
Finally, João Dias, Simon Marlow, Simon Peyton Jones, and I spent several years developing a new code generator for the Glasgow Haskell Compiler (GHC), which in 2014 was finally deployed as GHC's default code generator. The most interesting component of the new code generator is a reusable, higher-order optimization library (Hoopl), which uses generalized algebraic data types to guarantee at compiler-compile time that no matter what Haskell program it is given, GHC never builds an ill-formed control-flow graph. Hoopl was published in the Haskell Symposium
Last, but not least (in terms of effort, anyway), I have revamped a significant portion of Tufts's required undergraduate curriculum in computer science. Our students are required to take four courses that have programming assignments. I have changed or am changing three of them.
Our third course, COMP 40 (Machine Structures and Assembly-Language Programming), is most similar to a course in machine organization or systems programming. I redesigned the course to focus on two sets of skills: applied data abstraction and machine-level programming. The redesigned course, which has now been taught by three other instructors, is viewed by some as the most valuable course in our department. It is highly praised on surveys of graduating seniors, who are given the opportunity to identify just one course that exemplifies ``what a truly excellent college course should be.''
I replaced an older "paradigms" course in programming languages with a new required course in programming languages, COMP 105, which demands that students learn to use key programming-language ideas in actual programming, and which also demands some mathematical content (e.g., operational semantics, equational proofs). The course, which uses my draft book Programming Languages: Build, Prove, and Compare, effectively serves as our fourth programming course. COMP 105 is also highly regarded by students and mentioned on senior surveys, although not quite as much as COMP 40.
I have recently piloted a first course based on How to Design Programs by Felleisen et al.. In the process I made some discoveries about teaching this material, and my analysis, refinements, and recommendations have just been published at the International Conference on Functional Programming (ICFP).
My teaching and curricular work were just recognized with the 2014 Lerman-Neubauer Prize for Outstanding Teaching and Advising. This prize is awarded annually to a member of the Tufts faculty who has had a profound intellectual impact on his or her students, both inside and outside the classroom.
This page show my most significant and most recent papers.
Links are to abstracts so you can check
out the topic without downloading a monster.
For a complete view, including older work, see my
The ACM requires this disclaimer:
The documents contained in these pages are included to ensure timely dissemination of scholarly and technical work on a non-commercial basis. Copyright and all rights therein are maintained by the authors or by other copyright holders, notwithstanding that they have offered their works here electronically. It is understood that all persons copying this information will adhere to the terms and constraints invoked by each author's copyright. These works may not be reposted without the explicit permission of the copyright holder.
In Fall 2014 I am teaching COMP 150PP (Probabilistic Programming Languages) and COMP 150TW (The Engineering Method of Technical Writing).
In the past, I have taught COMP 50, a pilot version of the first course that I have co-developed with Ben Hescott; COMP 40 (Machine Structures and Assembly-Language Programming); COMP 105 (Programming Languages); COMP 150GIT (Functional Programming and Source-Code Control); COMP 150DAO (Dataflow Analysis and Optimization); COMP 150FP (Advanced Functional Programming); and COMP 150TW (The Engineering Method of Technical Writing). I have also taught many courses at other universities that need not be named.
Resources for Students
I am always interested in discussing projects with students, and I often have several undergraduate or master's students working with me part-time.
I have gathered material of interest to research
students, including resources for
how to give a talk.
Undergraduate research students might also be interested, especially in my thoughts about how to get admitted to a PhD program. And I tell you what you need to give me (and when) if you want a letter of recommendation.
I currently serve ACM as a member of the SIGPLAN Executive Committee. I served as program chair for ICFP '07.
I signed the email charter; if you won't, I won't. I don't carry a cell phone. I no longer maintain a hot list; this is more of a random list. An interest in personal productivity and pointers from Benjamin Pierce and Phil Wadler got me to Inbox Zero on Wed 21 Feb 2007 at 6:00 PM. After serious lossage caused by various alarums and excursions, I recovered Zero at 6:30 PM on Mon 31 Dec 2007. It was a pleasure to start the New Year with an empty inbox! After starting at Tufts, I got a little behind; at the end of my first year, my email debt was over 600 messages. At the end of my third year, at 9:12 PM on Monday 23 May 2011, I recovered Zero once again, but I cheated—I put 600 messages from 2009 and 2010 into an email demilitarized zone. The next time I got to Zero was at 5:03 PM on Wednesday 29 August 2012, again at 2:54 PM on 30 May 2014, and again at 6:34 PM on 12 November 2014. For a time I almost thought I detected a pattern there.
I'm a Bellcore alumnus
Luxuriant Flowing Hair Club for Scientists,
and I have an Erdös
Number of 3.
I've been seen wearing orange and
Despite these distinguished credentials,
I'm not ashamed to subscribe to a magazine with a centerfold.
A secret vice is that I used to answer programming questions for
fun; at one time,
I was the 40th most reputable contributor (out of over 100,000).
Along the way I earned silver Specialist badges in C, Haskell,
and a couple of other topics.
Although it surprises some people, for over forty years I have been a football fan. When it's not football season, I've been known to play Guild Wars. I also have a rare autographed copy of Ad Verbum. I try to avoid P. J. Brown's deadly sins. I'm married to a licensed psychologist and game designer. I've appeared onstage (and in various clubs) as a jazz pianist, as a dancer, but most often as a chorister. My wish-fulfillment dreams are of sleeping.