著者 北村拓也

  1. 未分類
  2. 59 view

独学でプログラミングを学び受賞40件を達成した軌跡(前編)

こんにちは、北村拓也です。

おかげさまで、「独学で身につけるためのプログラミング学習術」は多くの人に読んでもらっている。今年中に紙の本としても出版できると思う。

本書では僕自身が学んだ経験に合わせて、多数のプログラミング本、学習の研究を基にした汎用的に使える方法を書いている。

僕がプログラミングを知って学んだ軌跡については簡単にしか書いていない。

なぜなら、皆はプログラミングを学ぶ方法を知りたいのであって僕に興味があるわけではないからだ。

しかし、ブログなら良いだろう。プログラミングに出会ってから、チーム開発の大事さを知ったプログラムenpit参加までを書くことにする。

プログラミングがすごい人は子供の頃からとか、中学生から始めたと聞くことが多い。
実際、スポーツと同じで早く始めた方が有利なことは確かだろう。
僕の場合は、大学生になってからだ。
遅い部類に入ると思う。
だから、大学に入ってから始めてもここまで出来たぞ、というストーリーは、プログラミングを始めようか迷っている誰かの背中を押すのではないか、と思う。

ちなみに、80才でプログラミングを始めた人も居る。

「プログラミング初挑戦」だった若宮正子さん(82)が、ひな祭りをテーマにしたiPhoneアプリ「hinadan」を開発したのは81歳の時。プログラミング言語「Swift」をゼロから学んで作った。2017年2月に配信されたこのアプリは、7万ダウンロードを突破。同年12月には英語版もリリースされた。

ついに国連で講演へ!82歳プログラマーが語る「100年時代の思考法」——「人生は風見鶏でいい」

僕はどうやってプログラミングを学んだか

僕は大学の工学部に入って、プログラミングの存在を知った。

衝撃、早く学ばなければいけないという焦燥感。

プログラミングの概念を知って、世界のすべてがプログラミングで動いていることを知った。世界の見え方が一変した瞬間だった。

僕はゲーム中毒者だったけれど、作る側のことなんて考えたこともなかった。

関連→ゲーム中毒者の末路

プログラミングは、まるで魔法だ。

綺麗なグラフィック、ド派手なアクションの裏が、実は文字で出来ていたなんて。

ワクワクしていた思いとは対照的に、大学の講義は退屈だった。

することといったらよくわからない計算式を計算するだけ。

講義もプログラミング言語の文法をひたすら勉強。

工学部卒の同期や後輩で、プログラミングが好きな人は体感で一割も居ない。

僕も大学一年生の頃、このままではプログラミングを嫌いになるなと思った。

だから、目標を探した。

見つけたのがU-22プログラミングコンテストだ。

入賞作品を見て驚いた。

自分より年下の子達が、信じられないほど凄い作品を作っていたからだ。

僕はワクワクして、22歳までにここに載り、著名なタイトルと並ぶような多くの人に使ってもらえる作品を作ることを目標にした。

結果を先にいうと、独学でプログラミングを会得し、40作品以上を作って、22歳のときにU-22プログラミングコンテストでCSAJ会長賞を受賞することが出来た。

U-22プログラミングコンテストのWEBページに、先輩としてコメントが載っている。

アプリの開発会社も立ち上げて、代表アプリは全国ランキングで4位を獲得。

その時の1位はドラゴンクエスト、2位はFINAL FANTASYだ。

プログラミングがあれば、個人でも大企業と同じステージに立つことができる。

プログラミングは、自己実現のための最強の武器で、誰もが使えるようになる時代が来る。

では、独学期間に僕はどのようにプログラミングを学んだのか。

ゲームを作ることにした

大学の計算式の実装などは全く楽しくなかったので、ゲームを作ることにした。

最初にオリジナルのゲームとして作ったのは、ノベル形式の脱出ゲームだ。

小説を書くことが趣味だったのと、漫画で頭の良いキャラクターが好きだった(嘘喰い)から、ストーリーを楽しみながら頭を使える脱出ゲームにした。

関連→ただの大学生が出版社を作って、大失敗して潰した話

JavaScriptのenchant.jsというライブラリを使って作った。

