『C言語の癖が抜けない!64歳プログラマー、初めてPythonでゲノムデータを動かして大苦戦』

バイオ・がん研究

みなさん、こんにちは。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歳のデバッガー、次のバグ取りへ向かいます!

コメント

タイトルとURLをコピーしました