不真面目な人のためのプログラミング言語学習方法

新たなプログラミング言語やフレームワークを学習するために、
書店やアマゾンなどで入門書を購入して学ぶ人は多いと思います。

しかし、活字を読むのが苦手だったり、延々と勉強できるほど人間出来ていないような、
我々不真面目人間にとって、
入門書を読みながらの学習はとてつもないパワーが必要な作業ですよね。

入門書買ったはいいけど、初日に最初の章だけ読んで以来、文鎮化してる人も多いのでは？

そこでこの記事では、そんな「"勉強しろ"と親に言われたら絶対やりたくない」ような人のための
プログラミング言語学習方法を書いていきます。

## "真面目な人" の概念
この記事のターゲットは、次の点にいずれも**当てはまらない**人種です。

- 本を使った勉強が特に苦にならないような人
- 説明書を飛ばさずに読める人
- 実際に必要かどうかがよくわからない説明も黙って最後まで聞ける人
- 「やってはいけないことリスト」を黙って信じて、訳も聞かずに守れる人
- 教科書に書いてないことをやろうとする人に苛立ちを覚える人

これらに当てはまる人は、真面目な人なのでこの記事には向いてないと思います。
普通に本や公式リファレンスを熟読しましょう。

ではここから本題です。

## 学習に必要なもの：
不真面目な人がプログラミング言語を学習ときは、
以下のツールをうまく使い分けることで、効率よく学習することができます。

- Google Chrome の翻訳機能
- REPL
- チートシート
- チュートリアル
- GitHub検索
- Awesome
- コードゴルフ
- ウンコード・マニア

順を追って説明しましょう。

## 　Google Chrome の翻訳機能
お馴染みのブラウザですね。
プログラミング言語を効率よく学ぶために必要なサイトは、殆ど英語です。
なので、Google Chromeのページ翻訳機能はめちゃくちゃ便利なので、
なるべくこのブラウザを使ったほうがいいと思います。
まあ、Edgeでもいいけど。

## 　REPL とは
Read-Eval-Print Loop の略です。
ようは、コンソール上でプログラムの断片を入力すると、
その結果をチャットのように返してくれるようなツールのことですね。

プログラミング言語を学習するうえで、この REPL は非常に役に立ちます。
帳簿を書くときに試算のために手元に電卓を置いて使うようなイメージで、
気になったコードがあったら気軽に１行程度のコードを実行できるツールとして非常に便利です。

なので、REPLに対応しているプログラミング言語を学習するときは、必ず使っていきましょう。
普段使っている計算機を、これに置き換えるだけでも十分便利に使えるはずです。
なんてったって、どんな関数電卓よりも高機能ですからね！

## 　チートシート とは
「とりあえずこれだけ覚えときゃなんとかなる」表のことです。
言語の基礎的な書き方を覚えるなら、これを印刷して手元に置いておけばOKです。

Googleなどで言語名と一緒に `cheatsheet` と入力して検索してみてください。
もしJavaScriptなら `JavaScript cheatsheet` といった具合です。
最新のが欲しければ、現在の西暦も検索に加えてみるといいでしょう。`cheatsheet 2020` みたく

すると、公式リファレンスをより簡略化したような、
早見表のようなページがたくさん出てくるはずです。
それらの中から一番人気でモダンそうなものを選んで、それを使いましょう。

チートシートを一通り読んで、自分がよく知らない部分を見つけたなら、
REPLを使うなり、短いコードを書いてコンパイルするなりして、
その挙動を確かめていく感じで学習を進めていきましょう。

最初から最後まで順を追ってやってもいいですが、
面倒くさい場合は後から何かわからなくなったときのための辞書として使うといいでしょう。
なので、言語がわからないうちは、すぐ見れる場所に置いておくといいですね。

## 　チュートリアル とは
ゲームとかでは、操作説明やゲームシステムを説明してくれるパートですよね。
そんなチュートリアルも、実はプログラミング言語用のものも存在することはご存知でしょうか。

ゲームのチュートリアルのように、プログラミング言語の基本的な使い方を、
手取り足取り教えてくれる記事は、探してみると沢山ありますし、
中には公式ドキュメントにそのようなコーナーを掲載している例もあります。

なので、ゲームみたいに「まずは手始めにチュートリアルから」初めてみるといいですよ。
Googleなどで言語名と一緒に `tutorial` と入力して検索してみてください。
もしJavaScriptなら `JavaScript tutorial` といった具合です。

