プログラミングを楽しくするたの言語化～楽しく言語化能力を鍛えよう～

# ご挨拶
この記事はRUNTEQのアドベントカレンダーの24日目を担当しています。
はじめまして、あるいはこんにちは。RUNTEQでRailsやRubyを学習しているさくぴと申します。
「プログラミングでのワクワク」というテーマを聞いて、もっとプログラミングを楽しむには？と考えた時に、真っ先に思いついたのが言語化でした。
後述しますが、プログラミング学習を進めるうえで言語化は欠かせません。
言語化がスムーズにできるようになると、プログラムを作る過程がさらに楽しくなります。
本記事をきっかけに、言語化に対しての抵抗感が少しでも緩和されれば幸いです。
早速、本題に移りましょう。


# 目次

# 1.対象読者
- 言語化が苦手な方
- 言語化能力を鍛えたい方

# 2.プログラミング学習において言語化能力が必要な理由
プログラミング学習において言語化能力が必要な理由には様々あります。
本記事では**知識の空白を理解するため**という点にフォーカスして解説していこうと思います。

なぜ知識の空白を理解するために言語化が必要かというと、言語化を通じて不明な点（空白）が分かりやすくなるからです。
例えば、友人と日本酒を飲んでいるときに、以下のようなことを聞かれたとします。
```
「日本酒ってどうやって作るの？」
```
この問いに、あなたはこう答えました。
```
「日本酒は米を醗酵させて作る」
```
あなたの答えを聞いて友人は問いかけます。
```
「どうやって米を発酵させるの？」
```
この問いに答えられる人は、日本酒をよく飲む方や酒造で働いている方以外ではあまりいないでしょう。
この答えられなかった部分が、知識の空白になる部分です。
知識の空白が分かれば、そのあとに調べることもできます。
しかし、ここで発言をしていなければ（**言語化していなかったら**）、自分が持っている知識の足りていない部分が分かる日は、積極的に情報収取をしない限りやってこなかったことでしょう。

プログラミング学習は、扱うもの（プログラム）が視覚的にイメージしづらいことから、どうしてもわからないことがわからないという事態に陥りやすいです。

言語化がスムーズにできるようになることで、知識の空白を把握しやすくなります
知識の足りない部分が把握できたら、あとは調べて自分のモノにしていけばよいだけです。
言語化を通じて調査効率が向上するので、プログラミング学習において「**わからないことがわからない**」**を防ぎやすく**なります。

結果、わからないことによるフラストレーションが減少し、楽しくプログラミングができるようになるというわけです。

# 3.楽しく言語化するためのステップ
ここからは、楽しく言語化を行うためのステップを解説していきます。
国語が苦手だったという方でも取り組みやすい内容となっておりますので、気負わずリラックスして読み進めてくださいね。

## STEP1 言語化に慣れよう
言語化に苦手意識を持っていらっしゃる方は、まず**言葉に慣れましょう**。
誰でもできる簡単な方法を説明します。

:::note info
とにかく何でも書いてみる！
:::
TwitterやInstagramの投稿を見て思ったことをなんでもいいので書いてみてください。
書く場所は、ノートやwitterなど、なんでもいいです（Twitterなどソーシャルメディアで投稿する際は内容に気をつけましょう！）。

とにかく思ったことを書くことから始めてみてください。

読む文章は、最初はTwitterなど短い文章から始めて、慣れてきたらnoteやブログなどある程度長い記事を読んでみましょう。
そして思ったことをなんでもいいので書いてください。
記事を読んで、自分ならどう思うか？何を疑問に感じたのか？をとにかく書いてみてください。
文章の出来栄えは気にしなくていいです。

自分の考えたことを言葉としてアウトプットすることに慣れていきましょう！

## STEP2 言いたいことを把握する

さて、自分の考えを言葉にするのには慣れてきたかと思います。
ここでさらに、ご自身の言語化能力をレベルアップさせるためのステップを解説します。

記事を読んでなんでもいいのでアウトプットしましょう、ということで、思ったことをアウトプットされてきたと思います。

2番目のステップとしては、その書いた文章を見直してみましょう。
ここでの見直すとは、文章の校正をするという意味ではありません。

