プログラマ初心者 Rustの現在の知見

# 序文

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">すごくいいので早く <a href="https://twitter.com/celluloce24?ref_src=twsrc%5Etfw">@celluloce24</a> は記事かいて <a href="https://t.co/trZzrPeMYA">https://t.co/trZzrPeMYA</a></p>&mdash; yumetodo-レポート辛い (@yumetodo) <a href="https://twitter.com/yumetodo/status/934643044523040776?ref_src=twsrc%5Etfw">2017年11月26日</a></blockquote>

え？何を書けと？？  

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">そういうのでいい <a href="https://t.co/eUOBFCnr6F">https://t.co/eUOBFCnr6F</a></p>&mdash; yumetodo-レポート辛い (@yumetodo) <a href="https://twitter.com/yumetodo/status/934646913353203715?ref_src=twsrc%5Etfw">2017年11月26日</a></blockquote>

いいのか...  

とりあえず過去の話を端的にまとめ、現在の知見を抽象的な思考から一般の日本語に頑張って変換していき、記事として投稿しようかと考える。  
この記事を読むことで特に有益な情報が得られるわけでもないが、ブレイクタイムにおける気分転換には持ってこいな内容にはなるかと思う。

# マイプロフィッル

名前：celluloce (本名ではない)  
プログラム歴：1年半くらい（2017/11/26現在）  
主に触ってる言語：Rust  
使ってるOS：Manjaro Linux  
主食：コンビニのポテチと団子, チェブルー((たばこ  

## プログラム歴詳細

**2016年**

8月くらい：  
プログラムに興味を持ち、**HTML**を触り始める。~**全ての始まり**~  

9月：  
某C++er(@yumetodo先輩)に出会う。~~~**闇の始まり**~~~  
ここからいろんな言語を知る。  
大学のサークル「みらい研究実行委員会」の広報班員として、Webページメンテナンスを行うにあたり、本格的（？）にプログラムをいじり始める。  
**Markdown**を知る。  

10月くらい：  
某C++erとマンツーマンで指導を受け始める。  
**Git**, **その他よくわからないソフトウェア**[^1]に出会う。  
初めて**コマンドプロンプト**を生で見る。  

11月：  
酒に酔ってPCを紛失する。~第一次停滞期~  

**2017年**

1月くらい：  
@takeokunn先輩にお下がりのPCをもらう。  
みらい研のイベントに向けて、Webページをメンテナンスするために**CSS**, **Javascript**を触り始める。
**ArchLinux**, **VSCode**を知る。

4月くらい：  
ぼく「C/C++やりたい」  
某C++er「闇が深い。**Rust**やれ。」  

5月：  
PC購入、その後２台とも破壊。~第二次停滞期~  

８月：  
PC修理が終わる。  
ArchLinuxのインストールに苦戦し、@MaverickTseさんに**Manjaro**を勧められる。  

１１月：  

化学系ソフトウェアを入れ始める。  
**Vim**を知る。

その後うんやくんやで今に至る。  
Twitterで過去を遡れば正確な日時が裏付けできるが、~~面倒くさい~~ここでは重要な情報ではないため大体の流れを書いた。

# 現在の知見

本業が化学であり、プログラミングは時間の合間の趣味という感覚で遊んでいる。おそらく総合的な技術知識においては初心者数ヶ月目の人とあまり大差はないと思う。そんな僕の現時点での知見を書き記しておこう。

## Rustは初心者に優しくない

上述したとおり、元々はC/C++を触ろうとしていたが某C++erの勧めでRustに手を出し始めた。化学と講義とレポート課題の合間にRustを触り続けて約半年経った知見をまとめてみる。  
また、初心者のリアリティを出すため、あえて文献による裏付けをせず、可能な限り自分の知識で書いてみる。そのため情報に間違いや~~宗教問題に触れること~~が多々あると思われるが、そこはご愛嬌ということで。

## Rustについて

C++をもとに作られた、C++よりも安全性の高い関数型言語。  
元がC++であるためか、早い。  
Cargoによりプロジェクトが色々楽になる。  
C++の闇の一つであるメモリ管理を、"借用", ”ライフタイム”等の新たなる概念を作り出すことで闇を駆逐する。  
C++プログラマを"C++er"と呼ぶが、Rustプログラマを”Rustacean”と呼ぶ。甲殻類の"crustacean"にかけているためか、イメージキャラクタがカニ。  
紙媒体のRust教本の表紙もカニ。  
公式ドキュメントが充実しており、[日本語文献（和訳版）](https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/getting-started.html)もある。

## Rust学び初め

僕はRustを触り始める前にJavascriptを触っていたこともあり、変数や関数等の基本的な概念は頭に入っていた。しかしドキュメントを見て愕然、目次には意味のわからない単語が並び、**内容を読んでも全く理解できない**。まさに”日本語なのに日本語じゃない”。  
たとえば”束縛変数”の記事を読んでいるとき、”mutable value”, "immutable value"はプログラマにとっては何てことない単語であるが、当時の僕は  
「immutable=不変の...定義した値が変わらないまあわかる」  
「mutable=可変の...え？定義したのに途中で値が変わるの？((困惑」  
といった具合。まあここらへんの話ならプログラマ誰しもあると思うが、次から本題に移る。

## 初心者向けのドキュメントがあんまない？

Rustの記事を見ていると何かと多い（気がする）のが、"C++er向けのRust入門"の類。まあC++の改良版((雑 な言語であるからそれがあるのはわかる。ただ**プログラム世界に挨拶したばかりの人間にとってこの類の文献を見てもよくわからない***。C++と比較されたところで異世界の人間と背比べするようなものである。また公式ドキュメントにおいても多言語と比較する記述がたまに見られる。***なんか全体的にプログラム熟練者にやさしい文献が多い気がする**

## コンパイラに怒られる

C++はコンパイラが理解できないとよく聞く。それに比べればRustのコンパイラはやさしいらしいが、初心者にとっては**やたら厳しい**。  
そもそもRustは型やメモリに厳しいと聞くが、**初心者はそんなもの知らない**。公式ドキュメントを見てもなんのこっちゃ。ググろうとしてもググラビレィティが低いのがプログラマ初心者。何をどう調べればいいのかもわからない。結局"&"とか"<型>"とかよくわかんないけどおまじないを書いたら通った。C++から闇を取り除いたのに謎のおまじないを書くことになる。~~型推論してくれるなら型書かなくてもいいだろ~~

## 結局プログラマ初心者はRustとどう付き合うべきか

そもそも何故書きやすい言語に触れなかったかと言うと、~~指導者の宗教的な問題~~初心者にやさしい言語には初心者にわからない問題点が多いらしいためにあまり触れてこなかった。（あとはまあ、難しい方が楽しいじゃん）  
もし初めて触る言語がRustであるという~~ドM~~プログラマがいたら、Rustを学びつつC/C++の文献にも目を通しておくと良いかもしれない。コードは書けなくても良いから、基本的な概念をざっと確認する。あちらの方が闇があっても初心者にとっては割とやさしい世界だと思う。  

まあ僕はC/C++書いたこと無いけど((ぇ

# 注釈

[^1]: nvmとかvscodeとかそのへん