プログラミングセンスを鍛えたい？なら「7 Billion Humans」だ！

#今回の内容
アドベントカレンダーも後半戦！
本当はUiPathの話をしようかと思ったけど
ちょっと趣向を変えて今回は自分がやっているゲームの話題をしてみようかなと思います。
と言っても、もちろんプログラミングに役立つゲームです！

#自己紹介
ランスタッド株式会社で社内SEをやっている、移り気気質のSEです。
相変わらず何でも屋的な感じで幅広くやってます。

#本題の前に
これを読んでいる人にとって「プログラミングセンス」とはどんなものでしょう？
自分は**発想力**だと思っています。
他の人が想像しない方向からアイディアを出したり、はたまた水と油のような全く違うものを一つにしたり…
上のようなことをポンポン出来る人が、所謂プログラミングセンスがある人なのかなと自分は思っています。
でも、これらの力はそもそもどうやったら身につくのか？
今回紹介するゲームは、そういう力を鍛えるのに最適じゃないかなと思います。

#「7 Billion Humans」！！
今回紹介するゲーム「7 Billion Humans」がどんなゲームなのかを説明しましょう！
![IMG_2430.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311963/7977a701-ba91-ee9a-4922-8e16c289af10.jpeg)

##ジャンル
パズルゲーム。ジャンルとしては論理パズルに当たります。

##目的
用意されたロジックを使用し、画面上の人間に指示を与えて目的を達成させるのが目的です。
そして、その指示にプログラミングが必要になります。（←ここがミソ）
予めゴールが決まっているので、テトリスのようなエンドレス的なゲームではないです。

##プログラムの知識って必要？
不要です。チュートリアル的なステージは用意されており、新機能が増える度に随時そういうステージが挟まります。
むしろ、このゲームやれば逆にプログラムの基礎が身につくんじゃないかなってくらいです。
メモリ（変数）の扱い、ループ、条件分岐、処理のリピート、ランダム処理　etc…
本当によくプログラムで使う手法が山盛りです！
![IMG_2431.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311963/3c232eb6-3d1f-0bbe-8b7a-0f727e4ba937.jpeg)
※こんな感じで、プログラマーなら見覚えのあるロジックを駆使して人を動かしていく

#どんなことが学べるのか
さて、一体このゲームで何が学べるのかという説明をしていきます。
ただ、これはあくまで自分の主観なので、人によってはうーん？って思うところもあるかもしれません。

##並列思考
作ったプログラミングで人を動かすゲームですが、動かす人は１人じゃありません。
**複数の人を１つのプログラムで動かす必要があるんです！**
なので、自分で作ったプログラムでどういう風に人が動くのかというのを、様々な想定をしながら作成しなければクリアは出来ません。
![IMG_2434.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311963/f4e7d2a2-3fc3-881e-2b86-36185dd8353a.jpeg)
※１つのプログラムで、これだけの人を同時に動かさないといけない。一人ひとりがどうやって動くのか考える必要がある。

##最適化
後にも説明しますが、このゲームはステージ毎にロジック数と実行速度の目標があります。
処理を長々と書くのではなく、不要な部分、冗長な部分を見つけだしロジックそのものを短くしていく。
その過程で、最適化手法が身についていくと思います。
![IMG_2433.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311963/34550b99-67fb-0d9a-5bb7-dfc321dd4427.png)
※これだけの人数をゴールに導くのに必要な最短ステップは僅か9行、どう処理すればいいのかな？

#高速化
上では最適化について書きましたが、最適化＝高速ではないんですよね。
むしろ最適化せずにコードを冗長に書いた方が処理が速くなったりします。
どのような考え方なら処理を高速化出来るのか…
実行速度の目標を追っていけば、高速化手法が身についていくんじゃないかなと。

#妥協
目標があると同時に達成したくなるのが人情だと思います。（自分だけ？）
でも、ステージの中にはどんなに頑張っても最適化目標と実行速度目標を達成できないステージもあります。
そんな時、どこまでやるのか、出来るのかという妥協を知ることも出来る（気がする）。

#発想力
やはりこれが一番鍛えられるでしょう。
本当にコロンブスの卵のような閃きがないとクリア出来ないステージがあります。
如何に先入観を取り払えるか、別の視点から新しい手法を見つけられるか…
そんなことを考えながらステージをこなしていくと、自然と発想力が鍛えられる気がします。
![IMG_2432.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311963/53f0b176-7b8f-72e7-f944-005467a44d1a.jpeg)
※このステージ、実は斜め移動できるんだぜ？

とりあえず、自分が思っている身につけられる力はこんなとこでしょうか。

#余談

##このゲームについて
このゲームは有料アプリなんですが、そんな高くはないので気軽に手を出せると思います。
スマホ版、PC版があるんですが、何故かPC版はスマホ版より高いです…
ちなみに、これは２作目で１作目もあるんですが、システム的には２作目がオススメ。

##ゲームのストーリー
このゲーム、一応ストーリーがあります。
「全て仕事を機械に任せられ、人が仕事しなくてもよくなった世界で、人がやはり仕事をしたい！と言い出す。
そこで仕事を機械に用意してもらい、それを人がこなしていく…」
とまぁ、何とも本末転倒感漂う終末世界なストーリー。
でも、将来的に機械に仕事をやってもらうと割とあり得るんじゃないか？とも思っちゃいますね。

##似たようなゲームってある？
似たようなゲームは自分は知らないです。（前作：Human Resource Machineくらい）
でも、プログラミング学習できるゲームは知っています。
超有名どころの**MineCraft**です。
このゲームは、パズルじゃないのでゴールは無いですが、箱庭ゲームなので自分がやりたいことを好き勝手に出来るのが特徴ですね。
でも、複雑な仕組みを作るには発想力が必要不可欠なのも、このゲームです。
また以前MineCraftのインタビューで、**MineCraftのギミックを作る＝プログラミング組むのと同じこと**、という記事を見たことがあります。
昔、動画で見ましたがMineCraftで**量子コンピューター**のようなものを作っていたのを見たのは度肝を抜かれました…

#最後に
ゲーム使って学習とかは、昔から試されてはいましたが流行りませんでした。
でも、近年では米国などの学校の授業ではゲームの「MineCraft」を導入し、子供の発想力を養う授業の取り組みがあります。
実際PCさえあればいいので、片付け不要、ゲーム性がブロック遊びのような感じで自由自在、子供も授業というより遊んで楽しむ、って感じで経済的かつ効果的ですよね。
（日本でもプログラムが必修課題になりつつあるけど、そんなものより余程効果的だと思う…）

大事なのは楽しんで力をつける、この部分だと思います。
別に大人がゲーム学習やったって良いわけですよ。そういう意味ではゲーム好きの自分としては、このゲームは非常に合っています。
（難易度高くて全ステージクリア出来てないけど…）
この記事読んだ人も、これを一例に楽しみながら力をつける術を身につけられれば良いなぁと願う限りです（－人－）