書いた文章の中で、どれが一番疑問に思っていることなのか、何が一番伝えたい事なのか、を振り返ってみてください。
主題を捉える、とも言います。



例えば、美味しそうなご飯の画像を見て、このような文章を書いたとします。
```
おいしそう。どこで食べられるのかな。値段いくらかな。このトッピングは何だろう。
```
この文章の主題をどこに置くかは、皆様にゆだねられます。
例えば私でしたら、主題はここに置きます。
```
どこで食べられるのか
```
ほかにも、こんな捉え方もできますね。
```
なぜおいしそうに見えるのか
```
このように主題をどこに置くかは、皆様個人の知りたい事や感性に依ります。
ご自身を振り返りながら、いちばん何を知りたいか、伝えたいか、を考えてみてください。

## STEP3 文を組み立ててみよう
次は、「文を組み立てて文章を作る」ことに挑戦してみましょう。
STEP2で見つけていただいた主題に沿うように、文を構成していきます。
文章を作るときは、文を書くより先にキーワードをいくつか挙げて、キーワードを取捨選択したのち、論理を組み立てるとやりやすいです。

::: note info
キーワード作成のコツ
・主題から逸れないように連想していくこと
・主題から逸れているものは遠慮なく取捨選択すること
:::

例えば、美味しそうなご飯の画像を見たときに考えたことをアウトプットするとします。
主題（一番伝えたい事）を、以下のように設定します。
```
どこで食べられるのか
```
ここから、キーワードを考えていきます。
```
- この画像のご飯が食べられる場所
- どこの駅に行けば、似たような料理を食べられる店が多いか
- この画像の料理名
- 家の近辺で似たような料理を食べられる場所
- 有名なお店
```
ここから論理を組み立てていきます。

::: note info
論理の組み立てのコツ
・伝わりやすいように、キーワードを前後させる
・読み手にとって一番知りたい情報を先に書く
・書き手（自分）にとって説明しやすい順に書く
::: 

```
- この画像の料理名
- この画像のご飯が食べられる場所
- どこの駅に行けば、似たような料理を食べられる店が多いか1
    - 駅名 
    - 有名なお店
- どこの駅に行けば、似たような料理を食べられる店が多いか2
    - 駅名 
    - 有名なお店
```
この順にした理由は、以下になります。
```
- 最初に料理名が判明していたほうが読み手にとって分かりやすい
- 画像の料理が食べられる場所の説明を先に置くことで、あとの説明をしやすくなる
- 駅の説明と有名なお店の説明はセットで説明する
- 駅ごとに説明することで、駅ごとの有名なお店を知りやすくなる
```


ここまでできた段階で、キーワードごとに文字起こしをします。
出来上がった文を順番に組み立てて文章を作ってみましょう！

この例で組み立てた文章は以下のようになります。
```
この画像の料理名は、餃子と言います。
この写真の料理は、○○駅の△△店で食べることができます。
- 食べられる店が多い駅：○○駅
    - 有名なお店は△△店です。
    - ほかには、●店も有名です。
- 食べられる店が多い駅：○×駅
    - 有名なお店は▽店です。 
    - ×店も有名です。
```

## STEP4 論理の空白を見つけよう
このSTEPでは、書いた文章の中の空白を見つける作業を行います。
空白とは、その文章から読み取れない情報のことです。
空白は、以下の条件で発生します。

::: note warn
空白の発生条件
・書き手側に知識が無いとき
・文章に論理の飛躍があるとき（因果関係が不明瞭）。
::: 

例えば、あなたは以下のような文章を書いたとします。
```
この画像の料理名は、餃子と言います。
たしかアジアの国の料理です。

この写真の料理は、○○駅の△△店で食べることができます。
食べていたら、アニメを見たくなりました。
```
この文章の空白は、以下2点です。
```
「たしかアジアの国の料理」
-> 知識の不足

「食べていたら、アニメを見たくなりました」
-> 因果関係が不明瞭（論理の飛躍）

```

