Human-Centered Programming Languages
This book is designed as a flexible textbook for teaching about programming languages through the different kinds of people that study them, and through an interdisciplinary approach. Its largest audience is upper-level undergraduates in computing majors, but is intended to have something for everyone from newcomers to experts
Chapters
Chapter 1 Introduction
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 2 What is a Language?
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 3 Programming in Rust
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 4 Regular Expressions
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 5 Context-Free Grammars
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 6 Parsing Expression Grammars
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 7 Abstract Syntax Trees and Interpreters
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 8 Operational Semantics
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 9 Types
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 10 Users and Designers
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 11 Quantitative Methods & Surveys
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 12 Qualitative Studies
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 13 Gender
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 14 Disability
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 15 Media Programming
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 16 Play
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 17 Natural Language
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 18 Diagramming
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 19 Process Calculus
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
Chapter 20 Cost Semantics
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
More Instructor Materials
| function($$renderer5) { $$renderer5.push(`<span class="etc svelte-1tcvxk9">`); Muted($$renderer5, { children: ($$renderer6) => { if (editable) { $$renderer6.push("<!--[0-->"); Toggle($$renderer6, { on: chapter.isForthcoming(), save: (on) => setChapter(edition, chapter, chapter.asForthcoming(on)), children: ($$renderer7) => { $$renderer7.push(`<!---->${escape_html(etc)}`); } }); } else { $$renderer6.push(`<!--[-1-->${escape_html(etc)}`); } $$renderer6.push(`<!--]-->`); } }); $$renderer5.push(`<!----></span>`); } | |
ReferencesEverything cited | ||
IndexCommon words and where they are | ||
SearchFind where words occur | ||
MediaImages and video in the book |
License
All Rights ReservedWant to print this book or generate a PDF? See all chapters on a single page and then print or export. Long books can take some time to render.
E-book
Reading on an e-reader? Build an EPUB of this book. Images are shrunk to fit the size you choose, so pick the one closest to your device. Long books with many images can take a minute.
Citation
Rose Bohrer (2026). Human-Centered Programming Languages. …, retrieved 9/9/2026.
Editions
1st 7/13/2023 read
This edition of HCPL is a living document. It is not a mere work-in-progress but is subject to substantial change as the work evolves.