enchant.js スマートフォンゲーム開発講座の本を読みながら、ストーリーを作ったり、イラストも自分で描いたりして、なんとか作成。

手作り感満載の、自分で描いたゲームオーバー画像。

作ったらすぐに市場に出した

目標は多くの人に遊んでもらうことだったから、すぐにGooglePlay(iPhoneで言うAppStore)に出した。

手作り感満載のゲームだったにもかかわらず、なんと合計で8500ダウンロード。

プログラム上のミス(バグ)が沢山あったが、温かいレビューが多かった。
皆、個人開発者には優しい。これが会社になった途端に罵詈雑言の嵐になる。
会社は期待値があがるんだろうな。

自分のアイデアを形にして、それをすぐ他の人と共有できる、プログラミングの凄さを体感した。

どんどん作ろうと思う一方で、一個作るのにとても時間がかかることが課題だった。

そこで出会ったのが、ゲームエンジンUnityだ。

ゲーム作りを民主化する、ゲームエンジンUnityの本をすべて読む

当時(2013年)は、日本国内でUnityはそれほど知られていなかった。

しかし、一冊Unityの本を読んで、これは凄すぎると感じた。

JavaScriptだと、キャラクターを一体表示するために、座標だったりサイズだったり、表示するためのプログラムだったりを書かないといけない。

しかしながら、Unityだとその部分はプログラミングせずに作れる。

実際プログラミングは楽しいが、楽しいのは新しいアルゴリズムを思いついて書くところだったり、ゲームのロジックを作ったりするところなので、キャラクター表示とかは書かないでいいなら書きたくない。

なので、これからはUnityだと思い、国内の販売されているUnity本を全て読んだ。

ネット上にもそれほど情報が無かったので、あまり得意ではなかった英語の本にも手を出して、ひたすらUnityの情報を集めた。

Unityで作品を作って、市場に出すの繰り返し

そして、ひたすら自分のアイデアをUnityで形にし、市場に出すを繰り返した。

大学生の間に40個以上の作品をUnityで作った。

大半は、わけがわからない作品で殆どダウンロードされなかったが、一部紹介。
関連→作品集

ToDoリストを管理するアプリ。
すごろくゲーム形式になっていて、TODOをこなすとサイコロを振れてストーリーを進めるという内容。
キャラクターと会話できたら面白いのではと思い、人工無能(チャットボット)機能も実装。

IntelのPCSDKを使って音声認識を実装し、ゲーム内の画面にWeb画面を貼付けて、
キャラクターに命令して検索するアプリを作成。(動画では入力音声を合成音声に置き換えしている。)
検索サービスがどれも無機的過ぎるので、検索エンジンの中に人が居たら面白いんじゃないかというアイデア。
検索の言葉などに反応してキャラクターがコメントしたりアニメーションしたり。
「料理を検索して」->「料理を検索したよ。私料理苦手なんだよね〜」のような。

探偵の助手となって、その町で暮らす人々から情報を得て、犯人を見つけるアドベンチャーゲーム。
毎日村人が1人死んでいき、全滅したら負け。人狼ゲームと似ている。
読書が好きすぎたので、ゲームの中で面白い本を紹介できたらどうだろうと思って作った作品。
楽天から書籍情報をダウンロードして、リアルタイムで更新。1ヶ月かけた大作。

Story
探偵ユニとその助手は、ある村に滞在していた。
平和な村に思えたが、ある日その村で殺人事件が起きる。
徐々に殺されていく村人達。遂に村長が殺され、
探偵ユニの元に、犯人を見つけて欲しいという依頼が舞い込む。
ユニは犯人逮捕に向けて村へと繰り出すが、一人また一人と村人が殺されていく。

キャラクターと会話すると、おすすめの本を選んで紹介してくれるアプリ。
推薦のアルゴリズムを自作した。結構良いかなーと思ったが、殆どダウンロードされなかった。市場は厳しい。

紹介し続けるとキリがないのでこの辺にしておく。
リリースし続けた気付きとして、「課題」を解決する作品で、その課題を「自分以外の人達」も持っている時にダウンロード数が伸びることがわかった。
将棋アプリは、その法則に則って作成した。

ひたすらプロのプログラムを読む

作品を作りながら、ひたすらプロの人が書いたプログラムを読むことを日課にしていた。

