Software Carpentry
Most of people, including scientists,
who start programming as a side activity
learn it "hard way".
Even worse, they end up programming "professionally"
by leveraging tools, and never learning basics.
Similar as a carpenter can build
a simple but useful shelf or a deck
but may not be able to engineer a house or a bridge,
writing simple but useful programs still requires learning the "craft".
Software Carpentry is now a course on basic software development skills for programmers with backgrounds in science and engineering, rather than computer science @wikipedia
Podcast interview with Greg Wilson
More links @delicious