There's no way to respond to quite all of the fascinating questions you are 
raising in one message, but I'm packing up tonight to head for Beijing to 
speak at the inagural Java China Conference (http://www.javachina.cn), so 
I've got a few minutes to wax philosophical. This is also probably worth a 
couple of blog entries, too, but those will have to wait until I have time 
to sit down and compose them.

A (very few) scatttered comments inline ... not commenting on something 
doesn't mean I do not find it interesting, just that I have a limited amount 
of time to respond tonight.

On 9/9/05, Murray Collingwood <[EMAIL PROTECTED]> wrote:
> 
> I'm just a humble Struts user (and relatively new), and I don't claim to 
> speak for the
> group as a whole.
> 
> I have read through Donald Brown's presentation (Struts 1.3 and beyond) 
> and I get the
> feeling that the goal posts just don't stop moving.


I'm afraid that this is the nature of the software developer landscape. 
You've heard the term "Internet time"? That is the environment in which we 
(as application architects) need to decide which technoogies to become 
dependent upon. The gamble, of course, is that the lifetime of the 
technology will correspond with the lifetime of the application you build on 
top of it. Sometimes you win, sometimes you lose.

Ironically, Struts 1.x triggers people to respond at both extremes, as well 
as everywhere in the middle:

* It evolves very slowly, engendering confidence that I can count on support
over a multiple year lifetime for my application.

* It evolves very slowly, and since it was originally designed five years 
ago,
it is hopelessly out of date relative to current best practices, and should
be tossed on the trash heap.

Both answers are quite reasonable and understandable ... depending on your 
perspective.

The time I have spent learning and creating a Struts application should be 
> an
> investment in my future development, not a stepping stone to a whole new 
> set of
> technologies that will continue to slow my productivity (through on-going 
> training).


I think this goal is reasonable in the short term, but naive in the long 
term. You have to *count* on the technologies you understand today becoming 
obsolete -- and the pace of that obsolescence is higher in software than in 
any other profession I've ever looked at (although they *all* suffer from 
this). A couple of thought points on this topic to consider:

* My son (now in his early 20s) is also a geek -- he really likes PHP, but
I love him anyway :-). In between contract jobs, he's working towards a
college degree ... but he's taking my advice to do something other than
Computer Science. Why? Because even if he were following the traditional
route of doing college in four years, anything *technical* he learned would
be totally obsolete by the time he graduated. It's important to learn the 
fundamental
principles of good software development, but you've got to understand that
the point technologies you use at any given time are ephemeral.

* I took my own advice when *I* was in college :-), and have a Business 
Administration
degree, with an emphasis in Accounting. You'd think (from the outside) that 
there couldn't
possibly be a profession that changes slower than accounting, but I can 
guarantee you that
this is not the case. Once you get past double entry bookkeeping, everything 
I learned in
college (even if I remembered it all, 30 years later) would be totally 
obsolete.

* The same sort of thing happens in scientific fields all over the map. For 
example,
I aced a test on Astronomy by (among other things) nothing that Jupiter had 
12 moons,
Saturn had 9, and so on. Those facts were considered true at the time ... 
but not any more.

* Would you trust a doctor today to diagnose you with a 1950s medical 
education?
Or even a 1990s medical education? Like basically all professions, medicine 
(and software)
assume that a lifetime of learning new things is a fundamental requirement 
for success.

I spent more time on this particular paragraph than the others below, to 
give you a feel for why I answer some of those questions the way I do.

Who, and this is my question, who makes the decision whether a technology is 
> going to
> be good for the greater community? Who asks the questions "Do we need 
> it?", "Will
> the technology provide significantly greater returns than training 
> costs?", "Will the
> technology last long enough to deliver those returns?"


Software development is like everything else ... it doesn't come with a 
crystal ball. At best, someone tries to create an answer to perceived needs, 
and then the market responds by indicating whether (a) the need was actual, 
and (b) the provided solution actually met that need.

Open source software has very different economics on doing this sort of 
stuff than you see in traditional product development at corporations that 
build and sell "stuff", but it's the same basic issues under the covers. 
Nobody knows *for sure* what the future holds, and what people will want 
then. And different open source projects do things differently -- at Apache, 
though, the direct day-to-day decisions of what happens next are up to the 
committers on that project. There's good writeups of roles and 
responsibilities that are worth looking at ... a good starting point for 
exploration is:

http://jakarta.apache.org/site/getinvolved.html

At Struts, in other words, the actual decisions about what code gets 
committed to the workspace is made by the committers (of which there are 
currently 15 or so). In turn, those committers get driven by what interests 
them, and what input they get from the community. Successul open source 
projects tend to listen to the latter more than unsuccessful ones, but it is 
very difficult to generalize on detailed practices.

Who is it that has decided we need to keep extending the Struts framework 
> without
> considering the developers' need for better problem identification and 
> documentation of
> the existing Struts system. This list gets so many emails of people 
> struggling with
> existing technology: Dynaforms, Validation, Iteration, Cookies, Flow 
> control, and the
> number of different versions of everything "out there" that we need to 
> know about in
> order to work with this system.


