これから始めるあなたへ
この記事を読み終えたら
コーディングがなぜ「勉強」ではなく「体験」なのか納得できるでしょう。そして、すでにコードを数行実行した人になっているはずです。
Part 1. 私たちはすでに知っている — 言語の学び方
誰も文法から教えなかった
生まれて初めて聞いた言葉を覚えていますか?
覚えていなくて当然です。でも一つ確かなことがあります — あの時、誰もこんなことは言いませんでした。
「さあ、日本語の基本文型は主語-目的語-述語だよ。まずこの原理を理解してから話してみて。」
そんなことは起きませんでした。
お母さんは「ママ」と言い、お父さんは「パパ」と言いました。意味の説明もなく、ルールも教えず、ただ繰り返しました。それぞれのやり方で、基準もなく、文法もなく。そしてある日 — 私たちは話していました。
コーディングも同じです。
ただ真似してみよう — 初めてのコード
下のコードを見てください。理解しようとしなくていいです。ただ 実行 ボタンを押してください。
print("Hello, World!")
assert "Hello" in "Hello, World!"画面に Hello, World! と表示されましたか?
おめでとうございます。これは1991年にティム・バーナーズ=リーが世界初のウェブサイトを作った時にやったことと本質的に同じです。コンピュータに「これを画面に表示して」と伝えたのです。世界中のすべてのプログラム、すべてのアプリ、すべてのウェブサイト — この1行から始まりました。
簡単? はい。それこそがポイントです。
私たちの分野の言葉で挨拶してみよう
今度は私たちに馴染みのあるものを試してみましょう。実行ボタンを押すだけです。
dna = "ATGCGATCG"print(f"配列: {dna}")print(f"長さ: {len(dna)}bp")
assert len(dna) == 9dnaというラベルを付けて、"ATGCGATCG"という配列を格納しました。len()は長さを測る物差しです。ゲルでバンドのサイズを測るように、コンピュータが配列の長さを測ります。
わからない部分があっても大丈夫。今は「へぇ、こんなことができるんだ」と思って先に進みましょう。
コンピュータは電卓 — ただ、とても速い電卓
ラボで希釈倍率を計算する時、電卓を使いますよね? コンピュータはその電卓です。ちょっと速いだけ。
stock = 10.0target = 2.0dilution_factor = stock / targetprint(f"希釈倍率: {dilution_factor}倍")print(f"10 mg/mLのストック液を{dilution_factor}倍に希釈して{target} mg/mLを調製")
assert dilution_factor == 5.0stock / target — これだけです。割り算。コンピュータサイエンティストが裏側のロジックを構築し、私たちはただ使うだけ。新しいプログラミング言語を発明しようとしているわけではありません。既存のツールを研究に活用するのです。
複数のサンプルを一度に処理する
96ウェルプレートにサンプルを1つずつロードするように、コンピュータにも複数の項目を一度に渡すことができます。実行ボタンを押してください。
samples = ["Sample_A", "Sample_B", "Sample_C", "Sample_D"]
for sample in samples: print(f"{sample} → 解析中...")
print(f"\n合計 {len(samples)} サンプルの処理が完了しました!")
assert len(samples) == 4forが何を意味するか知る必要はありません。今は「あ、複数のものを一度に実行できるんだ」と感じるだけで十分です。文法は気になった時に調べればいい。少しずつ、辞書を引くように。
名前を呼べば応えてくれる
name = "田中先生"lab = "ゲノミクス研究室"
print(f"こんにちは、{lab}の{name}!")print(f"DevBenchへようこそ。")print(f"今日から{name}もコーディング研究者です。")
assert "田中先生" in f"{name}"nameを自分の名前に変えて、もう一度実行してみてください。コンピュータが挨拶してくれます。
なぜこのアプローチがうまくいくのか
ここまでで何回「実行」を押しましたか?
ほとんど理解できなかったと思います。printが何をするのか、f""とは何か、forとは何か。それが普通です。 いや — それが正しい。
私たちが目指している流れはこうです:
- ただ真似する — わからなくていい
- 実行して結果を見る — 「へぇ、こうなるんだ」
- すぐ忘れる — それでいい。忘れるのは自然なこと
- 後でもう一度やる — 「あ、これ見たことあるかも」
- 繰り返すうちに面白くなる — 「あれ、こういうのも作れるんじゃない?」
- 気になった時に調べる — 「あぁ〜、そういうことだったのか!」
最初から原理を理解しようとしないでください。コンピュータの歴史を最初からたどり直す必要はありません。目の前にある面白いものに触れて、自然に吸収していくのです。
そしてこれは精神論ではありません。科学的な根拠があります。
Part 2. 脳が勝手にやってくれる — 科学が保証する
ここからは私の専門分野の話をさせてください。バイオ研究者として、なぜ私たちの脳が「ただ繰り返せばうまくいく」ようにできているのか説明します。
ヘブの法則:「一緒に発火するニューロンは、一緒に結合する」
1949年、神経心理学者ドナルド・ヘブがこの原理を発見しました。
脳には約860億個のニューロン(神経細胞)があり、シナプスと呼ばれる接合部を通じて通信しています。ヘブの法則はこう述べています:
「一緒に発火するニューロンは、一緒に結合する」
printという文字を見て → キーボードで入力して → 画面に結果が表示される。この時、視覚野、運動野、報酬回路のニューロンが同時に発火します。これらのニューロン間のシナプスは、繰り返すたびに物理的に強化されます。シナプス後膜のAMPA受容体が増加し、長期増強(LTP)が起こります。
簡単に言えば、繰り返せば、脳が自動的に回路を構築するということです。理解しようとする必要はありません。脳が勝手にやってくれます。
neurons = ["視覚('print'を見る)", "運動(キーボードで入力)", "報酬(結果が表示される!)"]
for neuron in neurons: print(f"🧠 {neuron} → 発火!")
print("\n→ シナプスが強化されました!次回はもっと速くなります。")
assert len(neurons) == 3手続き記憶:体が覚えている
記憶には2種類あります。
宣言的記憶は「Pythonの変数は値を格納するコンテナである」のような事実を暗記することです。海馬が担当し、忘れやすい。
手続き記憶は自転車に乗ること、ピペッティング、そして — コーディングのように、反復的な動作を通じて形成されます。大脳基底核と小脳が担当し、一度形成されると忘れにくい。
教科書でコーディングの構文を暗記するのは宣言的記憶。すぐに忘れます。でも自分でコードを打って、実行して、エラーに遭遇して、修正を繰り返すと — それは手続き記憶になります。自転車に乗るように、ピペッティングのように、手が覚えます。
だから理論を先に教えない。まずやってみる。
memory_types = { "宣言的記憶": {"example": "'for'はループ文", "brain_region": "海馬", "duration": "忘れやすい"}, "手続き記憶": {"example": "自分でコードを打って実行する", "brain_region": "大脳基底核 + 小脳", "duration": "長期間持続"},}
for name, info in memory_types.items(): print(f"\n📌 {name}") print(f" 例: {info['example']}") print(f" 脳の領域: {info['brain_region']}") print(f" 特性: {info['duration']}")
assert "海馬" in memory_types["宣言的記憶"]["brain_region"]assert "大脳基底核" in memory_types["手続き記憶"]["brain_region"]髄鞘化:最初は遅い、でも突然速くなる
ニューロンには軸索と呼ばれる長い突起があります。電気信号はこの軸索を伝わります。最初、軸索は裸の電線のようなもので、信号はゆっくり伝わります。
しかし同じ経路が繰り返し使われると、オリゴデンドロサイトがミエリンという物質で軸索を包み始めます。これが髄鞘化です。
髄鞘化が進むと、跳躍伝導により信号伝達速度が最大100倍速くなります。
これが意味することは:
- 初めてのコーディング:
printを打つのに3分考える → 普通 - 10回目:「あ、printは...出力を表示するやつ」 → ミエリンが形成中
- 30回目:考える前に手が
print()を打つ → 髄鞘化完了
「ある日突然わかるようになった」という体験、ありますよね? あれは気のせいではありません。ミエリンが十分に蓄積され、信号が速くなったのです。 物理的な変化です。
stages = [ ("1回目", 0.5, "遅い伝導"), ("10回目", 5.0, "ミエリン形成中"), ("30回目", 50.0, "跳躍伝導!"),]
print("🧬 髄鞘化シミュレーション\n")for trial, speed, status in stages: bar = "█" * int(speed) print(f" {trial:>10s} | {bar:<50s} | {speed:>5.1f} m/s — {status}")
assert stages[2][1] == 50.0つまり、科学はこう言っている
- ヘブの法則: 繰り返せば、脳が回路を構築する
- 手続き記憶: 自分でやらないと体は覚えない
- 髄鞘化: 最初は遅くても、繰り返しが物理的にあなたを速くする
3つとも同じことを言っています:
理解しなくていい。ただ繰り返せ。脳が勝手にやってくれる。
これは精神論ではありません。シナプスでのAMPA受容体密度の増加、大脳基底核での手続き回路の強化、軸索を包むミエリン — 測定可能な物理的変化です。
さあ、始めよう
私たちがやることは:
- コンピュータサイエンスの歴史を一から学ぶことではない
- プログラミング言語の文法を暗記することではない
- まして新しいプログラミング言語を作ることではない
既存のツールを研究に活用することを学びます。コンピュータサイエンティストが基盤を作った。私たちはそれを活用する。サーマルサイクラーの回路設計を知らなくても完璧なPCRができるのと同じです。
すぐに理解できなくても、ただ真似してみてください。見た瞬間に忘れても大丈夫。ここにあるものをそのまま試して、「ふーん...そういうものなのか」と思って先に進む。
しばらくすると「あれ、こういうのも作れるんじゃない?」と思う日が来ます。その時に戻って調べればいい。「あぁ〜、そういうことだったのか」と。少しずつ、進んでいく。
ここはそういう場所です。コーディングも、最新のAIも、最初から理解する必要のない場所。初めて言葉を覚えた時のように、自然に吸収していく空間です。
print("=" * 40)print(" 🧪 DevBenchへようこそ")print(" 理解しなくていい。まず始めよう。")print("=" * 40)
started = Trueassert started == True次のレッスンでは、ターミナルを開きます。あの黒い画面が全然怖くないことがわかるでしょう。