Amazon.com: Writing Scientific Software: A Guide to Good Style (9780521858960): Suely Oliveira, David E. Stewart: Books
Writing Scientific Software: A Guide to Good Style and over one million other books are available for Amazon Kindle. Learn more

Have one to sell? Sell yours here
Writing Scientific Software: A Guide to Good Style
 
 
Start reading Writing Scientific Software: A Guide to Good Style on your Kindle in under a minute.

Don't have a Kindle? Get your Kindle here, or download a FREE Kindle Reading App.

Writing Scientific Software: A Guide to Good Style [Hardcover]

Suely Oliveira (Author), David E. Stewart (Author)
4.0 out of 5 stars  See all reviews (3 customer reviews)


Available from these sellers.


Textbook Student FREE Two-Day Shipping for students on millions of items. Learn more

Formats

Amazon Price New from Used from
Kindle Edition $31.20  
Hardcover --  
Paperback, Bargain Price $17.54  

Book Description

September 25, 2006 0521858968 978-0521858960
The core of scientific computing is designing, writing, testing, debugging and modifying numerical software for application to a vast range of areas: from graphics, meteorology and chemistry to engineering, biology and finance. Scientists, engineers and computer scientists need to write good code, for speed, clarity, flexibility and ease of re-use. Oliveira and Stewart's style guide for numerical software points out good practices to follow, and pitfalls to avoid. By following their advice, readers will learn how to write efficient software, and how to test it for bugs, accuracy and performance. Techniques are explained with a variety of programming languages, and illustrated with two extensive design examples, one in Fortran 90 and one in C++: other examples in C, C++, Fortran 90 and Java are scattered throughout the book. This manual of scientific computing style will be an essential addition to the bookshelf and lab of everyone who writes numerical software.


Editorial Reviews

Review

"...That mechanical engineer would probably do better to pick up Oliveira and Stewart's Writing Scientific Software: A Guide to Good Style, whose subtitle could equally well have been "Things Computational Scientists Ought to Know". The chapter titles are a good summary of its contents: basics of computer organization, software design, data structures, design for testing and debugging, global vs. local optimization, memory bugs and leaks, Unix tools, and so on. The writing is clear (though more diagrams wouldn't have done any harm), and the case studies at the end are well thought out. The authors clearly know their intended audience well."
Greg Wilson, Dr. Dobb's Journal

"A top pick for college libraries." - California BookwatchDiane C. Donovan, Midwest Book Review

Book Description

This manual of scientific computing style will prove to be an essential addition to the bookshelf and lab of everyone who writes numerical software. Scientists, engineers and computer scientists who follow its advice will learn how to write good software, and how to test it for bugs, accuracy and performance.

Product Details

  • Hardcover: 316 pages
  • Publisher: Cambridge University Press (September 25, 2006)
  • Language: English
  • ISBN-10: 0521858968
  • ISBN-13: 978-0521858960
  • Product Dimensions: 9.8 x 6.8 x 0.9 inches
  • Shipping Weight: 1.5 pounds
  • Average Customer Review: 4.0 out of 5 stars  See all reviews (3 customer reviews)
  • Amazon Best Sellers Rank: #3,696,677 in Books (See Top 100 in Books)

More About the Author

Discover books, learn about writers, read author blogs, and more.

 

Customer Reviews

3 Reviews
5 star:
 (1)
4 star:
 (1)
3 star:
 (1)
2 star:    (0)
1 star:    (0)
 
 
 
 
 
Average Customer Review
4.0 out of 5 stars (3 customer reviews)
 
 
 
 
Share your thoughts with other customers:
Most Helpful Customer Reviews

8 of 9 people found the following review helpful:
4.0 out of 5 stars not bad for an introduction, November 29, 2008
Amazon Verified Purchase(What's this?)
I think this book is a good introduction to writing good/better scientific programs. It seems so very much is left out of courses, and people are left to their own devices in terms of learning how to write good, robust, and fast programs. This book is a mix of numerical analysis, programming techniques, and an explanation of hardware from the programmer's standpoint- all three things are necessary for writing good (and fast) scientific programs. I know how deep the rabbit hole goes in each of these areas, so I can strongly recommend this book as a good introduction into each for engineers/chemists/physicists that are learning how to write scientific programs. For more about hardware, try the 'write great code' series Write Great Code: Volume 1: Understanding the Machine. For more on numerical analysis, there are many good books, such as Scientific Computing.

This isn't a cookbook for writing the best scientific programs. Sure, there are a few examples, but the underlying principles are what to take away. Despite all my experience, I learned a few tips. I have to say, this book would be better if the authors 1) didn't plug their program at every turn, 2) sat down and narrowed the scope of the book/chapters and critically asked themselves what a given example brings to the discussion, and 3) didn't try to be experts on programming languages. Don't read too deeply into the example implementations. C is my language of choice- I can call them out on many things. I know enough fortran to raise eyebrows at some of the content. The proofreader and technical editor need to be shot- typos and blatant errors are rampant throughout the book (seriously- run spell checker before you hit the "print" button).
Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No


