Software Carpentry: an introduction to basic software development
software-carpentry.org
software-carpentry.org
Elliotte Rusty Harold: Effective XML. Addison-Wesley, 2004, 0321150406. This book explains which of XML's many features should be used when: Item 12 tells you to store metadata in attributes, and then spends six pages explaining why, while Item 24 analyzes the strengths and weaknesses of various schema languages, and Item 38 covers character set encodings. It's more than most developers will ever want to know, but when you need it, you really need it.
I couldn't have described Harold's tome on XML better myself.