I'm the worst example of a hack coder - 7 or 8 years of Perl and a bit of Ruby layered on top of early 90's excursions into Pascal and C. No formal training and it shows.
I write code to get my job done. It's never elegant (but it works) and I'm forever looking at problems knowing that somewhere there is a much more elegant solution for the thing that I have just done.
I'm a biologist by training (but work with a lot of computer scientists), so what I would like is an approachable, language agnostic text that outlines some of the fundamentals of programming that I feel I have missed - everything from data structures, to algorithms, structuring code etc.
Is there a good text (I would imagine something aimed at new undergraduates in CS) that anyone would recommend for someone in my position?