Monday, July 21, 2014

Software and computing: How far we've come in a very short time

File:Computer-aj aj ashton 01.svgWhen I was in graduate school in the early 1990s, DEC and SGI Unix workstations were the hottest things around. We programmed in Fortran 77 mostly, and occasionally in Matlab® and Macsyma. As I recall, the different machines had up to a few 100 megabytes of RAM and processor speeds up to a few hundred MHz. I had grown up programming some of the first personal computers, which were very modest by comparison, and using these computers made me feel as if almost anything could be achieved computationally. Such machines cost well over $10K and the operating systems were proprietary, licensed, and expensive -- as were most of the useful applications.

Today, fast, high capacity, multi-core Linux machines are cheap. They can run Fortran and other traditional languages such as C, which are now available for free, as well as new open source packages like R and the Python language. Many of these packages are highly developed and are continuously under expansion and refinement. Libraries exist for nearly any conceivable computational problem. There are even open source analogues of Matlab® (Octave) and Macsyma (Maxima).

Very advanced methods of computation are now widely available for low cost. A major reason this has happened has been the open source software movement, the ideas of which extend now to making data and research codes used in published studies available for others to use. 25 years ago, when beginning research on a new problem, one commonly had to write new code from scratch. Today, one can turn to blogs or GitHub to look for codes that can be adapted for the problem at hand, radically shortening the code development, testing, and validation cycle. Recent work emphasizing the reproducibility and transparency of computational science promises to extend such progress farther still.

Such developments allow applications and methods to be shared and applied very broadly and across research fields. It's not uncommon for methods and codes developed for engineering, physics, and finance, for example, to be applied to problems in biology, medicine, and public health. Instead of writing code to translate abstract or unfamiliar equations into a local implementation, one often only has to install a library or find and download code (e.g., from GitHub or an online open source journal), possibly revise, and then apply to data. More time can be spent on thinking and communicating science, instead of coding and computing.

With these advances come dangers as well, but these dangers are manageable. For example, undetected bugs in codes can quickly threaten the integrity of results across multiple fields -- a frightening proposition. Similarly, it is also possible to use methods and codes in ways that are theoretically incorrect or unjustified if one doesn't understand the basis and limitations of those methods and codes. Such dangers are nothing new in science, and highlight the importance of working with others who are expert in new methods.

Current trends will only increase the computational capabilities available. It's an exciting time to work in mathematical and computational methods in biomedical science.

(image source: Wikipedia)

No comments:

Post a Comment