Jennifer Campbell, Paul Gries, Jason Montojo, and Greg Wilson: Practical Programming: An Introduction to Computer Science Using Python. Pragmatic Bookshelf, 1934356271, 2009.
An introduction to programming using Python that includes material on building GUIs, working with databases, and a few other useful things.
Michael Feathers: Working Effectively with Legacy Code. Prentice Hall PTR, 0131177052, 2004.
If code is exercised by unit tests, changes can be made quickly and safely; if it isn't, they can't, so your first job when you inherit legacy code should be to write some. That's where this book comes in. What to know three different ways to inject a test into a C++ class without changing the code? Or which classes or methods to focus testing on? It's all here, along with lots of other useful information.
Chris Fehily: SQL. Peachpit Press, 0321118030, 2002.
Describes the 5% of SQL that covers 95% of real-world needs. While it moves a little slowly in some places, the examples are exceptionally clear.
Karl Fogel: Producing Open Source Software: How to Run a Successful Free Software Project. O'Reilly Media, 0596007590, 2005.
This book is an excellent guide to how open source projects actually work. Every page offers practical advice on how to earn commit privileges on a project, get it more attention, or fork it in case of irreconcilable differences.
Robert L. Glass: Facts and Fallacies of Software Engineering. Addison-Wesley Professional, 0321117425, 2002.
Most of us have heard know that maintenance consumes 40-80% of software costs, but did you know that roughly 60% of that is enhancements, rather than bug fixes? Or that if more than 20-25% of a component has to be modified, it is more efficient to re-write it from scratch? Those facts, and many more, are in this little book, along with references to the primary literature to back up every claim it makes.
Steve Haddock and Casey Dunn: Practical Computing for Biologists. Sinauer, 0878933913, 2010.
The best general introduction to "the other 90%" of scientific computing on the market today, this book covers all of the core material of this course and more.
Henrik Kniberg: Scrum and XP from the Trenches. InfoQ, 1430322640, 2007.
As the title suggests, this is a practitioner's reflections on two popular agile development methodologies.
Hans Petter Langtangen: Python Scripting for Computational Science. Springer, 3540739157, 2007.
The book's aim is to show scientists and engineers with little formal training in programming how Python can make their lives better. Regular expressions, numerical arrays, persistence, the basics of GUI and web programming, interfacing to C, C++, and Fortran: it's all here, along with hundreds of short example programs.
Hans Petter Langtangen: A Primer on Scientific Programming with Python. Springer, 3642024742, 2009.
An introduction to scientific computing using Python.
Steve McConnell: Code Complete: A Practical Handbook of Software Construction. Microsoft Press, 0735619670, 2004.
This classic handbook covers everything from how to avoid common mistakes in C to how to set up a testing framework, how to organize multi-platform builds, and how to coordinate the members of a team.
Wes McKinney: Python for Data Analysis. O'Reilly, 1449319793, 2012.
A practical introduction to data crunching in Python that covers a lot more than just statistics.
Michael Nygard: Release It!: Design and Deploy Production-Ready Software. Pragmatic Bookshelf, 0978739213, 2007.
This book is about designing applications to deal with the things that don't happen in the classroom or the lab: load fluctuations, power outages, upgrades, tangled configurations, and everything else you have to worry about when scaling up applications to work in the real world.
Andy Oram and Greg Wilson (editors): Making Software: What Really Works, and Why We Believe It. O'Reilly, 0596808321, 2010.
Leading software engineering researchers take a chapter each to describe key empirical results and the evidence behind them. Topics range from the impact of programming languages on programmers' productivity to whether we can predict software faults using statistical techniques.
Dan Pilone and Russ Miles: Head First Software Development. O'Reilly Media, 0596527357, 2008.
Many people will find this book's cartoon-ish format and awkward jokes annoying, but it's still a good hype-free introduction to agile development practices.
Deborah S. Ray and Eric J. Ray: Unix and Linux: Visual QuickStart Guide. Peachpit Press, 0321636783, 2009.
A gentle introduction to Unix, with many examples.
Robert Sedgewick: Algorithms in C. Addison-Wesley Professional, 0201756080, 2001.
These books are a guide to all the other conceptual tools that working programmers ought to have at their fingertips, from sorting and searching algorithms to different kinds of trees and graphs. The analysis is far more accessible than that of many other textbooks, and while the author's use of C may seem old-fashioned in an age of Java and C++, it does ensure that nothing magical is hidden inside an overloaded operator or virtual method call.