🦀

「Rustは学習コストが高い」の正体

2022/05/01に公開
1

先に結論を書いておく

Rustは他の言語にないとっつきにくさはあるが、他と比べて特別学習コストが高いものではないからどんどんチャレンジしてみて。ただし、ちょっと触ってみよう、くらいだと難解に感じるかも。あと、ガーベジコレクションや例外のキャッチが当り前で不満もない人たちもピンとこないかな?でもプログラマなら学ぶ価値はある、間違いなく。

The Rust Programming Language 日本語版を一通り読んで

The Rust Programming Language 日本語版(以下「The Book」)に目を通した。職業プログラマを離れて10年経った今、Solanaでブロックチェーン技術を学ぶためにRustに手を出したのだが、入口として比較的ベターなテキストがThe Bookであろうと思い読み始めた。
最初に懸念したのが、Rustの紹介記事を読めば必ずといっていいほど「Rustは学習コストが高い」とあり、言語野に人一倍自信がない私に理解できるか不安であった。しかし、一応最後まで目を通した[1]が、特別学習コストが高いという印象はない。そこで「Rustは学習コストが高い」のアンサー的なものを残しておこうと思う。学習コストが高いとの触れ込みで最初から諦めてしまう人が一人でも減れば幸いである。とはいっても、当方プログラマとしてはいいとこ並程度の能力。その程度の人間が書いたものとして認識してほしい。逆に並程度の方には参考になるだろうと思う(笑)

(余計な前置き)私にとっての学習コスト@プログラミング言語

プログラミング言語のスタディに真面目に取り組むのは10数年ぶりで、必要に迫らることもなく勉強した最後のプログラミング言語はLuaであった。職業プログラマを終えたその後、AIブームもありPythonのコードを書いてみたりすることはあったが最低限の文法だけ確認した程度である。
学習コストが高いプログラミング言語、といって思い出したのがScalaで、職業プログラマだった当時、マルチパラダイムてんこ盛りかつ覚えることも多く、とてもじゃないが日々の仕事をこなしながら学習できるボリュームではないと早々に諦めた。逆にLuaは覚えることが少ないながら、ちょっとしたスクリプトを書くにもいいところが気に入り、利用者が増えるかと期待して覚えたが、さほど広範囲には浸透しなかった印象である。
というわけで、私にとってプログラミング言語の学習コストと捉える事項は大部分が覚える量である。もちろん言語としての難解さや複雑さといったこともあるが、それらは落ち着いて1つ1つ理解すればそれほど余分なコストにはならないと認識している。

Rust利用者からみたRustの学習コスト

Rustチームにより実施された「Rust Surbey 2019」にRustのLearning Curve(学習曲線)に関する記述がある。これによれば、Rustユーザの約37%が1か月未満使っただけでRustの生産性を感じ、約21%は生産性を感じなかったとのこと。また、生産性を感じなかったと答えた人たちはRustについて比較的浅い専門知識しか持っていない人たちが多かったということである。まあ、言語知識が及んでなければ生産性を感じないだろうことはさておき、1か月未満の利用で高い生産性を感じた人が4割近くいるのであれば、その結果から「Rustは学習コストが高い」と考える人はあまりいないのではないだろうか?実際に他言語がどの程度かわからないので何とも言えないところではあるが、これをもって「学習コストが高い」と言い切る人はいないだろう。

実際に学んでみた上でのRustの印象

  • 覚えるトピックはそれほど多くない
  • エラー処理は最初から意識しておく必要がありそう
  • トレイトとジェネリックの複雑さで後々苦労しそう
  • コンパイラに頼らずにライフタイムを使いこなしてコーディングできるようになるのだろうか?
  • (おまけ)作り手の実務面での問題への解決意識がハンパない

覚えるトピックは少ないほどありがたい。今やマルチパラダイムは当り前、使っていても新しい仕様がどんどん増えていき、振り返れば膨大な知識を要求されるのがプログラミング言語の世界。Javaなんて最初に触った頃(恐らく1.1.5あたり)からどれくらい肥大したのだろうか?それらに比べればRustは決してボリュームに嫌気がさすこともない。何せクラスも継承もなければ例外処理もない。エラー処理は独特だが難しいものではない。所有権やライフタイムは今後利用してから苦労するだろうと最初から印象を受けたが、他の言語にも同様のトピックはたいていあるだろうし、特別難題となるわけでもなかろう。ただ、ほかの言語にはない独特の問題意識が必要になるのだろうが。個人的にはC++の学び直しを考えればRustのほうがリーズナブルだろう。やはり学習コストの高さは実際に学んでみても感じられなかった。

結局「Rustは学習コストが高い」は何なのか

ということで、Rustは特別学習コストが高い言語ではないと、と結論づける(低いというつもりもないことは念の為付け足しておく)。前提知識がない場合、知識のボリュームを考えればJavaやC#のほうがよほど学習コストは高いだろう。ではなぜRustは学習コストが高いと言われるのだろうか?Rustには所有権やライフタイムに代表される、他の言語にはない概念があるため、他の言語を経験した人たちが直感的に理解しづらいのかもしれない。で、ここからは邪推だが、学習コストを語るレベルのプログラマであれば、Rustをちょこっとかじってみてよくわからなかったとしてもさすがに理解できなかったと言いにくい。だから直感的に理解できなかったことを「学習コストが高い」と言い換えてメンツを保っているのではないだろうか?実際に学んだものとして、他に思い当たることはない。

ということで、繰り返しになるが、学習コストが高いという触れ込みのせいでRustを触る機会を失う人が一人でも減れば幸いである。C/C++に取って代わろうというのは伊達ではない。実際に使う機会がなかったとしてもプログラマであれば得られるものは少なからずあるはずだ。

※オマケの(自分への)言い訳
実は、この文章のおおもとは2022年2月に書いた。既に3か月以上が経過しているが、実はRustにはそれほど触れていない。現状ではゲーム開発フレームワークのBevyを触ってはいるが、これはほぼ基本構文が理解できていれば書けてしまう良くできたフレームワークなので、今は当初よりもかなりいろいろと忘れてしまっている。そもそもSolanaをいじるために始めたRustだが、Solanaをいじるならもう一度The Bookには目を通すことになると思われる。改めて読み直してみて「何を分かったようなこと書いてんだか。。。」というのが正直なところである。

脚注
  1. とはいってもマクロを飛ばしたり、確実に理解せぬまま進めたところの多数なので、理解した、とはとても言えない状態である ↩︎

Discussion