I've been playing with Firefox 2.0 betas, and am surprised at how little has changed since earlier versions. Thinking about this further, I shouldn't be that surprised -- Firefox is a mature product in a mature market, and one of the things about things in that state is that there isn't that much to do -- we're in the realm of mostly small improvements. Other markets, like Automobiles, reached this point a long time ago - proceeding honestly, we can't expect cars to keep improving by leaps and bounds for the 120 or so years we've had them. Occasionally we see big changes (airbags, hybrid/gas engines, etc), but by and large the field has become boring. Like with cars, sometimes we see changes that are just for the sake of "mixing it up" -- merging downloads under a download manager (which I loathe -- I want the old, separate windows behaviour) is the software equivalent to changing the frame shape of a car. Is there room for much improvement in browsers? If there is, I suspect that it lies in the direction of intelligent agent behaviour -- once software goes far enough, that remains the final area to journey into. Sometimes this goes rather well (intelligent completion in IDEs), sometimes it goes rather badly (Clippy). There are a few barriers to effectively make software like this:
- It's hard to debug, because to be really effective it relies on storing a lot of information about what the user has done in the past
- The cost of not getting it quite right is high - ineffective help irritates people more than no help at all, and users will switch such features off (if they can) even if there's a net savings of time
- It's hard to design, involving skills that programmers of the system usually don't have. The more deep and numerous the other disciplines a programmer needs to implement, or the more non-programmers they need to talk to to understand what they're doing, the less likely such functionality will be implemented correctly and well.
- Programmers often won't use it, so the "eating the own dogfood" factor is hard to apply
- The stuff going on the scenes is often too complex for users to understand and tweak to their needs. If, for example, I turned on predictive function completion, should I need to read a long document describing the knobs the thing has? Alternatively, if I want to tell it to never tab-complete some functions when I'm working on a particular module, what's the best way to do this? We might say it should notice, but if so, when I write new modules, I might want it to immediately figure it out if I know what I want and can tell it.
In the future, perhaps knowing how to program will be a passport for computer literacy... Intelligent Agents represent another path -- we may go down both or neither.
It turns out this is a great time to visit the Cleveland/Brecksville area -- this saturday is my grandpa's 80th birthday.