## 　GitHub 検索 とは
GitHubは皆さんお馴染みの開発者向けプラットフォームで、
ソースコードを公開したりプロジェクト管理などができるサービスですが、
じつはこのGitHubも、プログラミング言語学習に大いに役立てることができます。

https://github.com/search

例えば、何か特定のコードの意味がわからなかったり、
自分がやっている書き方を他の人もやってるのか気になったりするといった曲面があると思います。
そういうときに使うのが、GitHub検索です。

じつはGitHub検索では、この入力欄にソースコードの一部を入力することもできるんです。
そうすることで、他の人の公開リポジトリのコードから、
同じ書き方をしているコードを検索することができるわけです。

ただし、コード検索をするにはGitHubのアカウント登録が必要なので注意です。
GitがわからなくてGitHubを敬遠してる人も、ぜひ試してみましょう。

## 　Awesome とは
ようは「便利なものリスト」です。

https://github.com/topics/awesome

Googleなどで言語名と一緒に `awesome github` と入力して検索してみてください。
もしJavaScriptなら `JavaScript awesome github` といった具合です。
メジャーな言語であれば、awesomeとついたGitHubのリポジトリページが出てくるはずです。
開くと、大量の箇条書きが書かれたページが開くと思います。

GitHubにはAwesomeというカテゴリがあり、基本的にこのカテゴリに含まれるリポジトリは、
特定のプログラミング言語にまつわる便利なツールやライブラリ一覧だったり、
便利なコードスニペット集だったりします。

チートシートである程度書き方はわかったけど、
実際に自分が作りたいものを作るために、何が必要なのかがわからないというときは、
ぜひこのAwesomeを参考にしてみましょう。

## 　コードゴルフ とは
与えられた課題を、可能な限り短いコードで記述するスポーツのような文化です。
Googleなどで言語名と一緒に `codegolf` と検索すると、いろいろ出てくると思います。

これによって得られるのは、良くも悪くも「こんな書き方もできちゃうんだ！」という発見です。
殆どのコードゴルフの回答例は、とてもコードの文字数が短く無駄がないため、
そのコードがどうやって動いているのか調べるだけでも、言語仕様への理解が深まります。

なので、ある程度簡単なコードが書けるようになってきたら、
コードゴルフで遊んでみるといいでしょう。

## 　ウンコード・マニア とは
「誰だ、こんなウンコみたいなコード書いたやつは！」という事例を
大量に掲載している投稿サイトです。

https://unkode-mania.net/

ここでは、絶対にマネしてはいけない書き方が晒されているので、
反面教師的にアンチパターンを学習することができます。

言語の学習度合いが高まれば高まるほど、笑えたり背筋が凍ったりするので、
まとめサイトを読むみたいに普段から流し読みしてみるといいかもしれません。

## 不真面目な人のための学習方法
さて、ここまで８つの学習ツールを紹介してきたわけですが、
これらをどのように使っていくのかという話ですね。

基本的には、以下のような感じで進めればOKです。

1. 学習する言語のREPL環境または、コードをすぐ実行できる環境を構築する
2. その環境で`HelloWorld`が出力できるところまでやる
3. あとは「チートシートを見ながら、自分がわからないと思った部分だけを試しに実行する」という工程を繰り返す。
4. チートシートの内容がある程度わかるようになったら、チートシート・GitHub検索を駆使してチュートリアルをやってみる。
5. チュートリアルが終わったらコードゴルフやAwesomeに載っているものを使ってみるのに手を出してみる。仕事で使うならウンコードマニアも読み始めてみる。
6. ある程度自分が書きたいコードが書けるようになったら、初心者卒業！
7. より理解を深めたくなったら、参考書や公式ドキュメントを辞書的に読む。

チートシートやチュートリアルは、わかるものに関しては飛ばしちゃって全然OKです。
分からなくなったら戻って読み返してみるみたいなスタンスで。
基本的に「わからないことだけ埋めていく」感じで進めていけば、素早く学習することができます。

チュートリアルが終わったら、何か簡単なツールを作ってみると、より効率よく学習できると思います。
ただ、自分にとって役に立たないツールを作るのって、結構モチベーションが必要なことなので、
なるべくなら、自分が作りたいものや、便利なものを作ったほうがいいです。

例えば・・・自分の性癖にだけマッチするように作られたエロネタ収集ツールとか？

## あとがき
とまあ、こんな感じです。

僕はとても不真面目なので、新しい言語やフレームワークに入門するときは、
入門書も公式ドキュメントも読まずに、この方法でいつもスタートしています。

なので僕みたいに、入門書１冊をただ読んで習得できるほど人間できていない人は、
ぜひこのやり方を実践してみてはどうでしょう