ぼくがかんがえたさいきょうのプログラミング言語べんきょーほうほう

エンジニアは新しいものが好きである*1。そのため、新しいものを使うために新しい言語を習得するということは日常茶飯事である。

このブログでは私が新しくプログラミング言語を勉強する際に実施している勉強法を書く。

TL;DR

  • 公式のドキュメントを眺める
  • 他の言語と比較しその言語独自の使用などを軽くMarkdownでまとめる
  • その言語でGitHubから検索して数個ほどリポジトリをクローンする
  • クローンしたリポジトリを読み仕組みを理解する
  • なにか作る

解説

公式のドキュメントを眺める

プログラミング言語を勉強する上で一番の情報源は、本でもTwitterでもいかがでしたか系サイトでも技術記事でもなく公式ドキュメント*2である。その言語の開発者がどういう意図でそういう設計をしたのかがわかる。
また、公式ドキュメントを先に読むことで技術記事のバージョンの違いで動かない事象を事前に回避することができる。

ドキュメントを眺めるのはとくに面白みはないのでTwitterで実況するのがおすすめである。

他の言語と比較しその言語独自の使用などを軽くMarkdownでまとめる

プログラミング言語にはその言語独自の仕様を持つ場合が多い。例えば、Pythonなどはインデントでブロックを表現したりGoなどはエラーを第二戻り値にしてスローはしない。Rustはセミコロンがない文はreturnになるなど様々である。

そのような仕様は書く場合にこんがらがってしまう場合が多いので後で索引できるようにMarkdownなどにまとめる。あと、少し書くと記憶に残りやすい。残らなくてもそれをまとめたなっていうことを覚えていればあとで検索できるしね。

その言語でGitHubから検索して数個ほどリポジトリをクローンしてリポジトリを読み仕組みを理解する

これは一番大事である。これに9割時間を費やしてもいいかもしれない。

プログラミング言語は、仕様がわかって書けるようになったところでいざ〇〇を作る!とかなるとどうしていいのかわからなくなる事が多い*3。そういう問題に対応するため予めその取得したい言語で書かれたリポジトリを読み仕組みを理解するはめちゃくちゃ効率が良い。

さらに、その言語で使われるパッケージマネージャーや命名規則ディレクトリ構成も一緒に理解できるためおすすめである。

私は実際にRustの勉強をした際には、tokei*4をクローンしてコードを読んだ。このリポジトリは、ビルド時にbuild.rsが実行されlanguages.jsonの内容をテンプレートエンジンで.rsに上書きするという仕組みがありすごく面白かった。

なにか作る

ずっとインプットでは覚えない。そのため、アウトプットをする。なにか目標をたてて、実際にその言語を使用して作ってみる。

まとめ

私の好きな言語は、Go、TypeScript、Rustです!!!!

*1:要検証

*2:ソースコードという人もいる

*3:個人の感想

*4:Rust製のファイル解析ソフト。ディレクトリを再帰的に解析しどの言語が何行存在するかがわかる。