この記事について
プログラミング入門について、私自身の経験から感じていることをまとめていきたいと思います。
縁があって過去に子供たちへのプログラミング教育のボランティアをしていたり、知人からもしばしばプログラミングを始めるにはどうしたらいいですか?という質問を受けることがあります。また、私自身学校や仕事の研修で学んだわけではなくほぼ独学であることから、このテーマについてはいろいろ考えることがあり、この記事では私の視点で独学でのプログラミングの入門ルートをまとめてみようと思います。
とりあえず、プログラミング的な体験をしたいという人に
子供向けですが、code.orgの出しているHour of Codeの教材をお勧めします。ブロックを積み上げる形式で各種問題をプログラムを書いて解いて行きます。
ブロックプログラミングではありますが、作ったプログラムをJavaScriptで再現することができます。最近では、いきなりJavaScriptで記載する上級コースもあるようで、とりあえずやってみたいという方におすすめです。
いろいろコンテンツはありますが、個人的なおすすめは以下の3つです。
スターウォーズコース
スターウォーズのキャラクターBB-8をプログラムを書いて操作して各種ステージをクリアしていくゲームです。アルゴリズムを組み立てるという練習に良いと思います。
マインクラフトコース
上記のマインクラフト版です、操作方法がスターウォーズコースより複雑で中のステージも多めです。スターウォーズコースが簡単と思った方におすすめです。
フラッピーバードコース
これまで紹介した2つとは異なり、フラッピーバードのゲームを作っていくコースです。アルゴリズムを組むという要素は少なめですが、各種イベントごとの操作を定義するなどは実務のゲームやアプリ作りの過程にとても近いのでおすすめです。
本格的に学びたい人に、入門に向けての2つのルート
本格的に時間をかけて体系的に学びたい!となると「Webサイト作り」と「ゲーム作り」どちらかから始めると良いのかなと思います。
Webサイト作成からはじめる
実は、私はこのルートからでした。プログラミングはできなかったものの、たまたま人よりパソコンの扱いに慣れていたからという理由で、当時所属していた部活のホームページ作成担当になり、独学でHTML、CSSから学んでいくうちに次第に、クライアントサイドのJavaScript、サーバサイドのPHP、果てにはSSHでサーバにログインして、Linuxの設定やShellScriptを組んでバッチやデーモンを作ったりとなっていました。
自分個人の勉強方法は、とりあえず実装したいものが自力で実装できず、壁にぶつかったときに本やWebサイトを探すという原始的なやり方でした。ただ、今では無料で学べるプログラミング学習サイトがたくさんあります。なのでどうすれば自分がやりたいことができるかから探すことは上級者やマニアックなことをもとめないかぎり大丈夫なんじゃないかなと思います。
サイトとしては、ドットインストールやprogateがありますが、個人的にはインフラの知識も学べる老舗のドットインストールの方がおすすめです。インフラはつまらない分野と思う方も多いですが、体系的にとなったら避けて通れないと思います。なお、どちらも実際にWEBサイトを本格入門してみたい人向けですのでとりあえず教養レベルでいい!という方向けに、私自身も教養としてのWebページ作成入門という記事も書いています。よろしければこちらもご覧ください。
ゲーム作りから始める
ブラウザゲームを!となったら、先述のWebサイト作りのほうがおすすめですが、Webサイト作る場合はまずHTMLからという壁があるので、いきなりプログラムっぽいことをしたいとなったらscratchかなと思います。ブロックプログラミングなので始めやすいですし、過去にボランティアで子供達教えた時も、みんなオリジナルのゲームをつくれるようになっていました。
今では、Yahoo! きっずが学習サイトを公開しているのでこちらを頼りに独学してみるといいかもしれません。
scratch自体はブロックプログラミングで、もっと発展的なものをとなると、文字プログラミングに入らざるおえないのですが、導入や趣味としてやるならもってこいと思います。作品がネット公開されていますが、評価の高いものは本物顔負けの高クオリティのものも多いので公開された作品をプレイするだけで楽しいかもしれません。
通学・通信教育は?
会社の研修はありますが、実は通学・通信教育の経験がないです。実務でということを考えると入会してみるのも良いかもしれません。もっとも、最近は怪しいところもあるので入るなら大手か比較的安いところをお勧めします。
おわりに、エンジニア以外のプログラミングの需要
自己紹介で書きましたが、今は本業はエンジニアから離れて法務におります。そのため直接サーバのメンテナンスをしたり、運営システムのコードを改修したりはなくなりました。しかしながら、日々の業務でこうすればもっと改善するのにと思い、ブラウザの拡張作ったり、Officeのマクロ書いたりということはいまでも結構あります。また、業務効率化でRPAという声もときどきでており、RPAをやる場合は確実にアルゴリズム構築が必要になります。その点で、Word、Excel、英語といった基本リテラシーとしてプログラミングが加わるのはすでに時間の問題かもしれません。
Photo by: Matthew Henry