+1 for such a modular answer :)
I'm thinking of working on bioinformatics programs that are web-based. What languages would I need for that? I think I would need HTML/PHP/SQL and then something to write the scripts in. Sound right?
EDIT: I know HTML well enough and a little CSS(err...not that much). I have learned some Python and liked it enough.
EDIT: To answer the follow-up comment, yes, I would be looking to deploy an application on servers to be accessible via the web. I also have ideas to work in some sort of data sharing/collaboration function. Everything is still very much a semi-murky idea in my head at the moment. :) Sorry I can't be more specific!
5 answers
You have lots of choices. Web applications are examples of dynamic websites: basically, this means that the page content is rendered - well, dynamically, in response to user requests. Those requests could be anything from terms to search a database to input parameters for an external program.
Your choices are:
Do you need a database "back end" and if so which one
Choice of programming language
- PHP, Ruby (on Rails), Python, Perl and Java are all used extensively for web development; even R can be employed using the RApache module
Do you want to use a web framework?
Do you need to call "external" bioinformatics applications, e.g. ClustalW?
Does the site need to look pretty/do fancy dynamic visual effects?
- In which case you need to be familiar with CSS and Javascript; the latter can provide nice tools such as charting libraries (e.g. Highcharts)
If you are new to these tools, I recommend the web tutorials at w3schools.com. Whatever tools you use, basic familiarity with HTML, particularly forms, is essential.
I'd also recommend looking at how other people have implemented web-based bioinformatics tools. Good examples include EMBOSS Explorer (rather old now but still works) and GBrowse (Bioperl-based genome browser).
Wow...so well organized and presented. I love it! Very helpful the way you break the site components down into categories.
Well, how can I put this in simple terms? I would start with something in the Python(Django/Pylons)/Ruby(Rails)/Perl(Perl) triad. These tree are faster (maybe not Perl) and more secure than PHP and generate - let's call it - more modern sites. I understand that maybe Django and Rails are not purely devoted to scientific applications, but if you are looking to something more powerful and faster to program I would go to:
Django (or Pylons, my preferred) with Python and BioPython
Ruby on Rails with a Ruby backend and BioRuby
or the best supported for bioinformatics applications in pure Perl with BioPerl
You cannot go wrong with those. PHP is a nice - maybe OK - language, but it's becoming a little bit passe nowadays, so if you're starting try to either go the modern way or go the most supported way. Each one has its own pitfalls and peaks.
EDIT - The three initial answers were posted at the same time, from different continents. I guess I win by a nose ... hair.
I would recommend a combination of HTML, CSS, Java Script(interface), SQL (database) and MVC (web app) based on your language of choice. You may also follow the related questions discussed in BioStar on database front-end and CMS for bioinformatics.
The choice of language largely depends on personal preference and familiarity with a particular language. I developed a variety of bioinformatics web apps based on sequence, structure and protein-protein interaction data using Perl. Personally I prefer LAMP stack as in Linux, Apache, MySQL and Perl. These days its a common trend to replace the MySQL with a serverless / NoSQL based database and Perl is generously replaced by Python / Ruby pointing to the MVC, object-oriented approach, ease of coding etc. I never had a single reason to switch to these languages because of a feature that is exclusive to it. I still believe, Perl has got it all, may be it is not marketing it well. Several times I humbly pointed my Python / Ruby friends to to take a look at Perl based MVCs or Parrot/Perl6/Rakudo for higher oops capabilities, ease of coding etc. In my experience, Perl is as good as any scripting language for bioinformatics web development. If you look at Bio-* projects, BioPerl is undoubtedly the winner with the largest number of modules.
Java based web development is also common in bioinformatics: PDB is a finest example. AFAIK, NCBI apps are largely based on their C++ libraries and EBI is based on a mix of Java and Perl.
Hmm...I'm familiar with Python, but my non-biology major friends (the CS ones) tell me that Python is not respected language. Apparently, they're talking nonsense as it would seem many here have mentioned it.
Many good anwsers here. My two cents:
If you just want to generate a web interface for a command line program, have a look at Pise: A Web interface generator for molecular biology programs in Unix. Bioinformatics. 2001 Jan;17(1):73-82. Letondal C.
Nobody cited Java ? have a look at the Java Servlets
The good old way: CGI programming
If your looking to work off of an existing framework I would suggest taking a look at the Galaxy Bioinformatics framework. It has many of the features needed for "analysis webpages" built in ... stuff like User login and histories, data management, sharing and commenting. It also has a large collection of analysis tools built in. You would just need to extend it with your things.
Galaxy is written in Python/Pylons btw.
Thanks for the reply! I don't know if I will be working off an existing framework just yet, but it's good to know that Galaxy is based on Python. A big plus!
Nice suggestion on Galaxy as a framework to utilize. The back end of Galaxy is built on a Pylons-like stack.
@Brad: I stand corrected.
Log in to answer this question.
Since the responses are excellent, let me add a clarifying question. What do you want to achieve? Do you want to deploy applications and make them accessible via the web? Or something else?
What kind of programs do you want to write?
@Vlinxify I'm thinking about a program that could work with simulating evolution on a whole genome scale(now that 454 sequencing is gaining popularity). I know genetic programming can do something like this, but need to read up more on it. What sort of bioinformatics questions are you looking at?
FYI, http://www.sequenceserver.com is an example of a simple bioinformatics web app (wrapper) that uses ruby and ruby's built in sinatra web frontend.