先日,Unityの勉強会を開催しました.
参加者6人全員が,2時間でUnityの基礎的な操作をできるようになり,軽いスクリプトを書いて1つゲームを完成していました.
さて,勉強会を開催したり,ブログでプログラミング系のことを発信していると,こんな相談を頻繁に受けます
どうやってプログラミング勉強してますか?
効率的な勉強法はあるでしょうか?
誇張抜きで月に10回ほど相談を受けます.
ということで,「こういう流れで勉強すると良いんじゃない?」ということを実体験に基づいて説明したいと思います
プログラミング学習順序
まずはじめに,こんな図を1つ作成してみました.
詳しくは後ほど説明しますが,順序って結構大切です
プログラミングの楽しさを知らなければ理解できなかった時に挫折しますし,基礎的な知識がなければ専門書を読んだ時に挫折ためです.
それでは,順番に説明していきます.
① 楽しさを知る
まずは,「プログラミングできたらこんなものも自分で作れるようになるのか!?」という驚きを得たり,プログラミングの楽しさを知るところからです.
正直,モチベーションって一番大切で,楽しくないことはやりたくないんです
では,どうやって楽しさを知るのかということです.
まずゲーム感覚で学べるプログラミング学習ソフトを使うというのがオススメです.
ProgateやMozerなど,今はゲーム感覚でプログラミングを学べるのも多いので触ってみると良いと思います.楽しすぎて一日があっという間に過ぎているはず.
ほかにはコードの写経でもいいので,動くものを作ってみることがかなり有効です.
先日僕の勉強会に参加してくれた方も,与えられたコードを使い,1からゲームを作ってみてかなりモチベーションが上がっていました.
小さな成功体験を早い段階で得ることで,学習意欲はぐぐっと上がります.
成功体験を得たり,ゲーム感覚で勉強することで苦手意識をなくし,モチベーションを高めるのがこのフェーズです
学びが楽しいと思えれば,自然に学び続け,スキルも自然についてくるはず.
② 共通事項を学ぶ
さて,楽しくなってくると,どんどん知識をつけようとみなさん分厚い本を買ってくるのですが,結構な人が挫折します.
僕も中学生の頃,はじめてのプログラミングでJavaの分厚い本に手を出して,数ページ読んで挫折しました
原因は,基礎的な知識がないことなんですよね.
プログラマの人がこんなことを言っているのを聞いたことはないでしょうか?
1回何か言語を触っておくと,他の言語の習得が楽
使ったことなくても,何となくみたら分かるとこがある
これは事実で,プログラミング言語が違ったとしても,その根底にある考え方が共通だったり,似ている記法が使われることがとても多いのです.
そして,多くの人ははじめてプログラミングをする時,考え方が理解できなかったり,文法が理解できなかったり,英単語の意味がわからないなどの複数の要因から,「プログラミングって難しい…」と考えてしまうんですね.
私がもプログラミング入門時に読んだのですが,こちらの本がとてもおすすめです.
この本は,Sunabaという教育用言語を使って,テトリスを作っています.
おすすめした理由は複数あるのですが,プログラマの脳内思考まで解説している珍しい本ということです.
プログラミングに慣れた人には当たり前ゆえに省略されてしまう部分がしっかり繰り返し書かれていたり,わざとよくないコードを書かせた後にきれいなコードを見せて「なぜこの方法が有効なのか」を説明しており,非常に納得の行く箇所が多くあります.
この言語は教育用に作られた日本語の言語で,必要最低限の機能しか持っていないため,初心者にとってもとっつきやすいのが利点です.
「プログラマとしての最初の100時間を過ごすための言語」と著者も言っている通り,高機能なことはできませんが,「プログラミングの考え方・基礎知識を身につける」という意味では最高だと思います.
③ 特定の知識をつける
順序2が終われば,基礎の基礎の知識はついているはず.
その為,Webプログラミングやるにしても,ゲームプログラミングにしても,iPhoneアプリ開発にしても,基礎的な考えが分かるようになっています.
分岐処理や繰り返し処理,プログラムを開発する時に考えるべきことなどがある程度わかっているため,挫折のリスクが大幅に減ります
ここでは,みなさんがつけたい知識を習得していきます.
例えば,Web系を学ぶならRuby,ゲームプログラミングを学ぶならUnityなど,自分がやりたいことに適したスキルを付けていきます.
私の場合,TechAcademyなどのプログラミングスクールに通って知識をつけました.
プログラミング学習時,初心者はプログラムのエラーを直すのにひどい時だと丸一日かかってしまうことも多いです.
プログラミングスクールで先生に聞けば,たった1分で解決することも少なくありません.
プログラミングスクールでは,独学だと半年とかかかるところを1ヶ月でやるようなカリキュラムになっています.
そのため,多少大変かつ高額な面もありますが,さっさと初心者の域を抜けて,仕事としてプログラミングを使える状態になればスクール代くらいは軽く稼げるので,ちょっとはじめに投資してみるのも悪くないと思います.
また,順序2を経たことにより,プログラミングに関する基礎知識がついているので,書籍を読み進めていくような勉強スタイルでも充分実力を付けることが出来ます
様々なプログラミング言語がありますので,どの書籍がオススメということに関しては省きますが,読み進めていて楽しそうというのを大切にしてください.
スキルが付いてきたら楽しさよりも得られる知識の質にシフトしていくことが大事ですが,いきなり小難しい本を選ぶと100%挫折します.
私がRubyを学んだ時にはじめて使ったこの本はめっちゃ楽しかったです.
④ 軽いアウトプット
さて,知識のインプットが終わったら,それをアウトプットしてみるフェーズに入ります.
プログラマのアウトプットと言われると,「使った知識を使ってものを作る」ということが頭に浮かぶかもしれません
ただ,別にそれだけじゃないんですよね.
「ブログに得た知識をまとめてみる」「勉強会を開催して他の人に教えてみる」などなど無数にあります.
自分で作品を作るよりも圧倒的にハードルが低く,効果的に知識を整理できます
こちら,見たこと有る方も多いと思いますが,有名な「ラーニングピラミッド」と呼ばれるものです.
「人に教える」ということがいかに良い学習方法かというのは科学的にも証明されているわけです.
難しく感じ流人も多いと思いますが,,別に2時間とかの勉強会を開催する必要はないのです.
5分程度で技術的トークをする「ライトニングトーク」というイベントもエンジニア界隈では毎日のように開催されているので,気軽にアウトプットしていく機会を増やしていくと良いと思います.
⑤ 手を動かしてものを作る
さて,ここまで来たらあとは手を動かして,実践的なスキルを付けていくのみです.
得たことをアウトプットすることで,基礎的なスキルは自分の中に蓄えられてきているはず.
勉強したことをアウトプットする場所として基本情報技術者試験などの資格取得に走る人がいますが,同じ時間を掛けるなら手を動かして何かを作ったほうが費用体効果が良いです
僕も応用情報技術者試験を持っていますが,あの勉強をする前に使える知識をつけておけばよかったなと思う最近です.
学びたてのスキルを使えるスキルにするべく,ここからは自分のオリジナルアプリを作って公開したり,既存のサービスを完全模倣したサービスを作ってみましょう.
学んだスキルを使って,簡単なサービスを作ってみたり,Instagram,Twitterなどの既存サービスのクローンをつくってみましょう.
大手プログラミングスクールのTechAcademyのiPhoneアプリコースでも,Instagramのクローンアプリを作るようなカリキュラムになっているのですが,この「模倣する」っていうのは結構学べることが多いです.
ここで大切なのが,しょぼくてもいいから公開するということ.
完璧を目指してなかなか公開せず,途中でやめてしまうより,期限を決めて取り組んである程度のクオリティのものでも積極的に外に出していくことが大事です.
他にも.出来る範囲で仕事を受注することなんかがお金も稼げてスキルも付きます.
クラウドワークス
みたいなところで簡単な仕事を受注してみると良いと思います.
様々なレベル,様々な種類の仕事があるので,ちょっと探してみると良いと思います.
まとめ
いろいろ長々と言ってきましたが,まとめると以下のよう感じです.
「多くのアウトプットのフェーズが多い」と思った方もいるかもしれませんが,アウトプットもインプットのうちです.
物作ったり,人に説明する時にいろいろなことを調べるはずです,しかも高いレベルで.
基礎を大事にしつつ,たくさんアウトプットしていくこの勉強法,大変かもしれませんが確実にスキルは上がります.