みなさん、こんにちは。64歳のプログラマーです。
前回、愛読書の『エッセンシャル細胞生物学』を片手に、「人間の身体は究極のコンピュータシステムだ!」と大興奮したお話をしました。
今回は予告通り、いよいよ実践編。パソコンに向かい、Pythonを使って本物のゲノムデータを読み込むプログラムを動かしてみたのですが……。長年染みついた「C言語の癖」のせいで、お恥ずかしいほど大苦戦してしまいました。
1. 行末の「分身」が消えない(セミコロン事件)
Pythonのコードを書き始めて、最初に手が勝手に動いてしまったのがこれです。
python
import Biopython # ゲノム解析のライブラリ
print("データを読み込みます") ;
コードは注意してご使用ください。
……そうです。文末に、C言語では絶対に必要な「;(セミコロン)」を無意識に打ってしまうのです。
Pythonでは行末のセミコロンは不要(あってもエラーにはなりませんが、推奨されません)。画面を見ては「あ、また打っちゃった」とデリートキーで消す作業を何十回も繰り返しました。40年近く指に染みついた記憶というのは、そう簡単に上書き(オーバーライド)できないものですね。
2. 「中カッコがない!」というパニック
C言語では、プログラムの塊(関数やループ)を { }(中カッコ) で囲むのが鉄則です。
しかし、Pythonは中カッコを使いません。代わりに「インデント(字下げ)」のスペースの数でコードの塊を表現します。
これが私にとっては恐怖でした。
「えっ、スペースが1マスずれただけでプログラムの意味が変わっちゃうの!?」
テキストエディタの画面を限界まで凝視しながら、「1、2、3、4……」とスペースの数を指差し確認。まるで新入社員に戻ったような緊張感でコードを打ち込みました。
3. 最初の感動:わずか5行でデータが開いた!
そんな格闘を経て、バイオ解析用のライブラリ(Biopython)を使い、前々回にお話しした巨大なテキストデータ(FASTQ形式)を読み込むコードが完成しました。
C言語なら、ファイルを開いて、バッファを確保して、1行ずつパースして……と数十行は書かなければならない処理が、Pythonならなんとわずか5行足らず。
python
from Bio import SeqIO
for record in SeqIO.parse("sample.fastq", "fastq"):
print(record.id)
print(record.seq) # A,T,C,Gの配列が表示される!
コードは注意してご使用ください。
恐る恐る実行ボタン(Enter)を押すと、黒い画面にサラサラサラッ!と、本物の遺伝子データ(A、T、C、Gの羅列)が光の速さで流れ出しました。
「動いた……!」
画面の文字が、私の派遣先のメーカーのログデータではなく、未来の「がん治療」につながる生命のデータなんだと思うと、じわっと鳥肌が立ちました。セミコロンやインデントで苦戦した疲れが、一瞬で吹き飛んだ瞬間です。
エラーの数だけ、夢に近づく
今回は無事にデータを表示させるところまで行きましたが、ここから「がんの変異(バグ)」を見つけるためには、さらに複雑な条件分岐やデータ処理が必要になります。
きっと、これから何百回、何千回とエラー画面(Traceback)に怒られることになるでしょう。でも、プログラマーにとってエラーは「答えに近づいている証拠」です。64歳のデバッガー、次のバグ取りへ向かいます!


コメント