プログラミング初心者に向けたいろいろ

本記事は[マイネット Advent Calender](http://qiita.com/advent-calendar/2015/mynet)10日目の記事です。
今回はプログラマー暦6ヶ月の@hashiがお送りさせていただきます。
#はじめに
簡単にですが自己紹介がてらこの記事を内容でも・・・
私ですが前職は遊技機やゲームの映像製作の進行管理とか簡単なディレクションなんかをやっておりました。
その後、ソーシャルゲームのイラスト製作の指示書を作成したり仕様書作成をやった後に
弊社にプログラマーとして入社いたしました。
プログラマーになろうとしたきっかけとかは、また別の機会にでもしようと思います。

入社後はプログラムの研修を何ヶ月かやった後、チーム配属されて実業務に従事していくのですが・・・
やはり研修で学んだ知識だけでは難しいと感じることが多々あるわけです。というか感じない日がないくらいです。

そんな中で少しでも早く仕事に慣れていくためにも自分で勉強して行こうと思ったときに
本を読むのも、もちろん大事なんですが
オンラインで「学習⇒実際にコードを打って挙動を確認する」形で学ぶことができるプログラミング学習サービスというものも非常に便利なものが多いと感じたので、今回はその辺の紹介とプログラマー初心者の方に送る業務をやる上でこんな心持ちでやると捗るよみたいなのを何番煎じかはわかりませんが書きたいと思います。

#オンライン学習サービス
以下にあげるものは全て登録が必要ですが、facebookやtwitter、githubのアカウントがあれば
登録できるので案外簡単に登録できてしまいます。

##[Progate](http://prog-8.com/)
学生が起業して作成したサービスです。学べる言語はHTML&CSS、javascript、Ruby、PHPと少ないですが
学生の方が作成されたせいか、非常に学習の流れが丁寧になっています。
まずは選択した学習内容に関する解説スライドを見ます。スライドが見終わるとその学習内容のテスト問題を回答する画面が出てきます。
今回学習した部分の処理がすべて抜けている状態になっているので処理を記述することで回答します。
記述するとリアルタイムで実行結果が表示されるので正しく出力されているかを確認しながら進めることができます。
クリアすると経験値を獲得できレベルアップすると祝福してくれ、SNSに進捗を投稿できたりするのでモチベーションは維持しやすいと思いました。

##[CODEPREP](http://codeprep.jp/ja)
学ぶことができる言語自体はProgateと同じですが、言語を使用したアプリケーションを作成する応用編の数が豊富です。
学習自体は穴あき状態で出てくるコードに正解をひたすら埋めていくことで進めていくものです。
わからなければヒントの欄があるので、そこを見ながら正解を考えることができます。
穴埋め形式なので結構簡単な感じもありますが、
上のProgateが難しいと感じたらまずはコチラを試してみるのも有りです。

##[paiza](http://paiza.jp/)
転職サイトが運営しているサービスです。やっていると転職を勧められますが無視しても大丈夫です。
最近では「プログラミングで彼女をつくる」といった独身男性には嬉しいような悲しいようなサービスを公開していました。
ここではスキルチェックと称した様々な課題が用意されています。
その課題も超初級から超上級の5段階に分かれており自身がどれくらい成長できたのか試すことができます。
言語はPHP,Java,C,C++,C#,Ruby,Python,Perl,JavaScriptに対応しています。
回答を提出すると複数回のテストケースを経て最終的な得点が算出され自身の点数が平均と比べてどうかなどを確認できます。
ただ、実行確認などはできないので自身の環境で確認できる準備を整えておく必要はあります。

##[CodeIQ](https://codeiq.jp/)
ここもpaiza同様に与えられた課題を解いていくタイプのものになります。
ただ対応している言語は紹介した中で一番多いと思います。
その課題もソースコードを書くだけでなく選択式で回答するものや言語を擬人化したマンガ「はしれ!コード学園」とのコラボ課題があったりとバラエティに富んでます。
正直、私自身このサイトの課題は1つもクリアできていないので全体的に難易度高いかもしれません・・・・
ここも実行確認などはできないので確認できる環境の準備を整えておく必要はあります。

##[ドットインストール](http://dotinstall.com/)
これはコードを書いたりはせずに、十数回に分けられた3分程度の解説付き動画を見るだけのものになります。
見るだけのものにはなりますが様々なことをやっています。有料会員になるとAndroidアプリやiOSアプリ、具体的なアプリケーション作成の解説も見ることができるのですが初心者は無料で見れる範囲で十分だと思います。
javascriptやPHPの他にもNode.jsやUnity、GASなども解説してくれているので業務で使っている言語以外もやってみたいなと思ったときに便利かもしれないです。

#業務をやる上でやると捗る心持ち
##フローチャートを書く
別の業界ではよく書いているかもしれませんが、弊社が携わっているゲーム業界ではあまりフローチャートを書くということをしていない印象があります。プログラミングに関わる仕事を何年もやってこられた方にとっては必要ないかもしれませんが、私のような初心者にとっては頭の中で考えている処理の流れを、一旦フローチャートとしてアウトプットするのは結構重要なことかなと思っています。フローチャートに起こすことで改めて考えを見直すことができ、意外と抜けていた処理やそもそも処理として破綻していたりといった問題点を事前に見つけ出すことができたりしますよ。

##他の人が見たときに理解できるか
ゲームタイトルに携わる上でずっと同じタイトルに携わるといったことは、ほぼ無いと思っています。
なので自分が抜けた後、新しい人が自分の書いたコードをみて理解できるだろうか、と考えながらコードを書くことは自分のためにも携わっているタイトルのためにもなるのかなと思います。そう考えながら作業することで「このほうが無駄な処理減らせそう」とか「計算量を減らせそう」といった一石二鳥な良いこともおきたりするのではないかと。
ただ、無駄な処理を無くしすぎて逆に見づらくならないように注意しないとなのですが・・・

##翌日にもう一回見てみる
今日コード書いてた自分は明日になったら他人になっていると思ったほうがいいです。正直、今日書いたコードが明日見たら「？」となることも多々ありました。なので一度、実装したら翌日とか1週間後とかに見直すことをオススメします。見直してよくわからなかったら、他の人に見せても良くわからないコードということになると思います。多分。

#終わりに
ペーペーのプログラマーのくせに、これまで長々と偉そうなこと書いてスミマセンでした。
偉そうなこと書いていましたが、いくら勉強したって自分の力だけではどうにもならないようなことも出てくると思います。
そんなときには、遠慮なく先輩方に聞くのが一番だと思います。
悩んで自分で解決法を探すのも大事ですがやっぱり先輩方はすごいです。
先輩方に聞くのは最後の手段的な考えとして、とりあえず自分でできることを全力でやるみたいなスタンスで
これからの日々の業務をエンジョイできればと思ってます。ありがとうございました。