Personally, I'm in agreement with you ... the Struts 1.x architecture needs 
to be fundamentally replaced. That's why I spend my own personal open source 
development time on Shale, where I am not stuck with concerns about 
backwards compatibility. An incredible number of lessons have been learned 
in the five years that Struts has existed. But those lessons cannot be fully 
harvested without creating something completely different.

That being said, there are *millions* of applications based on Struts 1.x in 
the word today. It would be totally irresponsible for the Struts development 
community to abandon the developers who created those applications. 
Therefore, it is entirey appropriate that an evolutionary path occur -- in 
parallel to one or more "revolutionary" paths, since we don't have crystal 
balls handy :-).


Who answers the question, "Why aren't we getting better error checking / 
> debugging
> facilities for Struts?"


On this kind of "evolutionary" question, the answer is simple: "because 
nobody has gone out and built a revised mousetrap that has better features." 
Struts is not the creature of a corporate entity ... it is a labor of love 
by volunteers. And there are no boundaries on who those volunteers might be 
-- it could be you! What have *you* done to solve this problem?

Reminds me of how I got involved in open source software in the first place. 
I was working on a startup, and we (of course) had no money, and needed a 
cheap application server solution. Apache JServ (predecessor to Tomcat) fit 
the bill ... but they sat at version 0.9 for months and months ... until my 
son told me "Dad, you know Java, it's open source, go help them fix it!" So 
I did.

It would be amiss of me to say Struts alone is responsible here, we should 
> include
> Tomcat, MySQL, Connector/J, JSP, Java. And I'm not saying everybody is 
> doing a
> terrible job, just asking whether we need to refocus our development 
> efforts.
> 
> I'm not a fan of Microsoft but at least they have somebody that makes 
> those decisions
> and they appear to be developing their technology for productivity. They 
> have
> documentation. They have tutorials. They have backward compatibility. And, 
> have
> you noticed how many websites are using .NET technology! The number seems 
> to
> growing much faster than J2EE or JEE.


I'll have to both agree and disagree with you with regards to Microsoft.

Yes, they have an overall story that is pretty effective, and enough 
developers to build cradle-to-grave technologies to make it come true. That 
is quite different from the Java ecosystem, where it's a bunch of 
cooperative efforts, instead of a single monolithic organization, that makes 
it all happen.

But "backwards compatibility"? Give me a break. Ask any VB developer what it 
will take them to learn VB.Net. Or how easy it is to convert an ASP page to 
ASP.Net. It's learning a new technology and applying it.

Note that this is, again, the nature of the beast. You can't champion both 
"backwards compatibilty" and "rapid radical innovation" -- the two goals are 
in a substantal degree of conflict.

When I was looking for an ISP to host my Struts application I found many 
> more
> companies providing Microsoft servers with .NET than Unix/Linux servers 
> with the
> necessary version of Tomcat or JBoss.
> 
> If I were to write a web product to be sold and run inhouse, I would 
> probably develop it
> using Microsoft technology, it's just so much easier to say, "requires IIS 
> 6+ and
> SQLserver 2005+" and know that it will work. If you had to ship your 
> product how many
> technologies with specific versions would you have to list?


I'll let others comment on the "know it will work" comment :-). My personal 
experience with building JSF components and getting them to work in IE, for 
browsers that theoretically implement the W3C standards for HTML, makes me 
chuckle reading this paragraph.

Is Struts in danger of becoming just an academic exercise? If Struts is 
> going to be
> productive then we need to see:
> * more documentation (and I'm not talking about the API, I'm sick of 
> trying to read the
> API and guess the usage of the taglib functions) plus tutorials, online 
> training etc,
> * more tools for building our applications (I know there are some but I'm 
> on NetBeans
> and it appears to be lagging behind, Eclipse and Exadel I found to be too 
> inflexible),
> * more error checking of the configuration files and better error messages 
> indicating
> what the real problem is, maybe even warnings before the program runs,
> * more debugging utilities (spying on the http conversations and being 
> able to
> examine the contents of our beans),
> * more backward compatibility so that I don't have to spend hours 
> upgrading my app
> when my server updates or I move to a new server,
> * more stability in the platform we choose (with reference to the recent 
> Tomcat bugs
> that were brought to the attention of this list).


Have you looked around yet? In the Java web application framework space, 
Struts is ***by far*** the leader, even today, in terms of robust support 
and documentation (not just from the project itself, but from tools and 
third party sources like books and knowledgeable consultants). JSF is 
getting there. Nothing else is even close.

That being said, it's still an open source project. If *you* believe that 
the sufficient resources are insufficient, where's *your* contribution to 
make it better?


If I were asked to vote it would probably be a conservative vote to 
> consolidate our
> current technologies with better tools and a better product.
> 
> Okay, there, I said it. It's out of my system and open for discussion.
> Kind regards
> mc


I hope you'll find my comments useful in furthering this kind of discussion. 
But I'm starting from a different place than you ... I personally think it 
is a waste of time to improve the tools and documentation support for a five 
year old architecture that is definitely showing its age. It's time to 
leverage all the things we've learned in the past few years ... and provide 
*transition* strategies for existing framework users (while also providing 
incremental improvements and bugfixes to those who cannot transition as 
quickly as we geeks might like).

But, assuming that you can learn a technology once and let it be the 
foundation for an entire career is hopelessly idealistic.

Craig

Reply via email to