Seven Blind Alleys in Software Design
Are we progressing as an industry?
Learning from experience, see people trying the same things that is proven "it will not work".
This is a talk on the
1. Programming in pictures
Usually does not go all the way and creates maintenance issues for the corner cases
- CASE tools
- Visual Programming Languages
- MDA
- Executable UML
Some complexity is irreducible and cannot be made easy by introducing pictures
Most programming is visual anyway
2. Metaprogramming
Endless flexibility options, but the downside is the understandability.
Need to find the right balance of doing vs overdiong
Examples:
- Smalltalk
- UML Meta metamodel
- Ruby
- Configurable systems
- Can undermine the confidence in the system
- Testing is difficult
3. The ultimate abstraction
Examples: Xanadu - Ted Nelson
Chandler - Mitch Caper
Over-analysis is a keyword.
Most happens when people want ultimate flexibility
And it always seems like it is just a step away..
How to solve: Publicize bad cases
Apply deadlines :-)
4. The perfect taxonomy
Examples: IBM San Fransisco and Taligent.
One Account to rule them all.
Generalizing too early (e.g. frameworks)
The truth: There is no uniform vocabulary across all domains
Languages are ambiguous
5. Modeling the real world
Does not always work. Need software specific abstractions.
6. Code generation
Similar as "programming in pictures".
Should not try to do everything with a code generator.
Over-reliance on code generation can de-skill development.
Cruft buckets - avoiding dealing with complexity. All logic is put in one bucket.
7. Natural languages
The belief that we can program in natural languages.
Fluent interfaces.. examples are date time libraries and jMock?
This is good since it makes things read better, but it is not natural language since it has constraints.
Example: Fluent interfaces, BDD, DSLs,
This is nice, but we need to consider the testability and the constraints that is inevitably present in programming languages
No comments:
Post a Comment