世の中には理系よりも文系の人が多いそうです。
今日は、文系の人がプログラミングを学ぶことについて書いてみます。 続きを読む
タグ: 適性
プログラマの勉強
発達障害とプログラマー
発達障害の方が持つ特性によっては、プログラマーが向いていると言われますね。今日はこのことについてお話します。
競技プログラミングって何?
競技プログラミングという言葉を聞いたことあるでしょうか?
競技プログラミングとは
競技プログラミングとは、プログラマ同士で、プログラミング技術を競い合うための「競技」です。
例えば、これこれのパズルを解くプログラムを書きなさい、といった課題を与えられます。
問題の内容は、迷路の最短経路を調べたり、何かの確率を計算したりと、色々なものがあります。
競技に参加するプログラマは、そのような問題を自分で考えるのでは無く、プログラミングをして自動的に答えを出せるようにするのです。
ただプログラミングするのではなく、以下のような事が競技の「得点」として計測されます。
- 提出したプログラムが正しく動いたかどうか
様々なケースで提出されたプログラムが正しく動作するのかがチェックされて、採点されます。 - プログラミングするのにかかった時間
早く提出できたほうが得点が高くなります。
制限時間が設定されていることもあります。 - プログラムがパズルを解くのにかかった時間
提出されたプログラムがパズルを解くのにかかる時間が計測されます。
これも短ければ短いほど得点が高くなります。
(例えば、単純に「総当たり」で答えを探すようなプログラムだと非常に遅くなってしまい得点が低くなります)
TopCoder
競技プログラミングの世界で有名なのは「TopCoder」というWEBサイトで、世界中から数千人のプログラマーが常時、腕を競うために参加しています。
このサイトの中でも上位数パーセントのプログラマーには「レッドコーダー」という称号が与えられ、競技プログラミングの世界では一目置かれる存在です。
レッドコーダーは、日本人にも十数人しかおらず、アスリートのように毎日(プログラミングの)練習をしないと到達できない境地だそうです。
実際に役に立つか?
こういった競技で競われるプログラミングスキルは、一般的なプログラマーの仕事ではあまり使われません。
あくまでも「競技」としてのものです。
しかし、その他のスポーツと同様に、賞金付きの大会なども開かれています。
また、大きな大会の上位入賞者には一流企業から転職のオファーが来たりするそうです。
日々進歩していく新しい技術は、こういった競技で活躍できる人達が生み出しているのかも知れませんね。
プログラミングの何が面白いのか
マインクラフトとプログラミングの関係
マインクラフトというゲームをご存知ですか?
世界中の子ども達が夢中になっているゲームで、全世界でなんと1億本がダウンロードされたとか…。
すごい数ですね。
現在は、パソコン、スマートフォン、PlayStation 3/4, Wii U, RaspberryPiなど様々なハードで遊ぶことが出来ます。
マインクラフトってどんなゲーム?
どのようなゲームかというと、全てがキューブ状のブロックでできた世界で遊ぶゲームです。

ブロックは、木(オーク、マツ、シラカバなど)、水、土、石(丸石、花崗岩、閃緑岩など)、鉱石(鉄、石炭、ダイヤなど)などなど、多くの種類があります。
最初にゲームをスタートすると、これらを組み合わせた”世界”がランダムに作られます。ランダムといってもある程度の法則性はあって、海や山、森林、渓谷、火山、雪山、地下湖などバラエティに富んだ地形が良い感じに散在していて、広さは地球の8倍もあります。
この世界では、ブロックを加工して家、道具(クワ、ツルハシ、斧など)、武器や防具、トロッコ鉄道、農場など色々なものを作る事が出来ます。

時間の概念もあって、20分サイクルで日の出/日の入りがあって昼夜を繰り返します。
夜はゾンビなどの敵キャラがどこからともなく沸いてくるので危険です。
ゲームスタートしたら、日が暮れるまでの最初の10分弱で素手で木を削って作業台を作り、そこで斧やツルハシを作って、さらに木を切って木材で家を作るか、土を掘って安全な隠れ場所を作る、ということをしなければなりません。完全にサバイバルです。
1つの世界に複数人で入って協力して遊ぶこともできるので、パソコンが2台あれば、親子で一緒に楽しむこともできます。
動物(牛、豚、馬、鶏など)もいるので、捕まえてきて牧場をつくって、養殖して食料源にすることもできます。(この世界では餓死という概念もあります)
地下資源も豊富で、地下のかなり深いところまで、溶岩を避けつつツルハシで掘り進んでいくことも出来ます。
世界のどこかにいるボスキャラを倒す、という目的は一応あるのですが、とにかく自由なので、皆、自分なりに色々なプロジェクトを考えて楽しめるというのが一番のポイントです。例えば、
- コダワリの家を作る。城、タワー、地下基地などなど。
- 牧場・農場をつくって、探索の拠点にする。効率良く養殖・収穫する方法を工夫する。
- 水路を作って移動や輸送をラクにする。
- 効率良く採掘する方法を工夫する。
などなど…。
より自由に建築を楽しむためのモードもあって、空中を自由に飛び回って無限に使えるブロックで巨大構造物をつくることもできます。
他のゲームと違うところは、プレイヤーが強くならない、という点です。
レベルアップというような概念がありません。地下資源を使って、より良い武器や防具を作って、強化することはできますが、武器、防具、道具はいつか壊れるので、それらを安定的に作れるように工夫することが必要なのです。
プログラミングとの共通点
このゲーム、向き不向きがあるようで、楽しめる人と、すぐに飽きてしまう人がいます。
「どこが面白いのか」わかるでしょうか。
私は、自由さと、物作りの醍醐味を手軽に味わえるというところかと思います。
この面白味は、プログラミングの楽しみに通じるところがあるようで、当教室にもマインクラフト好きの生徒さんがよくいらっしゃいます。
それまで知らなかった人も、試してみるとハマってしまいます。
(これを書いている私もその1人です…笑)
ヒントはゲームの中には無く、全てのレシピ(何と何を組み合わせたら何が出来るのか)がホームページや攻略本で公開されていて、これを調べられることが前提のゲームになっています。
それぞれのユーザーが考えて工夫していく、モノ作りのゲームなのです。
ですから、攻略本のとおりにやってみても、あまり面白くありません。
何かを達成しても、ゲームの中で褒めてもらえたり、盛り上がるBGMや映像が見れるわけでもありません。(そもそも全てがブロック状の見た目なので、とても地味)
自分で考えて試行錯誤して何かを達成することを楽しむことが全てになっています。
プログラミングも、問題解決とモノ作りです。
プログラミングもマインクラフトも、「作りたい!」と思ったモノをはじめから順番に作っていくのではなく、たくさんの機能を考え、分解し、ひとつずつ課題を工夫して解決していきます。
つい、色々書いてしまいましたが、マインクラフトが好きなら、是非、プログラミングも試してみてくださいね。
ゲームプログラマーになるには?(前編)
今日は、ゲームプログラマーになりたい!というお子さんの為に、どのような方法があるのかについてお話したいと思います。
プログラミングの向き不向き
プログラミングの向き不向きについて何が関わってくると思いますか?
性別? 遺伝? 数学や物理の成績? 学歴?