This document discusses domain-specific languages (DSLs). It defines a DSL as a computer language specialized for a particular application domain, in contrast to a general-purpose language. The document notes that an internal DSL is just a particular idiom for writing code in a host language, like Ruby, while an external DSL is a separate language parsed into data the host language understands. Examples of DSLs given include SQL, CSS, Rake, and ActiveRecord migrations. Reasons for using DSLs include improved developer productivity, understandability by non-programmers, and that code reads like a conversation. The document clarifies that while tools like FactoryGirl and Fabrication provide syntax helpers, they are not