バイオインフォマティクス初心者の日常

バイオインフォマティクス関連の研究・勉強などなど

バイオインフォマティクス初心者の選ぶプログラミング言語

バイオインフォマティクスでデータ解析を始めるにはプログラミング言語の習得が必要不可欠ですが、"どの言語を勉強すればいいのか!?" という疑問が初めに出るんじゃないかなと思います。
C, C++, Java, Perl, Ruby, Python, R、などの言語がバイオインフォマテクスで一般的に使われていますが、初心者にはどの言語にどんな違いがあるか判断がつきません。
そこで自分の経験(2年程度、PerlとRを主に利用)の中で、初心者がバイオインフォマティクスを始めるにあたって、どの言語を勉強すると良さそうか各言語の特徴をまとめながら個人的に考えてみた。

プログラミング言語の大まかな分類と特徴

まず最初に挙げた7つの言語は3種類に分類され、以下のような特徴を持っています。

  1. コンパイラ言語(C, C++, Java)
    コンパイラ言語はあらかじめ作成したプログラムを機械語に変換してから実行するため、他のプログラミング言語より動作が速いが、その分コードを書くのが難しいため、言語の勉強とプログラム作成に時間がかかるという特徴があります。なので C, C++, Java のようなコンパイラ言語は、高速な演算処理が必要な新しい解析アルゴリズムを開発したり、GUIの解析用プログラムを作ったりするような上級者が利用するイメージです。遺伝子やタンパク質の配列比較解析等の比較的簡単な処理を行うだけであれば、わざわざ時間をかけて習得する必要はないかなと感じます。
  2. スクリプト言語(Perl, Ruby, Python)
    スクリプト言語は上記のコンパイラ言語とは違って、作成プログラムを実行してから逐次機械語に翻訳するため、コンパイラ言語より実行速度は遅い。しかし、文法が簡単なので、言語の勉強とプログラム作成の両方ともにコンパイラ言語と比較して、短時間で行うことができます。スクリプト言語なら初心者でもデータ解析プログラムを比較的簡単に書けるようになると思います。これらのスクリプト言語にはそれぞれ、BioPerl, BioRuby, BioPython というバイオインフォマティクス用の解析パッケージライブラリが存在し、これらをうまく利用することで円滑に解析ツールを自作することができます。
    ちなみにバイオインフォマテクスとは関係なく、各スクリプト言語の一般的な人気度を比較すると、Perlは近年減少傾向にあり、Perlの後発型の代替言語であるPythonRubyのいずれかが使われる傾向にあるようです(TIOBE Software)。
  3. R言語
    Rはスクリプト言語の仲間ですが、主な用途が統計解析・作図処理なので他のスクリプト言語と区別されると思います。またRでは "bioconductor" というバイオインフォマティクス用の解析パッケージの機能が充実していて、統計解析・作図処理以外にも各種データベースからのデータ取得なども行うことができるので、色々と便利です。

個人的には既存のプログラムを組み合わせてバイオインフォマティクスのデータ解析を行う人は、Perl, Ruby, Python の3つのうちどれか1つのスクリプト言語を習得してから、さらに統計解析・作図処理に強い R も習得できると解析手法の幅が広がって良いんじゃないかと思います。

スクリプト言語の特徴

では、スクリプト言語を初めに習得するとして、結局どれを使うのが良いかということになりますが、正直バイオインフォマティクス分野ではこの3つのスクリプト言語の間でできることにそこまで差がないように感じます。

それぞれのスクリプト言語の特徴を挙げてみると、

  1. Perl
    Perlは3つのスクリプト言語の中で一番早く誕生した言語で、バイオインフォマティクスで昔から使われてきた言語です。そのため、ライブラリやマニュアル等の情報がネット上に豊富なのが利点だと思います。ただし、欠点としてPerlは"やり方は1つだけではない(TIMTOWTDI)"という設計思想を持っているので、人によって書き方が違っていて、コードの可読性が低いという問題点があり、研究室で研究用ソースコードを引き継いだりすると、コードがなかなか読めなくて少し困ったことになる場合があります(体験談)。他のRuby, Pythonオブジェクト指向を初めからサポートしていた言語であったのに対して、Perlは後付けでオブジェクト指向が組み込まれたので、そのあたりも理解を難しくしているように感じます。自分のためだけにコードを書く場合には、自由気ままに書けるPerlのスタイルは個人的に好きではあるんですけどね。
  2. Ruby
    Rubyは日本人の "まつもとゆきひろさん" が開発した言語なので、日本のコミュニティも多いので、その点で他の言語より親しみやすいかも。Perlの影響をある程度受けてますが、オブジェクト指向型の言語ということもあって、Perlと比べてデータ操作がやりやすかったり、読みやすいかなと感じてます。"書いていて楽しい言語" というのが設計思想にあり、直観的にメソッドを利用出来たり、自由な構文で記述できるので、実際にそう感じる言語だと思います。
  3. Python
    Pythonは "やり方は1つだけでいい" という設計思想で、自由奔放に書けるPerlとは対照的に、同じ処理は誰がコードを記述しても似た感じになります。少し窮屈に感じるかもしれませんが、言語自体が書き方に制限を設けることで、可読性が高くなり、コードの再利用がしやすくなるメリットがあります。Perl言語学者、Pythonは数学者の方がそれぞれ開発した言語なので、こうした対照的な設計になっているみたいです。オブジェクト指向型の言語なので、データ操作もやりやすいなと思います。海外の大学では入門用プログラミングとして、人気を集めているらしい。

これらの特徴を踏まえると、これからバイオインフォマティクスを独学で始めるなら、コードの可読性と再利用性に優れたPythonを勉強していくのが個人的におすすめかなと思います。

ただし、所属研究室で共通のプログラミング言語があったり、周りにどれかのプログラミング言語を既に習得している人がいる場合は、その周りの環境によって決めるのが優先ですかね。ちなみに自分はPerlが研究室の共用言語だったので、基本的にPerlで解析をしています。