Mads Torgersen, language designer for C#, described about his approach to language design his talk at Codemash. I don’t know the first thing about C#, but I did like a point he made regarding how they evaluate possible new features for the language.
When considering adding (or changing, or removing) a feature in the language, it has to satisfy two criteria:
- Tactical relevance - The feature is useful for solving a real problem for a real user, right now, today.
- Strategic relevance - The feature moves the language in the direction the designers want it to go over the long term.
You can easily imagine having only one or the other. A feature which is a quick workaround to accomplish some immediate goal, but which doesn’t reflect the long-term vision, would only satisfy tactical relevance. And a feature which fulfills some academic goal and might be useful “someday” only satisfies strategic relevance.
The harmony of tactical and strategic relevance on each day-to-day decision, aggregated over the long term, creates a truly useful and innovative product.