実践ゾーンコーディング

# はじめに
勉強会の反省会で池田さんに紹介されたダニエル・ピンクの本にあったフロー状態なるものがプログラミングの世界にもよくある話ということで、いろいろ調べた結果と自分なりの理解と実践方法をまとめてみました。

<a href="https://www.amazon.co.jp/%E3%83%A2%E3%83%81%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B33-0-%E6%8C%81%E7%B6%9A%E3%81%99%E3%82%8B%E3%80%8C%E3%82%84%E3%82%8B%E6%B0%97-%E3%80%8D%E3%82%92%E3%81%84%E3%81%8B%E3%81%AB%E5%BC%95%E3%81%8D%E5%87%BA%E3%81%99%E3%81%8B-%E3%83%80%E3%83%8B%E3%82%A8%E3%83%AB%E3%83%BB%E3%83%94%E3%83%B3%E3%82%AF/dp/4062144492/ref=as_li_ss_il?ie=UTF8&linkCode=li2&tag=27olderistrad-22&linkId=8dac837b0e43eabc67bb36dfd288dab6" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4062144492&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=27olderistrad-22" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=27olderistrad-22&l=li2&o=9&a=4062144492" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

----

# 参考
- [How Github Works](https://zachholman.com/posts/how-github-works/)
- [Respecting "the Zone"](https://juristr.com/blog/2012/04/respecting-zone/)
- [The 5 Steps to Focus Your Mind and Flow Into The Zone](http://www.myrkothum.com/flow-into-the-zone/)
- [フロー状態という幸せを得るために働く](https://medium.com/@kuranuki/%E3%83%95%E3%83%AD%E3%83%BC%E7%8A%B6%E6%85%8B%E3%81%A8%E3%81%84%E3%81%86%E5%B9%B8%E3%81%9B%E3%82%92%E5%BE%97%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E5%83%8D%E3%81%8F-b10747da7ce5)
- [プログラマに優しい職場環境](http://umenon.com/2012/08/09/programmer_friendly_workplace/)
- [プログラミングでフロー状態に入るための習慣について](http://futurismo.biz/archives/5665)
- [『ゾーン』に入る方法](https://anond.hatelabo.jp/20140204221702)
- [【システム開発と集中力】ゾーン！フロー！俺最強！カタカタカタッ…ッターン！ドヤァ ( ´ｰ`)](https://codeiq.jp/magazine/2014/06/11368/)
- [わざとゾーンに入らずにコードを書く](https://www.scutum.jp/information/waf_tech_blog/2013/10/waf-blog-032.html)

----

# ゾーンコーディングとは
コーディング中にフロー状態に入ることで、生産性や創造性が増すとか幸せになれるとかそういった効果が得られる状態のこと。
[How Github Works](https://speakerdeck.com/holman/how-github-works)のスライドの54ページ目に出てきた言葉で`in the zone`という言葉からとって、ゾーンコーディングと呼んでいます。（勝手に付けました）
フロープログラミングという言葉もありますが、こちらはデータフロープログラミングのことで意味は違いました。

----

# どんな効果があるか？
以下の効果があるようです。

- 生産性が極限までに達した気持ちになる
- 想像以上に創造性が増す
- 気持ちよくなり始める
- 時間を忘れるほどの没入感

※ 自分は、座禅の効果でもあるセロトニンが程よく分泌された状態ではないかと考えています。
※ [わざとゾーンに入らずにコードを書く](https://www.scutum.jp/information/waf_tech_blog/2013/10/waf-blog-032.html)にあるように状況によってはゾーンに入ることが望ましくない環境もあるようです。

----

# ゾーンに入る方法
人によってやり方は様々なようなので代表的なものを羅列します。

- 邪魔が入らないようにする(IMの通知をオフ、SNSのツールを閉じる)
- まとまった時間を取る
- 耳栓をする、または音楽を聞く
- IMの状態に「ゾーン中」と書き込む

※ 他から邪魔が入らないようにし、集中できる環境を作ることが大事のようです。

----

# 自分流ゾーンの入り方

----

## 環境

- 邪魔が入らない場所・時間（平日の20:00以降がお勧め）
- お腹が満腹でもないし、空いてもいない状態が良し
- 睡眠時間を適切にとり眠くない状態

----

## 作業内容

- 調べ事をしないでも完了できる作業
- 期限が迫っていない作業(事故対応などとは相性が悪いです)

----

## お作法

- トイレにいっておく
- コーヒーなどでカフェインを取る(コーラは辞めました)
- 音楽を聞く（４つ打ち）

----

# 自分が「入った」と思う状態

- IMの通知が来ていることはわかっているが気にならない、または通知に気づかない
- タイピングミスが少ない、またはミスってもいらいらしない
- わずかに一人小言をつぶやき始める、または大声で唸る
- トイレに行きたくなって我慢できている状態、またはそれを通り越したとき

----

# こんなゾーンはいやだ

- 結局書いたコードがクソ
- ゾーンが長くて終電に遅れる
- なんでもゾーンで片付けようとする
- 最終的に漏れる

----

# ゾーンのデメリット

- 新米プログラマが陥るとコードがクソになりやすい
- 熟練プログラマが陥ると難解なコード(≒クソ)になりやすい
- ゾーン中に書いたテストは抜け漏れが多い（実体験）
- 何らかの邪魔で中断されると、元の状態に戻るのが困難

----

# ゾーンを活用するための準備

- プログラミングの基礎を高める(筋トレ)
- 睡眠時間は適切にとる
- ゾーンに入る時間を決めておく
- 周囲にゾーンに入ることを宣言する

----

# まとめ

- ゾーンという状態があるよ
- ゾーンは誰でも入れるよ
- ゾーンを過信したら危ないよ
- それでもゾーンを使いこなそう