ここで空白が発見されましたね。
知識の不足に関しては、できる限り調べて空白を埋めるように努力しましょう。
（分からなかったら分からないで書くのもアリです。その際は誰かに教えてもらいましょう）
論理の飛躍は、前後の文章と比較して因果関係が正しいか？情報が一貫性を持っているか？といった視点で、批判的に文章を読むことで発見しやすくなります。

空白を自分で発見することは、言語化に慣れていないと少し難しいです。
書いた文章に空白がないか確認するには、どなたかに読んでもらうのが手っ取り早いです。
積極的に読んでもらいましょう。

## STEP5 プログラミング学習に活かそう
ここまでで、文章を構成することには慣れてきたかなと思います！
文章に対する苦手意識は払拭されましたか？

少しでも苦手意識がなくなったのであれば、次はプログラミング学習に活かしてみましょう。
おすすめは、学習した内容をアウトプットすることです。
学習内容を言語化してみましょう。

以下、アウトプット時の流れを一例とともに記載しますので、参考にしてみてください。

### 1-書きたい事を決める（主題を決める）
まず、何について書くのかを決めましょう。
学習のアウトプットとして言語化する際は、最初は細かく主題を設定したほうが書きやすいかと思います。
```
おすすめしない例：
Railsのモデルについて
-> モデルの何について書くのかが不明瞭なため、言語化の際に脱線しやすいです。

良い例：
Railsのモデルについて、作成方法とマイグレーションのやり方について書く
-> 何について書くのかが明確です。
```

### 2-説明するのに必要なキーワードを抽出する
設定した主題に沿って、STEP3で行ったように、まずはキーワードを抽出してみます。

```
キーワードの例：
・モデルファイルの作成方法
・マイグレーションファイルの作成方法
・マイグレーションファイルに何を書くか
・モデルファイルに何を書くか
```

### 3-自分の言葉で書いてみる
抽出したキーワードについて、最初は**自分の言葉で**説明してみましょう。
```
・モデルファイルは、ターミナルで、rails g migration ？？？　で作成できる。？？？ってなんだっけ。あれ、本当にこれで作られるんだっけ？？？１
・上記のコマンドで、マイグレーションファイルが作成される。
・マイグレーションファイルには何を書けばよいのか分からない、忘れた。
・モデルファイルには、カラムのバリデーションや、アソシエーションについて書く。
```
ここで、分からないところや、説明に自信がないところを発見できたかと思います。
これが知識の空白に当たる部分です。

### 4-分からないところを調査・検証する
先ほどの作業で、自分に足りない知識が把握できたと思います。
今回、分からなかったところは以下になりますね。
```
・モデルファイルを作成するときのコマンド
・rails g migration コマンドでは何が作成されるのか
・マイグレーションファイルに何を書くのか。
```
この分からなかったところを、調査したり、質問したり、ご自身で検証したりしてください。
調査・質問・検証で得た情報は、メモをとっていつでも参照できるようにしておきましょう。

### 5-再度言語化する
調査・質問・検証で得た情報をもとに、再度言語化してみてください。
過去の自分が読んだときに、この内容で理解ができるか？ということを念頭に置きながら書いた文章を読み返すとよいでしょう。
読み返した後に、内容があっているのか自信がないときや、理解不足だと感じる点があれば、調査・検証フェーズに戻って、繰り返し調べていきましょう。

### おまけ-アウトプット内容を公開してみる
ここからは、もし可能なら実践してみてください。
アウトプットとして作成した文章を公開することで、課題が分からない、理解できなかったという人の助けになるかもしれません。
公開する際は言葉遣いや表現手法に十分に注意して、投稿するようにしましょう。

::: note info
あなたの知識をアウトプットして、積極的にgiveしていきましょう！
::: 
::: note warn
インターネット上に記事を公開する際は十分注意してください。
:::

# 4.終わりに
如何でしたでしょうか？
本記事を読んだことで、言語化って面白いじゃん！と思っていただけたなら、それ以上に嬉しいことはありません。
ぜひ言語化を習得して、プログラミング学習に活かしてください。
そうすれば、もっと楽しいプログラミング生活になること間違いなしです！

ここまでお読みいただき、ありがとうございました。