Question: Hi all,

This is a simple and general question, kind of a survey. At the beginning of a development project, in bioinformatics, we all need to choose a language first, then if there are existing modules, it is always good to know that we are not reinventing the wheels and that we can make our own code rely on already written modules (from BioJava, BioPython, BioPerl projects...)

I don't want to diminish the huge work that has been done for many years now but I always have a weird feeling before going further with those modules. It's like "Do I write my scripts from scratch (and maybe loosing lot of time) OR do I take the risk to face hundreds of warnings or bugs (and get the impression of being lost in Bioperl stuff instead of really developing) ?"

So, 2 brief questions :

Do you trust Bio-xxx projects ? What is your approach in general ?

Consider BioJava, BioPython, BioPerl: are they equally advanced projects or do BioPerl (or another) have far more capacities at the present time (bigger community behind it) ?

Thanks for your advises.

T.

Answer: I view this as a tradeoff. I would not say that I do not trust the Bio.* projects. In my opinion there are several factors that should be considered before uncritically using these modules in your code:

How much work can the modules save me? If most of what I want to do can be done by a few calls to the right functions, it is a no brainer that one should do so. However, if Bio.* can parse a FASTA file for me, but I need to implement everything else myself, I might as well write a FASTA parser myself and avoid the external dependencies.

Is this a run-and-forget script or do I expect to reuse it? If I just need to run the script once, I would happily use any module that can save me a few lines of code. However, if I am writing a software that I expect to reuse for a long time, external dependencies are more of a liability since they may be subject to changes that could break my code in the future. Yes, you can call me paranoid if you like ;-)

Do I plan to distribute the software to others? Again, the more people I plan to distribute my software to, the more of a problem external modules are. Merely having to install a big Bio. project to run my code may cause me to lose users. The users are likely to have various outdated versions of Bio. installed, some of which may have bugs in functions that I rely on, making testing much more of a burden than if I had not had external dependencies.

How crucial is speed? With all due respect to the programmers, speed does not appear to be their primary focus. If I am coding something where speed matters, I have found that I rarely can rely on such big projects. Often the higher level of object oriented abstraction has a price in terms of execution speed, and I thus do not rely on Bio.* projects if speed is of the essence.

As you can see, I do not distrust the Bio.* projects per se. I am just hesitant to believe that they can eliminate most of my code, that the functions are stable over time, that they are bug-free in all releases, and that they are fast enough for all purposes.

Regarding the different projects, I have mostly positive experiences with BioPerl, a few unpleasant experiences with BioPython (specially regarding speed or lack thereof), and no experience with BioJava and BioRuby.