It is my belief that when it comes to craftsmen, there are two types. There are those who have learned their craft inside and out, use the right tool for the job whenever possible, and when they don't have the right tool handy can usually do the job anyway with the tools at hand. Then, there are the hammer guys. These guys know how to use one tool: a hammer. To them, everything looks like a nail.
There is a reason that I started with that. Recently, I've been involved in some discussion threads over at Code Project that, quite frankly, have me shaking my head in disbelief. Note: I am not going to link to this moron's articles, as I sincerely hope that they will be placed in Purgatory shortly, and thus, my link would be broken anyway.
Basically, for the last two years, this "gentleman" has been using Code Project to push a replacement for HTML that he developed and named after himself. He has written his own browser for this "standard" (which only consists of text, anchor and image tags), and has written a series of articles on how to use his "standard" and how to convert from HTML to this "standard." (Before you ask, yes, I am enjoying putting the quotes around "standard." At least I'm not putting quotes around random words in the sentence.)
This person is doomed to failure not only due to his lack of thought on his "standard," but also due to the very nature of the way problems are solved.
When a craftsman developer approaches a problem, he'll use whatever is necessary to solve that problem. Need to format data for the web? A combination of XML and XSLT can help with that. Need some complex data mining? Perhaps some OLAP could be in order? Need a calendar control that only allows you to select full weeks in Windows Forms? A small variation on the stock control should do the trick.
My point is that a true craftsman developer searches for an established solution where possible, makes modifications when necessary, and only creates what is needed after all that.
The hammer guy developer is the guy I've been dealing with. Need to format data for the web? "Nah, no need. Just write a parser to convert the data from the database format to the proprietary format used by my browser here." Need some complex data mining? "Well, if you pass all of the data in my browser's format, I'll just add some data analysis stuff to my browser for you." Need a calendar control that only allows you to select full weeks in Windows Forms? "My browser doesn't utilize .NET, sorry."
If you want to succeed as a developer, it's pretty easy. Find out what the user's problem is, focus your efforts on reusing as many established, functioning, tested routines as possible, and spend the necessary time gluing them together. You'll be considered a godsend by the people who hired you.
If you want to fail as a developer, it's pretty easy as well. Simply shoehorn every problem into your one-size-fits-none solution.