TL;DR
Patrick S. Li argues that the biggest productivity gains come from rich, easy-to-use libraries rather than new programming languages. He shows how language features directly enable certain libraries and frameworks, using Ruby on Rails, Java, C, Scheme and his own Stanza work as examples.
What happened
In an essay, Patrick S. Li challenges the notion that designing new general-purpose languages should be a primary goal. He contends that readily available, high-quality libraries drive most programmer productivity—especially for non-experts—citing Ruby on Rails as a case where the framework, not the language alone, enabled widespread web development. Li explains that many libraries exploit specific language features (Ruby's meta-programming, runtime evaluation, first-class functions, and garbage collection) that make Rails possible and hard to replicate in languages lacking those features, such as Java or C. He traces how older languages like C favored collections of functions because of their limited reuse mechanisms, while the rise of interactive software increased the demand for extensible libraries and frameworks. Li also describes his own motivation for creating Stanza: frustrated attempts to build an easy-to-use game library in Java led him to prefer languages with continuations (Scheme) for cleaner abstractions, while noting trade-offs such as static typing's compile-time checks.
Why it matters
- Libraries, not language syntax alone, are the main source of productivity gains for many programmers, particularly non-experts.
- Language design constrains what kinds of libraries are feasible and how ergonomic they can be for end users.
- Frameworks that appear simple on the surface often depend on subtle language features (meta-programming, runtime evaluation, continuations).
- Choosing a language involves trade-offs: some features enable expressive libraries while others (like static typing) catch errors early.
Key facts
- The essay argues that large gains in programmer productivity stem from available libraries and frameworks, exemplified by Ruby on Rails.
- Ruby on Rails makes pervasive use of Ruby features such as meta-programming, runtime evaluation, first-class functions and garbage collection.
- Languages without equivalent features (the author cites Java and C) make it difficult or impossible to recreate some libraries like Rails.
- The Tiobe index is referenced to note that Java and C rank highly in usage compared with Ruby.
- Historically, many libraries were collections of functions (as in C) because early reuse mechanisms were limited.
- The arrival of interactive software increased demand for extensible libraries that can invoke user code in response to events.
- Framework-style libraries often rely on subclassing and overriding in languages like Java and C++.
- The author developed Stanza after struggling to build an easy-to-use game programming library in Java; Scheme's continuations made certain designs easier.
- There are trade-offs: dynamic languages can hide type and memory management details from users, while statically typed languages provide compile-time checks.
What to watch next
- Whether language designers begin prioritizing features that make it easier to build expressive, reusable libraries (not confirmed in the source).
- The emergence or porting of Rails-like frameworks to statically typed languages and the tooling or language extensions that might enable them (not confirmed in the source).
Quick glossary
- Library: A collection of prewritten code that provides reusable functionality developers can call or integrate into their programs.
- Framework: A structured set of libraries and conventions that define an application's architecture and often require developers to extend or hook into predefined behaviors.
- Meta-programming: Techniques that allow programs to treat code as data, generating or modifying program structure at runtime or compile time.
- First-class function: A function that can be passed as an argument, returned from other functions, and assigned to variables like other values.
- Continuation / Coroutine: Control-flow abstractions that let a program pause and resume execution at specific points, useful for expressing sequences of steps or cooperative multitasking.
Reader FAQ
Why does the author say libraries matter more than new languages?
He argues that most programmers gain productivity from accessible, high-quality libraries; the language mainly matters insofar as it enables those libraries.
Can Ruby on Rails be ported directly to Java or C?
The essay contends it's impractical because Rails relies on language features (meta-programming, runtime evaluation, first-class functions) that Java and C lack.
Did the author create Stanza because of limitations in Java?
Yes. He describes being frustrated building an easy-to-use game library in Java and seeking language features (continuations) available in Scheme.
Do dynamic languages always make better libraries?
Not necessarily; dynamic languages can mask types and memory management for users, but statically typed languages provide compiler checks—each has trade-offs.
HomePhilosophyDownloadsDocumentationPeopleCommunityNewsReference NAVIGATION "Stop Designing Languages. Write Libraries Instead." "Stop Designing Languages. Write Libraries Instead." Patrick S. Li – May 29, 2016 I had a friend tell me recently that all…
Sources
- Stop Designing Languages. Write Libraries Instead
- For Libraries the Future Is a Foreign Country
- 21st Century Libraries: Changing from the Ground Up
- How U.S. public libraries are closing the language gap
Related posts
- Greenland’s Hidden Mineral Wealth Under the Ice: History, Risks, and Hurdles
- Are We Finally Exhausted by Social Media’s Commercialized Networks
- Recreating Steve Jobs’s 1975 Atari Horoscope Program — Run the Emulation