ドラクエとプログラミングとフロー体験

Yoshihito Kuranuki
5 min readApr 1, 2017

--

このところ、プログラミングが面白くてハマっている。まだプロフェッショナルとして働けるレベルではないが、少なくとも趣味としては十分に楽しめるレベルになってきた。

どれくらいハマっているのか。仕事以外の時間は、ほぼすべてプログラミングしている。続きが気になって仕方がないし、他のことはしていられない。実際、そこまでできないけれど、気持ちとしてはそうだ。

この楽しさは一体なんだろうか。何かに似ている。そうか、コンピュータゲームにハマったときに似ているんだ。それも、ドラクエのようなロールプレイングゲームだ。

面白いゲームにハマったら、寝食を忘れるけれど、その感覚に似ている。(最近のコンピュータゲームはやっていないので、20年以上前のゲーム観だけれど)

今年の年始から、未経験の若者を弟子に迎えたことで、自分も改めてプログラミングを再開した。弟子には、必ず毎日一行でもいいからコードを書くように言っている。結局はコードを書いた量が実力に転嫁されるからだ。

少しでも空いた時間を見つけてサクッとやっていくことが、それが積み重ねの経験になる。そこで「隗より始めよ」という訳ではないが、自分も毎日少しずつコードを書いている。人に教えるのは良いプレッシャーになっている。

そして、何事も早く上達するための一番の方法は、没頭することだ。夢中になることだ。出来ることが増えれば、楽しくなるし、楽しければ没頭し、また上達する。それが上達の良いサイクルだ。

プログラミングで出来ることが少しずつ増える感覚と、ドラクエで遊んでいる感覚が似ている。ドラクエなんかでも、レベルアップすると、また次のレベルまでやろうと思ったり、ストーリーが進むと、次のイベントまでやろうと思ったりする。

プログラミングも、新しい機能が書けたり、新しいことができるようになると、さらにやめられなくなってしまう。頭の中でレベルアップのファンファーレが鳴っている。結果もっともっと続けたくなることが、ゲームにハマる状態に似ている。

ゲームもプログラミングも、コンピュータの中で動くというのは同じだけれど、コンピュータゲームと違って、プログラミングの上達は、現実世界での自分自身にリンクしている。だから、その時間を有意義に感じられることは嬉しい。

プログラミングをしていると、知ってることだけで出来ず、解決方法がわからないことに出会うことも多い。そんなときは、どうすれば実現できるのか、もっと良いやり方はないか、いまどきはウェブを活用して情報収集をしながら開発をする。

ウェブに掲載されている情報は、玉石混交だ。古くなった情報もあるし、間違った情報もある。その中から試してみたりして情報の取捨選択をする。そうして、動かなかったプログラムが動くようになった瞬間、一気にアドレナリンが出る。

ドラクエなんかだと、伝説のアイテムとか探して、いろいろな街を訪ねて情報収集していくのに似ている。アイテムを手に入れて、なかなか手強く倒せなかった中ボスなんかを、ギリギリで倒せたときなんかは、一気にアドレナリンが出る。

レベルアップをしていく他に、強い武器を手に入れると、さらに難しいエリアに進めることが出来る。それまで手ごわかった敵も楽に倒せたりする。プログラミングでは、オープンソースの良いライブラリを見つけたとき、そんな感覚になる。

未経験のプログラミング言語に新しく取り組むときなんかは、それまでの経験や知恵は活かすことはできるけれど、知識はゼロからになる。これも、ドラクエでいえば転職だ。レベル1に戻るけれど、スキルなんかは活かせる。

レベルの低いうちは、次のレベルに上がるのに、さほど時間がかからないが、高いレベルになるとたくさんの経験値が必要だ。最初は簡単なプログラムで十分だけど、レベルアップするためには、同じようなプログラムばかりでは成長できなくなる。

熟練者とのペアプログラミングが、とても良い上達方法のひとつだ。開発している様子の画面を横で見ているだけでも、エディタやツールの使い方ひとつとっても勉強になることばかりだろう。

そういえば、ドラクエならレベルの高いパーティに参加して、実力以上の敵を倒すことができれば、レベルの低い冒険者は一気にレベルアップしたものだった。

ゲームでは攻略本なんかを使えば簡単にクリアはできてしまうけれど、そうすると楽しさが半減してしまう。やっぱり自分で解いた方が楽しい。そう、設計書とかに従ってプログラミングしたって楽しくないのだ。自分で考えたほうが絶対に楽しい。

ドラクエとプログラミングにある「楽しさ」の共通項は、おそらく成長している感覚、先に進んでいる感覚なのではないか。チクセントミハイの「フロー体験」で説明ができる。

「フロー体験」とは没頭していることだ。難しすぎるものはやる気がなくなり、簡単すぎても退屈になって、フローに至らない。自分の能力にちょうどいい難易度の挑戦に取り組んでいることでフローに導かれる。

没頭し続けるには、そのバランスを保ち続けて、少しずつ難易度を高めていくのが良い。これは、ゲームバランスを考えるときに似ているのではないか。いかにフローを保つような設計をするのか。プログラミングを人に教える際の参考にはなりそうだ。

ともあれ、フロー状態にある脳は、幸せを感じているらしいから、楽しいのは納得できる。しかし、プログラミング未経験の人が、フローに入れるまでの、ちょうど良い難易度の階段が今はあまりないように思う。

広大なインターネットには沢山の情報があるが、初心者がそこからちょうど良い難易度を自分で見つけるのは困難だろう。その時点でゲームで言えば無理ゲーだ。

ある程度までいけば、自分でやっていけるだろうけれど、ゲームと同じで最初のうちは、ガイドつきのチュートリアルをこなすような仕組みが必要なのではないだろうか。プログラミングの世界における、そんな仕組みを作りたいと考えている。

さて、プログラミングに戻りたいので、この辺にしておこう。

--

--

Yoshihito Kuranuki

ソニックガーデンという会社を経営しています。「心はプログラマ、仕事は経営者」の精神で、プログラマという仕事を誇れるものにすることがミッション。 ブログ http://kuranuki.sonicgarden.jp ※2019年1月に新刊「管理ゼロで成果はあがる」でました。→ https://goo.gl/reZez1