4 of 4 people found the following review helpful:
3.0 out of 5 stars Useful material along with (too) many errors and some omissions, October 2, 2010
Amazon Verified Purchase(What's this?)
"Writing Scientific Software: A guide to good style" is a niche book by Suely Oliveira and David Stewart, who are professors (of computer science and mathematics, respectively) at the University of Iowa. This volume covers a multitude of coding, computer organization, and tool-related issues in connection with scientific programming. It is rounded out by two somewhat extended design examples, one in Fortran and one in C++.

The Good: Oliveira and Stewart provide a nice introduction to the IEEE floating-point standard, as well as wider issues having to do with numerical accuracy and stability. They also include a lot of material on coding and design, using Fortran 90/2003, C, and C++. They show a modicum of Java, though this doesn't seem to serve much of a purpose (they could have included Python instead, see below). Given that they address a community which to a large extent still interacts with Fortran 77, the authors should be commended for advocating fundamental things like avoiding global variables, knowing how to allocate memory dynamically, and using object-oriented as well as generic programming. Similarly, they introduce a number of lessons learned in mainstream software engineering on the importance of good and up-to-date documentation, as well as on the significance of testing. A strong point of the book is a (somewhat scattered) collection of useful tricks. A few examples: on numerical accuracy: add terms in a Taylor series in reverse order (p. 41); on Unix tools: use grep or sed to produce external documentation (p. 81); on debugging: use the __LINE__ macro and also print out the addresses associated with pointers, checking for null values or repeated values, or values that are too close together (pp. 121, 123); on architecture-related issues: avoid if statements inside short inner loops (p. 162). (Of course, the material on architecture and efficiency is far from timeless: even though the book was published in 2006, the authors refer to 64-bit CPUs as to a thing of the future.) Most of the positive aspects of the book are not ground-breaking, but they weren't supposed to be: this is intended as a condensation of knowledge and experience in the areas of numerics, coding, and computer architecture. Covering all that in under 300 pages -- which means that one can read this book cover-to-cover in a short amount of time -- is nothing to sneeze at.

The Bad: the authors provide a list of errata on their website, but these barely scratch the surface. In too many places, the English is awkward (to say the least). A few examples: "Suppose that you are wanting [sic] to solve an ordinary differential equations [sic]" (p. 39); "The most natural way of handling the environment problem goes to object-oriented languages." [?] (p. 103); "Many discrete algorithms do not have efficient algorithms." (p. 152). The uncatalogued errors extend beyond language issues: there are many technical inaccuracies, though it's difficult to tell where the typos end and the true mistakes begin. Here are a few examples, all taken from Part II: the authors fail to distinguish between Fortran subroutines and functions (p. 49); they say that writing *b++ = *a++ is obscure (p. 62), though this is a common idiom in C; they imply that Java's classes predate Fortran's derived data types (p. 90); they think they're overriding a const pure virtual function with a non-const member function (p. 105); they engage in bad programming practice by showing a function defined in a friend declaration (pp. 110-111); they assume that using the inline keyword will inline a function (p. 112), though in reality the keyword is just a request to the compiler; they show a linear combination of C++ and Java and call it C++ (pp. 143-144). On a different note, the authors leave out a number of things: for example, the boost libraries are mentioned only in passing, so there's nothing on multi_array, or on boost (soon to be std::) array, etc. In the whole book, the authors devote one sentence to Python (p. 230). Finally, given that this is a text on scientific software I was surprised by the fact that it contains essentially no mention of multithreading or distributed memory programming.

The people who would have the most to gain by reading this book are probably beginning graduate students, but it is precisely the readers who lack much experience that would have been better served by a more accurate text. (A final example: section 12.8 is called "Basic Linear Algebra Software (BLAS)". By section 16.2, "Software" has morphed into "Subroutines". Both are wrong, however: the "S" in BLAS stands for "Subprograms".) In a nutshell, I think that this volume deserves four stars for its overall choice of material and the authors' generally good advice, and two stars for its slipshod production quality. Overall, three stars.

Alex Gezerlis
Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No


2 of 12 people found the following review helpful:
5.0 out of 5 stars A top pick for college libraries., March 11, 2007
Writing Scientific Software: A Guide to Good Style provides college-level audiences studying computer technical writing with a clear guide to writing numerical software. Tips are geared to real-world challenges and scenarios and include plenty of examples, so students learn how to write efficient, workable software, test it for bugs and performance, and more. Examples are provided in Fortran 90, C++ and Java throughout and offer plenty of detail on common scenarios, pitfalls, and the elements of sold scientific software production. A top pick for college libraries.

Diane C. Donovan

California Bookwatch
Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No

Share your thoughts with other customers: Create your own review
 
 
 
Only search this product's reviews



Inside This Book (learn more)
Key Phrases - Statistically Improbable Phrases (SIPs): (learn more)
conservative garbage collectors, catastrophic cancellation, random test data, unit roundoff, memory bugs, memory locality, matrix data structures, rounding modes, periodic splines, memory heap, reverse communication, revision control systems, logical size, array bounds checking, construction routines, numerical software, floating point system, scratch space, mark technique, extended precision, cache line, version control systems, space arrays, dangling pointers, multigrid algorithm
Key Phrases - Capitalized Phrases (CAPs): (learn more)
Microsoft Windows, Electric Fence, Extreme Programming, Standard Template Library, The Mythical Man-Month, The Pragmatic Programmer
New!
Books on Related Topics | Concordance | Text Stats
Browse Sample Pages:
Front Cover | Table of Contents | First Pages | Index | Surprise Me!
Search Inside This Book:




Suggested Tags from Similar Products

 (What's this?)
Be the first one to add a relevant tag (keyword that's strongly related to this product).
 
(26)

Your tags: Add your first tag
 

Customer Discussions

This product's forum
Discussion Replies Latest Post
No discussions yet

Ask questions, Share opinions, Gain insight
Start a new discussion
Topic:
First post:
Prompts for sign-in
 


Active discussions in related forums
Search Customer Discussions
Search all Amazon discussions
   
Related forums





Look for Similar Items by Category


Look for Similar Items by Subject