private-works
デザイナーのわたしがプログラミングの基礎をだいたい3日で覚えた1つの方法
Posted by Miki Ishijima on .フルスタックエンジニア!フルスタックエンジニア!
最近なんでもかんでも出来る人が求められていますね。Webデザイナーの人でも簡単なプログラムに触れる機会は以前より格段に増えています。
わたしもプログラムを覚えたいと思い、勉強していました。しかしそれは、禁煙と同じようなもので触ってはやめて、触ってはやめて、飽きてしまうの繰り返しでした。
身につかない原因
プログラムの勉強会や、本、ブログなどを読んでもなぜ身につかないのか。難しいというのは理由ではありません。
むしろ、基礎の「き」くらいであればコーディングと同じくらい簡単です。
わたしが一番の原因だと考えるのは作りたいものがないというコトです。
子供向けプログラム学習アプリケーション(言語?)のScratchというのがあります。
繰り返し処理や条件分岐が日本語で、レゴブロックのように組み合わせればプログラムの思考を学習できるとても良いものです。
わたしも触ってみたのですが、書いている途中は楽しめてもその後が続きませんでした。なぜなら「作りたいものがない」からです。
デジタル時計を作ってみよう! fizzbuzzを書いてみよう!
と演習では良く行われますが、正直そういったものを作れたとしても、その後が続かないのです。
そこでMinecraft
Minecraftはスウェーデンで開発されたサンドボックス型のPCゲームです。大学の授業でも教材として取り上げられたりしています。
[スウェーデンの大学が教育プログラムに『Minecraft』を採用、環境と都市計画の授業に | Game*Spark - 国内・海外ゲーム情報サイト](http://www.gamespark.jp/article/2013/01/10/38107.html) |
ストーリーはなく、建築を楽しんだり、旅をしたりしてのんびり過ごすこともできます。
最初はのんびりやっているのですが、少し慣れてくると途端に忙しくなってきます。 モンスターに対抗するための装備、食料、そして美しい建築のための資材。いろいろ必要です。
マルチプレイも可能なのでサーバー上で仲間とプレイしているときは仲間のために生活環境を安定させるべくトロッコでの駅開通や、養鶏場などの大量生産施設が欲しくなってくるでしょう。
そのとき、木材を自分で切り倒していたり、畑の収穫、ステーキを焼いたりを手作業でしていてはとても追いつかないのです。
そうすると、どんどん「自動化」をしたくなってきます。
レッドストーンを使い出すと論理回路(ANDとかOR)などを組み合わせてクロック回路やパルサー回路が必要になってきます。
Minecraft Japan Wiki - テクニック/レッドストーン回路
もちろん大変なことばかりですが、仲間のためにファミチキを提供したり、自分で作ったファミリーマートで販売したり、入店音などを作ろうと思えばあんまり苦になりません。
Luaを覚えてみる
レッドストーンで自動化していくと、ほんの小さな自動化でも回路が大きくなってしまいます。 小さな建物におしゃれに自動化を取り入れたい場合は難しくなってくるのです。
そうすると工業化をしたくなり、工業化をやりだすと耳にするのが「Computer Craft」です。ゲーム内にプログラムで操作できるロボット登場させるプラグイン(Mod)というものです。
ロボットを使えば、畑での収穫して調理してもらう過程を自動化できるようになるのです。
プログラムはLuaという言語で行います。 非常にシンプルな言語で、カッコやセミコロンで悩まないで良いのがうれしいです。
シンプル。
すぐに動かせる!
ゲーム内に使いそうなものはあらかじめメソッドとして用意されています。
前に進む、ブロックを壊す、アイテムを比較するなどこれを使うだけなのですぐに動かせます。
前に進むのを10回繰り返すのには for文とそのメソッドを使います。
for i = 1, 10 do
turtle.forward()
end
これだけです。
前に進んでから、帰ってくる。というだけならスグに書けそうな気がしませんか?
難しそうなものは問題を細きれにしてみる
Minecraft内でプログラムをしてみて一番苦労したのが、整地プログラムです。
大きな建物を立てるときに、でこぼこの大地を平にならす必要があります。これも自動化しようと試みたのですが今の自分には非常に難問でした。
何から書いていいか分からないとき、まずは書き出してみる。
このひとつひとつをもっと細かく見ていけば良いのです。 どうしても、いまの実力では無理なものもあるのでゆっくり考えてチョイスしていきます。
例えば「上にあるブロックを整地するには?」
に対しては
- 自身の真上にブロックがあるか調べる
- あれば掘る
- 上がる
- もう一度1から3まで行う
というフローにしてみました。
上にあるブロックを調べるのはメソッドとして用意されているのでそれを使えば良く、2,3に関しても同様です。
あとはこれをwhileで回せばOK。ミスがある場合、無限ループになってしまう可能性があるので回数を制限するか、繰り返すときに少し停止させるようにする必要があります。
こういう考えは言語による差はとくに無くプログラムの考え方として他の言語でも行えるものだと思います。あってますか?
やってみて分かったプログラミング習得の秘訣
まだ条件分岐と繰り返し文、そしてデバッグのためのログ出力を習得したくらいです。 けれども、プログラムを覚えるポイントを見つけました。
それは、考え方です。
どの言語をやるかなどはたいした問題ではなく(初心者には、ですよ?)、プログラムが何ができるのか、用意されたメソッドなどをどう使えば目的が達成できるのか。を考えることがすごく重要でした。
それさえ分かれば異る言語のコードをざっくりと読むことができたり書式をカンニングしながらプログラムが書けるようになります。
※Sublime Text2にはComputer Craft用のシンタックスなどが用意されていますw
Minecraftは学習に向いているステキゲーム!
ゲームが好きで、プログラムをおぼえたいと思っている人は、ぜひやってみましょう!
今年こそRubyを始めたいあなたに!ももんが流・最強のRuby学習法 - かなりすごいブログ
PythonにMinecraft…。いま教育現場に拡がる「子どものプログラミング」 : ライフハッカー[日本版]
[Raspberry Piに移植されたMinecraftで子どもが遊びながらプログラミングを体験 | TechCrunch Japan](http://jp.techcrunch.com/2012/11/28/20121127minecraft-raspberry-pi-edition-to-help-kids-learn-to-code-while-they-build/) |
ComputeCraftの魅力について語ってみる - Minecraftとタートルと僕
Computer Craftの作者さんが作った他のModでは量子物理学が勉強できるらしいですよ! 今度はこれをいれて遊んでみたいですw
マインクラフトで量子物理学の概念を体験できるGoogleとNASA製のMOD「qCraft」 - GIGAZINE
さあ、プログラミングを覚えましょう!
実はMinecraftにハマりすぎて実況動画を見るだけじゃ飽きたらず、自分でも投稿してみるということを始めてみました。エンコードなどがヘタすぎてアレですが、今後もプログラムの解説をやってみるので見てやってくださいw
追記:調べてみたら「ComputerCraftEdu」というワールドを作って、生徒にプログラムに触れてもらう取り組みも行われているようです。
Google Groupに「Minecraft Teachers」というグループがあるのにもビックリ。
一緒に覚えよう
わたしのやっている会社、ザ・マーズナレッジのデザインスクールではデザインやブランディングについて教えていますが、エンジニアリングもちょこっと教えています。
興味のある方はフォームにちょちょいとメールアドレスを送ると、無料でスキルヒアリングしてくれますよ。