- We don’t have many forward-looking guidebooks on how to design PLs!
- Not guidebooks but historical records of how PLs have been used and designed
- Hints on Programming Language Design, Hoare
 - Why Functional Programming Matters, Hughes
 - Lisp: Good News, Bad News, How to Win Big, Gabriel
 - Confessions of a Used PL Salesman, Meijer
 - How enterprises use functional languages, and why they don’t, Wadler
 
 - Some guides are more limited in scope but more concrete
- How to design a good API and why it matters, Bloch
 
 
 - Not guidebooks but historical records of how PLs have been used and designed
 - Sarah’s rules of thumb
- Figure out what users need
- Ideally, do formative studies etc.
 - If you can’t do all of that…
- Write out >20 programs that could benefit from category of abstraction we’re considering
 - Brainstorm abstraction alternatives
 - Write out programs using each of alternatives
 
 - A better guide if you can do user studies
- Learn what tasks are easy
 - Learn what tasks are hard
 - Learn what natural language is easy
- How do they naturally express their domain?
 
 
 - 
e.g., Sarah studying social scientists doing web scraping
- She learned that they don’t know how to express parallelism, but they know how to express deduplication
 - They have an intuition for “if these rows have the same name and author, deduplicate”
 - You can use this info to get parallelism!
 
 - 
e.g. programming robot motion
- They printed out physical arrows with QR codes that instruct the robot “go here” or “pick this object up”
 - They have little corner pieces that say “stop at this corner!”
 - Situated Tangible Robot Programming
 
 
 - Do what makes them successful
 
 - Figure out what users need
 - Class activity