フロー状態と幸せのプログラミング

f:id:cyclemem:20180724235451j:plain

今日、久しぶりに時間を忘れて仕事をした。

ぼくは今の仕事が好きで、割といつも楽しんでやっているのだけれど、今日のそれはレベルが違った。いわゆるフロー状態だったのかもしれない。

というわけで、今日はフロー状態について書いてみようと思う。

フロー状態とは

ビジネス書になんかでよく見るフロー状態。スポーツ選手で言うゾーンのようなもの。とはいえ、あまり詳しく知らなかったので少し調べてみた。

 フロー (英: Flow) とは、人間がそのときしていることに、完全に浸り、精力的に集中している感覚に特徴づけられ、完全にのめり込んでいて、その過程が活発さにおいて成功しているような活動における、精神的な状態をいう フロー (心理学) - Wikipedia

Wikipedia先生による定義には、今日のぼくの状態は当てはまっていたような気がする。

ちなみにこの理論、心理学者のミハイ・チクセントミハイという、恐ろしく覚えにくい名前の人が考えたらしい。ただフロー以外にも、ゾーンやピークエクスペリエンスなど様々な言い方があり、また当のチクセントミハイ教授も自分が最初に考えた概念でないと言っているそう。実際、東洋における仏教などの精神的な実践において、このフロー状態は昔から認識されていて、それを西洋で発信したのがチクセントミハイ教授だったそうだ。

フロー状態に入るには

少しネットで調べてみると、フロー状態に入る方法が山のように出てきた。その中でも有名なものとして、8つ挙げられている。

''' 1. 明確な目的 2. 専念と集中、注意力の限定された分野への高度な集中 3. 自己に対する意識の感覚の低下、活動と意識の融合 4. 時間感覚のゆがみ 5. 直接的で即座な反応 6. 能力の水準と難易度とのバランス 7. 状況や活動を自分で制御している感覚 8. 活動に本質的な価値がある、だから活動が苦にならない '''

こちらもWikipedia先生調べだけれど、正直意味が分からない。 他の記事によれば、この8つがフロー状態に入る際の特徴らしい。Wikipediaとの対応は括弧で示している。

''' 1. 達成できる見通しのある課題と取り組んでいる時に生じる 2. 自分のしていることに集中できている 3. 明確な目標がある(1) 4. 直接的なフィードバックがある(5) 5. 意識から日々の生活の気苦労や欲求不満を取り除く、深いけれども無理のない没入状態 6. 自分の行為を統制している感覚をともなう(7) 7. 自己についての意識は消失するが、フローの後では自己感覚はより強く現れる(3) 8. 時間の経過の感覚が変わる(4) '''

www.flowinstitute.jp

他には、

多少ずれがあるので、なんとも言えないけれど、どうやら「目的」「適度な難易度」「フィードバック」「統制感」辺りがキーワードになりそうだ。

プログラミングとフロー状態

と、ここまで書いていて思ったのだが、プログラミングをやっているとハイになる瞬間があって、その理由ってこの4つがしっかりあるからじゃないだろうか。

実際今日ぼくがフローに入っていたのも、プログラミングの業務だったし、昨年毎週のように勉強会をやっていた時期、8時間ぶっ通しで取り組んでいたのもプログラミングだった。

目的

まずプログラムを組む際には、必ず何か「目的」がある。例えば、「WEBサービスを作りたい」でもいいし、「業務改善のためのプログラム」でも、「APIの挙動を知りたい」でも、なんでもいいけれど、目的無しでは書かないはずだ。なぜならプログラムは究極的にはアルゴリズムの組み合わせで、目的がなければアルゴリズムが組めないからだ。何かを解決するためにアルゴリズムは基本存在しているので、プログラミングではその「解決」が目的になる。

一つ例外をあげるとすると、プログラミングの学習をしているときはこの部分が弱い。だから学習して力がつくことはモチベーションになるけれど、フローにはなりにくい。特にチュートリアル的な教材をやっているときはこの傾向が強い。一方で、そこから一歩踏み出して、自分でサービスを作ったり、自分なりの工夫をしてチュートリアルを組み直せるような人は、そこからも継続して学んでいける気がする。

適度な難易度

次に、プログラミングには「適度な難易度」が存在する。技術系の人は、基本的に新しい技術に目がない。ライブラリがアップデートしたら、とにかくドキュメントを読む人も多いし、新しいサービスが展開されたらとにかく試す人の数が凄まじい。だからこそ「◯◯を作ってみた」のような面白い技術記事というのが溢れている。しかもこの世界は、情報のアップデートが恐ろしく早く、また分野の範囲が吐きそうなくらい広い。何もしなければ勝手に難易度が上昇していくゲームで戦っている。よってプログラミングをやっているときは、基本的に常に「適度な難易度」が存在するといえるだろう。

フィードバック

そして「フィードバック」。これはもう言わずもがな。ぼくは完全にこれにやられている。

プログラミングでは、『実行』と押せばプログラムが起動する。そして恐ろしい速さで処理をして、エラーが返ってくる。哀しいことに、このエラー。出てくるたびに落ち込むしイラッとくるのだが、解決したときの喜びはひとしおだ。正直癖になる。

まず仮説を持ってプログラムを組んで、実行直後にエラーを吐く(1回目のフィードバック)。また仮説をたてて修正をして、実行したら次のエラーが出る(2回目のフィードバック)。またいろいろ調べて仮説をたてて実行して、ようやく処理が通る(3回目のフィードバック)。

こんな具合で、常にフィードバックありきでプログラミングは行われている。このフィードバックの速さと正確さ、そしてエラー地獄を抜けた後の達成感は本当にやみつきになること請け合いである。

統制感

最後に「統制感」。これもまたプログラミングでは簡単に味わえる。なぜならプログラミングで必ず発生する、設計のステップは、この統制にほかならないからだ。 ある問題を解決するためのプログラムを組むとき、解決策をコードに起こすために、その実行方法をまずは考える必要がある。ここでどのようにその解決策が機能するのかの全体設計を綿密に組んでいくのだけれど、そのときの戦略を立てる感じや全体像を設計していく感じの統制感は凄まじい。また自分が組んだプログラムを修正、アップデートしているときも、その処理の流れが手に取るようにわかるので、これもまた楽しい。

なんだか後半変態的な文章になってきたけれど、こんな感じでプログラミングをやっているときは、何も意識しなくてもフロー状態になりやすい条件が揃っていそうだ。

おわりに

と思っていたら、すでにこんな記事があった。やっぱりプログラミングとフロー状態って相性良さそう。

medium.com

プログラマにとって、プログラミングはフロー状態に入りやすい仕事だと言える。フロー状態で仕事をしていると、プログラマは幸せや楽しさを感じることができる。それがまた高い生産性に繋がる。

ざーっとここまで書いてみた。書きたいことを勉強して、文章に起こしてみるっていうのはいいですね。 少しでも皆さんのお役にたてれば嬉しいです。ぼくももっとフロー状態が続くようにがんばります。

それでは、本日も最後までお付き合いいただきありがとうございました。