1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なぜ私はRustが全く書けないのか

1
Posted at

この記事は 「Pythonって、たぶんそういう意味じゃない」シリーズ の第12弾です。
Python歴5年以上、メインで使い続けてきた変態が書いています。

この記事は 個人の経験に基づくポエムです。
環境・用途・経験によって異なる場合があります。

Rustが、全く書けない。

誇張ではない。読める。理解もできる。ドキュメントを読めば「あ、こういうことね」と納得できる。
でも、ゼロから書こうとすると手が止まる。

一方で私は何をしているかというと、

  • Pythonで不正アクセス検知のロジックを書いている
  • Discordボットを何個も作っている
  • AI学習データの処理パイプラインを組んでいる
  • OSSライブラリを公開して、コンパイル機能まで実装している

いわゆる「普通にコードを書いている人間」ではある。
それでもRustは、全く書けない。

先に断っておくこと

先に断っておくと、この記事はRustを否定したい話ではない。

型システムと所有権モデルを武器に、安全性と速度を両立させる設計は、普通に考えてかなり高度だと思っているし、実際に使いこなしている人は素直にすごいと思う。

この記事は、「なぜ自分はそれができないのか」を整理するための、ほぼ自己分析だ。

結論:私は「新しいことをする」が苦手だ

最初に結論を書く。

私はプログラミングができないのではなく、新しい環境で一からやり直すことができない。

この2つは似ているようで、実際にはかなり別物だ。

具体的に、何につまずくのか

Rustのコードを見て、毎回こう思う。

で、これはなんで怒られてるんだ?

たとえばこんなコードがある。

let str = String::from("Hello, world!");
let str2 = str; // ①所有権がstr2に移動する
println!("{}", str2); // ②これは動く
println!("{}", str); // ③これはコンパイルエラーになる

Pythonの感覚だと、変数に代入したものを後で参照するのは当たり前のことだ。
でもRustでは、str2 = strをした瞬間に所有権が移動してしまい、
元のstrは「もう使えない変数」として扱われる。

Pythonなら何も起きない一行が、Rustではコンパイルすら通らない。

Vec(Pythonでいうリスト)でも同じことが起きる。

let v1 = vec![1, 2, 3];
let v2 = v1; // 所有権がv2に移動
// この後 v1 を使おうとするとエラー

Rustの所有権システムを解説している記事の多くが、
「初心者が挫折して諦めてしまうのはもったいない」と書いているのを見て、少し安心した。
自分だけがつまずいているわけじゃなかった。

Pythonならstr2 = strと書いて、そのままstrstr2も自由に使い続けられる。
その気軽さに慣れているぶん、Rustの厳格さに毎回面食らう。

PythonとRustは方向性が真逆

業務でPythonを書くとき、だいたいこう考える。

  • とりあえず動くものを書く
  • エラーが出たら直す
  • 型は気にしすぎない
  • 動いたら次に進む

Rustではどうか。

  • コンパイラが通らないと何も動かない
  • 所有権でまず詰まる
  • 型を正確に理解していないと一行も進まない
  • 「動いたら次」が通用しない

私はRustを書いていて、

これ、あとで直せばいいや……

と考えてしまう。しかし「あとで」は来ない。来る前にコンパイルエラーで止まる。

「勉強しよう」と思っても続かない理由

これはRustに限った話じゃない。

心理学には「現状維持バイアス」という言葉がある。
人は変化に伴うリスクや不確実性を避けるため、慣れ親しんだ状態を維持しようとする傾向がある、という認知バイアスだ。

さらに、人間には損失回避性という性質もある。
未知のものを受け入れると、今より損をするかもしれないというリスクを感じ、それを避けようとする心理的な作用が働く。

新しいことを学ぼうとするとき、人はすでにできることと無意識に比較する。
Pythonなら30分でできることが、Rustだと3時間かかる。
その「3時間の非効率」が損失のように感じられて、脳が「今日はPythonでいいか」と判断してしまう。

これは怠慢ではなく、脳の仕組みだったらしい。
現状維持バイアスは誰にでも起こる一般的な傾向で、意志の弱さの問題ではないとされている。
すでに効率的にできる手段があるのに、あえて非効率な方を選び続けるのは、脳の初期設定からして自然なことだった。

Rustはスポーツに近いのかもしれない

最近思う。

Rustを書くのは、Pythonを書くのとは使っている筋肉が違う。

  • 所有権を意識する
  • ライフタイムを追う
  • コンパイラと対話する
  • 一行進むごとに正しさを確認する

私が普段鍛えているのは、

  • とりあえず動かして確認する
  • 試行錯誤しながら形にする
  • ライブラリを組み合わせて素早く作る

という筋肉だ。だから、Rustをすらすら書けるエンジニアを見ると、素直に「すごいな」と思っている。
自分にはない訓練を積んでいて、自分にはない感覚を持っている。

じゃあ、どうすればいいのか

Pythonを覚えたときのことを思い出した。

最初から複雑なものを作ろうとしていない。
Discordの電卓ボットとか、簡単な設定ファイルの読み込みとか、
「作ってみたいもの」を、簡単なところから少しずつ始めた。

「勉強しなきゃ」ではなく「これ作ったら楽しそう」から始めると、
非効率さより楽しさが上回る瞬間が来る。

  • いきなり難しいことをしない → 挫折するだけ
  • 作りたいものを決める → モチベーションが勉強を上回る
  • 簡単なところから → 「動いた」の成功体験を積む

Rustも、多分同じように始めればいい。
不正アクセス検知のロジックを移植するとか、ハードルの高いことからではなく、
もっと小さい「作ってみたいもの」から始めればよかったのかもしれない。

じゃあ、Rustができない私はダメなのか

別にダメではない、と思いたい。

  • Rustが書ける = 優れたエンジニア、ではない
  • Rustが書けない = 仕事ができない、でもない

ただし、

  • 所有権への感覚が鈍い
  • 型に厳密に向き合う訓練が足りていない

という事実はある。

それを自覚したうえで、

  • Rustを頑張るのか
  • Python特化で生きるのか

選べばいいだけだと思っている。

まとめ

  • 私はRustが全く書けない
  • それでも毎日プログラミングをしている
  • 「新しいことができない」のは怠慢ではなく、現状維持バイアスという脳の仕組み
  • 作りたいものを、簡単なところから始めると勉強は続く

同じように、「新しい言語や技術になかなか手が伸びない」という人がいたら、それは多分、あなただけではない。

少なくとも私がそうだからだ。


「Pythonって、たぶんそういう意味じゃない」 シリーズでは、
こういう"なんとなくで語られがちなPython"を言語化していきます。

👉 ストックをフォローしておくと次の記事を見逃しません!

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?