Scientific Software Design by Damian Rouson & Jim Xia