meaningful software: on pattern languages and design forces

introduction