その頃は、大学に行かずに一日中プログラミングをしていた。

寝る前やご飯を食べる時は、印刷したプロのプログラムをひたすら読む生活。

今考えると、頭おかしい。

おかげで大学の単位は落としまくり。

プロのプログラムの中でも、取り入れられそうな部分はどんどん使っていった。

Unityにはアセットストアという仕組みがあって、プロのプログラムを大量にダウンロードできる。今だとGithubに沢山ある。

ライブラリと呼ばれる便利なプログラム群自体を自分が使いやすいように改造したりもした。

アルゴリズム力を鍛えるために、競技プログラミングの過去問を解く

また、競技プログラミングと呼ばれるプログラミング競技の過去問をひたすら解くこともしていた。

僕はいつもAIZU ONLINE JUDGEというサイトで解いていた。

アルゴリズムを知ると、より効率的なプログラムが書けるようになってくる。

AIZU ONLINE JUDGEの場合、課題の正解者のプログラムも読めるので、分からなかった課題の解答は印刷して壁に貼って解いていた。

これは僕が大学受験の勉強をした時に編み出した勉強法で、とても便利。

部屋の壁中に覚えたい内容をまとめた紙を貼って、夜寝る前に覚えているかどうか歩きながらテストする。

完全に覚えた紙は剥がして、次の紙を貼る。

競技プログラミングに関して当時自分が読んでいた、おすすめの本を紹介。

やっぱりある程度体系化されている本で学ぶことが効率的だと思う。

最強最速アルゴリズマー養成講座 プログラミングコンテストTopCoder攻略ガイド

プログラミングコンテストチャレンジブック [第2版] ~問題解決のアルゴリズム活用力とコーディングテクニックを鍛える~

競技プログラミングは面白かったが、極めようとは思わなかった。

課題を与えられて解く形式より、自分で作りたいものを作る方が性に合っていた。

Googleによるアプリ強制非公開でセキュリティの大事さを知る

作品を作り続けていた最中、Googleから連絡が来る。

開発に使っているライブラリ(PhoneGap、今はCordovaという名前に変わった)に、脆弱性(セキュリティ上の問題)が判明したことで、アプリが公開停止になったのだ。

ドキッとした。

作品作りにおいて、セキュリティを意識したことがなかったからだ。

将棋アプリは3万5千人ものユーザーが居たから、何かあったら大変だと思い、あわててセキュリティの勉強を始めたことを覚えている。

大学院でもセキュリティの授業を取った。

しかし、セキュリティの勉強はとても難しかった。(その時の体験から、今は楽しくセキュリティを学べるゲームCyshipを開発中。)

一人の勉強に限界を感じ、IPA主催のセキュリティ・ミニキャンプ に参加したり、セキュリティ勉強会に参加したりした。最終的には、CTFと呼ばれるセキュリティコンテストに挑戦するオンラインのチームに入って学んだ。

高度IT人材育成プログラム enpitに参加して、チーム開発を学ぶ

自分の技術力に自信を持ち始めていた頃、チームで一年間かけて作品を作るプログラムがあると知り、応募した。それが高度IT人材育成プログラムenpitだ。

詳しくは別記事で書くが、はじめてチーム開発とアジャイル開発を体験し、僕らのチームは全部門で優秀賞1位をとった。

チーム開発の大変さを知ったと同時に、1人では到底作れない作品が出来たことで、チームの威力を知った。これをきっかけに、チームで短期間で作品を作るハッカソンというイベントに多数参加することになる。

関連→【プログラム体験談】高度IT人材育成 enpit BizApp/BizSysD分野【優秀賞第一位獲得】

前編はここまで。

もし、今回の記事が少しでもあなたのお役に立てたのであれば、
下記のリンクをクリックしてランキングへのご協力をお願いします。

にほんブログ村
成功哲学ランキング

未分類の最近記事

  1. 最高の生き方:書評

  2. 圧倒的利他心と慈悲で生きようと思える。書評:近未来のブッダ

  3. 不調の原因は口呼吸だった。書評:べろトレ

  4. セキュリティイノベーター育成SecHack365 Returns 発表資料公開

  5. プログラミングで作りたい物別、学習マップ

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP