アウトプットって何ぞや！？

# アウトプットって？
アウトプットってなんやーー！！？？
と思いの自分と同じ初学者の方はいませんか？
Twitterでもスクールでも「アウトプットは大事！」「インプットとアウトプットのバランスが大事！」なんて言葉が飛び交っていますよね。
そもそも自分がこの業界に足を踏み入れる前にアウトプットなんていう言葉を使った記憶はないですし、アウトプットという言葉が実際何を指して言っているのか良く分かっていないです。
(他の業界にもあるかもしれませんが)
なので、この業界、特にプログラミングにおけるアウトプットとはなんぞやという所を調べていきたいと思います。

#
> 出力（しゅつりょく）は、何らかの対象から出る信号や力、またその種類や大きさのことである。入力の対義語。アウトプット（英: output）ともいう。
> 主に以下のような分野の用語として使われる。
> - 電子機器のインターフェースの出力信号
> - コンピュータのプログラムなどの出力データ
> - 機械の動力の大きさ
> - 無線通信では空中線電力のこと
> [出典: フリー百科事典『ウィキペディア（Wikipedia）』](https://ja.wikipedia.org/wiki/%E5%87%BA%E5%8A%9B)

...Wikiにはアウトプットという言葉自体はなかったですが出力は同じ意味を指しているので、こちらで考えていきましょう。
自分(人間)に置き換えてここから読み解いてみると、自身から何かを出すということだという事を指しているということが分かります。
何かというのは、一番分かりやすいのが言葉でしょうか？
言葉で話す。
これは理解していることを話すのか、理解していないことを質問するのか、といった事だと思います。
が、いまいち要領を得ないので深掘って行こうと思います。

# アウトプットとは自身から何を出すことである
ここにフォーカスを当てて考えていこうと思います。
主に2つに分類してみます。
- 何か
- 出す
ポイントはこの2つですね。
「何か」は「出す」に依存しますので、「出す」という事を考えてみましょう。

# 出す
出すとはなにか。
出すって言っても言葉以外にこれと言ってなくね？って思ったので、
「自身が行う事」や「自身が学習で行う事」という点で考えていきたいと思います。
- (言葉を)発する
- (技術書の要点を)書く
- (コードをキーボードで)叩く
現時点で自分が学習する中で考えるとこんなところでしょうか。

## (言葉を)発する
現時点では分からない点を質問するという事が多いと思います。
自分が分からない所をどうしたら相手が伝わるかといった所を考えて質問しています。

## (技術書の要点を)書く
そこまで定着率を狙うような要因ではなく、自身が忘れた時に振り返れるようにするという点が一番大きいのかなと思います。
ただ読むよりかはいいかなぁぐらいな感覚ではあります。

## (コードをキーボードで)叩く
技術書などでこのコードがこうなります、と書いてあるのを見るだけでなく模写になってもいいから自分でも実際にやってみるということですね。
自分で確かめて理解をする、コードを書くことに慣れるという目的で行っています。

# 他に効果的なものは？
自分が行っていることで思いつくのが存外少なかったですね...
ここから先はググって調べていきたいと思います。
ググり力が試されます。

## 基本情報技術者試験ドットコム
[効果的な勉強方法](https://www.fe-siken.com/festudy.html)
こちらのサイトで効果的な勉強方法という記事が書いてありました。
以下抜粋していきます。
> インプットとはテキストなどを読んで知識や考え方を頭に入れる学習、
> アウトプットとは実際に問題を解いて問題慣れしたり、出題のパターンを知る学習です。

アウトプットの種類には問題を解くということもあるということですね。
基本情報技術者試験の学習に関しては、過去問や各問題テキストを使って学習するのが良いと言われています。

有名な[Paiza](https://paiza.io/ja)はプログラミング学習を演習問題を通して学ぶという形を取っています。
また、自分の入っているスクールでも[Envader](https://envader.plus/home)を使ってLinuxなどの学習が行えるようになっています。
問題を解くということで意識せずとも効率的なアウトプットに繋がっていました。

## エンジニア アウトプット 種類 でググる
一番最初に出てきた[このすみ技術ろぐ](https://www.konosumi.net/entry/2017/11/03/050937)様
を参考にしたいと思います。

> - Qiitaに書く
> - ブログに書く
> - プログラムを書く
> - ライトニングトーク(LT)で登壇する
> - レギュラー枠で登壇する
> - teratailで質問・解答する
> - 技術系同人誌を作る
> - サービスを作る
> - ポッドキャストを運営する

導入しやすい観点から考えると
- Qiitaに書く
- ブログに書く
- プログラムに書く

難易度が少し高くなって
- ライトニングトークで登壇する
- サービスを作る
といった感じでしょうか。

## Qiita, ブログに書く
ブログとQiitaは似たような部類にはなると思いますが、Qiitaの場合は同じエンジニアが見る機会が多いので、自分がアウトプットした内容に共感してもらったり、意見をもらったりする事が出来るという点がメリットにはなりますが、若干敷居が高いようには感じますね。
ブログとQiita、どちらに載せるかは書いた記事の内容次第で選んでいくといいとは思います。

## プログラムに書く
自分でも行っていた事が良いアウトプットであったということが確かめられました。
プログラムに書くが派生してサービスを作るといった所に帰結する感じですかね。
プログラミング学習は、「習うより慣れよ」がかなり大事なようです。

## ライトニングトークで登壇する
ライトニングトークに限った話ではないと思いますが、自分がインプットした知識や経験を誰かに発言するという形ですね。
人に何かを教えるというのが結局のところ一番効果的なアウトプットになると教えて頂いた事があります。
質問される前提でこちらもインプットするから必然的に幅広く学ぶ必要があるからですね。
## 海外記事から
調べて行く中で
[エンジニアは全員技術記事を書くことを習慣化した方がいいぞ](https://qiita.com/HiromuMasuda0228/items/a71dea7ef4d77a30b118)
こちらの記事に出会いました。(海外の記事を翻訳した内容のようです)
エンジニアたるもの、呼吸をするかの如くアウトプットしろというような意味みたいです。
多くのLGTMが付いてるように、アウトプットがいかに大事かという事が分かりますね。

# まとめ
ここまで出てきた内容から効果的なアウトプットをまとめたいと思います。
## 前提: アウトプットをすべし！！
- 知識をインプットする
  - 自分の言葉で言語化してみる
    - ブログ、Qiitaに投稿してみる
  - 誰かに教える, 発表してみる
  - 問題集などを解いてみる
- プログラミングを学習する
  - 実際に書いてみる
  - 何かサービスを作ってみる
  - 演習問題が出来るサービスを使って解いてみる

プログラミング学習する上ではこういったアウトプットを心掛けると良い定着率に繋がると思います。
プログラミング学習に限った話なので、もっとやるべき事は多くあると思いますが、必要とあれば個人個人で＋α行うのがいいですかね。
(自分はGitHubで草生やしてモチベーションを上げています)
また他に効果的なアウトプットがあれば教えて頂けると助かります！
よろしければ参考にしてください！