Recommended Reading

Books

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.

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.

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.

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.

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.

Papers

Paul F. Dubois: "Maintaining Correctness in Scientific Programs." Computing in Science & Engineering, May–June 2005.

This paper shows how several good programming practices fit together to create "defense in depth", so that errors missed by one will be caught by another.

Joel T. Dudley and Atul J. Butte: "A Quick Guide for Developing Effective Bioinformatics Programming Skills." PLOS Computational Biology, 5(12), December 2009.

Summarizes the skills that bioinformaticians (and others) need to build usable code with reasonable effort.

Matthew Gentzkow and Jesse M. Shapiro: "Code and Data for the Social Sciences: A Practitioner's Guide." (Last accessed Dec. 2013.)

A short, well-written guide for scientists of all kinds that walks the reader step-by-step through what's needed to create and manage code and data.

Jo Erskine Hannay, Hans Petter Langtangen, Carolyn MacLeod, Dietmar Pfahl, Janice Singer, and Greg Wilson: "How Do Scientists Develop and Use Scientific Software?" Proc. 2009 ICSE Workshop on Software Engineering for Computational Science and Engineering, 2009.

The largest study survey done of how scientists use computers in their research, and how much time they spend doing so.

Konrad Hinsen, Konstantin Läufer, and George K. Thiruvathukal: "Essential Tools: Version Control Systems." Computing in Science & Engineering, 11(6), Nov—Dec 2009.

Explains how version control can and should be used to accelerate research programming.

William Stafford Noble: "A Quick Guide to Organizing Computational Biology Projects". PLoS Computational Biology, 5(7), 2009.

How and why one scientist organizes his data and scripts. (We have a short lesson based in large part on this paper.)

Evan Robinson: "Why Crunch Mode Doesn't Work: 6 Lessons." (Last accessed January 2012.)

A short, readable summary of research on overwork and sleep deprivation that was written for game developers, but is equally true for scientists.

Ethan P. White, Elita Baldridge, Zachary T. Brym, Kenneth J. Locey, Daniel J. McGlinn, and Sarah R. Supp: "Nine Simple Ways to Make It Easier to (Re)use Your Data." PeerJ PrePrints 1:e7v2, http://dx.doi.org/10.7287/peerj.preprints.7v2.

Delivers exactly what the title promises: a straightforward set of practices that will make it easier for other scientists to use your data.

Greg Wilson, D. A. Aruliah, C. Titus Brown, Neil P. Chue Hong, Matt Davis, Richard T. Guy, Steven H. D. Haddock, Katy Huff, Ian M. Mitchell, Mark Plumbley, Ben Waugh, Ethan P. White, and Paul Wilson: "Best Practices for Scientific Computing." arXiv pre-print, submitted November 29, 2012.

Describes a set of best practices for scientific software development that have solid foundations in research and experience, and that improve scientists' productivity and the reliability of their software.

Greg Wilson: "Software Carpentry: Lessons Learned." arXiv pre-print, submitted July 20, 2013.

Describes what we've learned about scientific programming (and how to teach it) over the last 15 years.

Research in Computational Science and Software Engineering

BibTeX source

PDF version

comments powered by Disqus