Popular vs. Great
Cedric posted a blog about fans of frameworks at The Fan Syndrome. I think the main point was that a framework could be good, without being popular. It's an interesting premise that I explore in detail in Beyond Java.
1) Lots of fans == successful framework == popular framework
Most framework developers want to be successful, so they need lots of fans. Sometimes, that means you've got to aggressively ride a wave that shouldn't be ridden, like XML everywhere, against your better judgement.
There are a whole lot of poor frameworks with lots of fans, like EJB 2.
2) Great framework != successful framework
The best framework developers start with good motivations. They want to improve the lives of their users in some way. But sometimes, that's not enough. There are lots of examples of great frameworks that never accumulated lots of fans. I've often promoted frameworks that did not win, even if I knew they might not win in the end. I love Rife; not sure if it will ever be successful on the order of Spring or EJB 3. A great framework needs to "cross the chasm" (see great marketing book by Moore), moving beyond early adopters to pragmatic everyday developers, to be a successful framework. Java crossed the chasm; Smalltalk didn't.
Some frameworks have great technology, but never experience broad success.
3) Great framework != successful programmer
This is the first tough one. You can pick a good framework, and get burned. Stagnation and momentum are important. The best horse doesn't always win the race. The problem is that the losers may finish second, or collapse so you're trampled by the eventual winner.
Good technologies sometimes fail spectacularly.
4) Popular framework + great framework == successful programmer.
This one is usually true. Rod Johnson and Juergen Hoeller didn't get hit by the same truck, and developers the world over are happy about that because they're much more productive. Spring, log4j, and Hibernate are a few examples, but there are hundreds. But here's the tough part. Great is subjective, greatness often fades, and popular is subjective in the early stages.
When you can choose great and popular, you should.
Breaking it down
So, there are a number of interesting issues for me as an independent consultant here.
- My radar comes on strong when someone aggressively speaks out against an acknowledged great framework, that is also rapidly gaining in popularity. I wonder, what's the motivation of the speaker?
- I often look for popular frameworks that for whatever reasons are not great frameworks in certain contexts. The reason is clear: I can provide a whole lot of value to a whole lot of people that are possibly using something that's just plain wrong or out of context. BFLJ, Beyond Java, Bitter Java, and Bitter EJB were all books on this theme. To a lesser extent, Spring ADN was on that theme too, as an extension of BFLJ.
- If you want to spot the great frameworks that will also someday be great, popular frameworks, you need to be studying both technology and marketing.
- I'll be coming out more aggressively for Ruby on Rails in the next couple of months, because it is clear to me that RoR will be a popular, great framework based on the steepness of the adoption curve. RoR will cross the chasm. The leading edge of a disruptive technology is a good place to be. I can help a few customers secure a competitive advantage, and I can help my customers deliver more value and charge more money for what they do. That's important for both my customers and me in an era of globalization.
- I think Spring is another good place to be. Spring is a popular, great framework. Spring has crossed the chasm.
- I think Java's greatness is fading, as all great programming languages fade. We simply accumulate new understanding. Java has crossed the chasm, but its greatness may be failing.
So the "fan syndrome" is complicated. Are you defending fading greatness, are you blindly supportive of popular but not great, or are you objectively identifying popular greatness? Time will tell.