When first starting Java, many developers are easily overwhelmed with the enormous options between development environments, technology, and implementations. Should a developer use the reference implementation (RI), open source, or commercial products? With new open source projects popping up all the time, the decisions become more difficult everyday.
In Anti-Pattern - The Swiss Army Effect, John Reynolds expresses concern of the expansion and growth of Java technology, and the technology overlap that is occurring. For instances where does one go for database CRUD operations? JDBC, JDO, CMP? Web development can be just as frustrating. Web development products include JSF, Velocity, Struts, Tapestry, and Jetspeed for starters. The large selection provides grief to many.
"If the only tool you have is a hammer, you tend to see every problem as a nail." - Abraham Maslow
Microsoft's claim to fame is their one homogenous, well-integrated, do it all environment. Even though Microsoft VisualStudio falls way short of free tools like Eclipse, and the .NET architecture is lacking features like an Object/Relational Mapper (ORM), the developers don't have all those decisions to make, they just make what they have work. Is it choices that breed discontentment?
The hammer mindset is understandable. Getting a solid grasp around just one of the tools is difficult. Both developers and customers try to learn one technology and apply it to all problems. Trying to look at the market place and second-guess the future is equally dreadful.
The experienced engineer seems indecisive. Whenever asked a question, the engineer simply replays with 'it depends'. What is the web site developer trying to accomplish? If it's a static content site, maybe Cocoon is the answer. Is it's a portal site, maybe Jetspeed. Perhaps Struts if the site requires dynamic web forms. Does the customer allow open source? Has the customer already invested in a specific technology? Who are the other developers on the team? What is the time frame of the project?
Knowing the basics of solid development far outweighs which package/technology/tool used. Tools & technology change, concepts and practices just adapt to the changes.
Final thought: Regardless of the profession, doctor, lawyer, or engineer, the focus is on the 'principles' and not the 'tools'. Being a great doctor does not change based on new drugs or procedures. Great doctors work to understand the unique needs of the patient by doing such things as analyzing symptoms, understanding the patient history, and simply listening.