1. 坂本さんは中学・高校・大学とどのような形でプログラミングを学習し、実際に自分でWebサービスやiPhoneアプリを形にすることができるようになっていったのでしょうか?
パソコン自体は好きで、小学校3,4年生のときから触っていました。
中学2年のときにはじめてJavaに触ることになります。IDE(統合開発環境。Javaで言えばEclipse)の存在を知らずに、最初はメモ帳とコマンドプロンプトでプログラムを書いていました。すべてベタ打ちで書いていたため、こんなに長いクラス名をプログラマーの人は暗記しているのかと思うと、自分はとてもプログラマーになんてなれないと当時の自分は思っていました(笑)IDEの存在を当時知っていたら、クラス名の補完機能がありますので、挫折することはなかったかと思います。
そのため一時的にプログラミングからは離れることになるのですが、パソコン自体が好きということもあって、工業高校に進学します。高校2年生の授業でC言語をやることがわかっていたので、予習として少し勉強しておこうと思い、高校1年生のときにC言語を勉強することに決め、再度プログラミングをするようになりました。そのときはやはりただ本を読んで勉強するのではなくて、簡単なアプリケーションですがCUIの電卓アプリを作っていました。同時にネットワークやインフラ周りにも興味が芽生え、UNIXのコマンドを叩いたり、Vine Linuxなどの国産OSを古いPCにインストールして遊んでいたのもちょうどこの頃の話です。
C言語は、Javaほどクラス名が長くないこともあって、メモ帳でべた書きする形でなんとか書くことができました。そんなとき、高校2年生のときに転機が訪れます。高校2年生のアルバイトで、IT企業でせっかくだからアルバイトをしてみようということで、最初はテスト作業だったり、雑用が多かったのですが、実際に働く機会を得ました。このたまたま働くことになった会社がPythonを使っていて、自分でもこの後はメインでPythonを使うようになります。
アルバイトは夏休みだけやっていたのですが、そのアルバイトが終わった後は自分でみんなのPython 第3版 という本を買って、独学で勉強していきました。高校3年生になると、工業高校だったため、課題研究があり、その課題として、Pythonを使ってタイピングゲームとSkypeのボットを作りました。アルバイトをしていなかったら、作るのは正直いって難しかったと思います。この課題研究の作品が2つとも第27回山梨県工業系高校プログラムコンテストで優勝しました。
大学に入ってからは、Pythonの勉強を続けていたこともあり、Djangoというフレームワークを使っていくつかWebアプリを開発しました。Djangoはシリコンバレーのスタートアップでも多く使われている実績のあるフレームワークで、先日Facebookに買収されたInstagramもDjangoを使っていました。
自分はいつも作るものを決めて、そのために必要なものを勉強していくため、大学入学後は、PythonでGAE上で動くWebアプリを作ることに決めて、GAEに触れて、Pythonについても理解を深めていきました。画像の制作については、他の方にお願いする形でしたが、マークアップとサーバサイドのコーディングは自分でこなし、実際にサービスを公開しました。
GAEを選んだ理由としては、Pythonが動かせることに加え、無料でコードを展開できる環境だったためです。最近ではAWSも無料使用枠があるので、このあたりを使って自分で簡単なWebサービスを作ってみるのはいい勉強になるのではないでしょうか?
そうこうしているうちに、iPhoneアプリを作ってみたいとゆーすけべーさんのブログの「月10万稼ぐにはiPhoneアプリ開発が一番速かった」という記事をみて思うようになり、ここからiPhoneアプリを作りはじめました。
フォークロア というiPhoneアプリを公開しています。iPhoneアプリ開発に関しては「iPhoneアプリ開発初心者の普通の大学生が、1ヶ月ちょっとでiPhoneアプリをリリースするまでにやった事」というエントリーで書いていますのでもしこれからiPhoneアプリを開発していきたいという学生の方の参考になればと思います。
2. 独学で学び、プログラミングしていたときと違い、有給インターンを通じてのプログラミングで学んだことについて教えて頂けますか?
個人でWebサービスを開発してきましたが、あまりユーザーが集まらなかったり、なかなか収益につながらなかったことを元々感じていました。そんな中実際に企業に入って有給インターンをする中で、Webサービスやアプリの企画の大切さを身にしみて感じました。実際にみんなに使ってもらえるようなWebサービスを作る上で、企業に入って有給インターンをするなかで様々な手法を学ぶことができました。
たとえば、開発しているWebサービスやアプリをユーザーテストしてもらったり、機能を実装する前にペーパープロトタイピングを行ったりは自分一人で独学で開発をしているときには全く知りませんでした。
また企業の中でコードレビューを受けることができるような機会もあり、自分以外の人にコード見てもらい、指摘をしてもらえる機会は非常にありがたかったと思います。今までまったく使ったことのなかった継続的なソフトウェアプロジェクトのビルドとテストを行うためのJenkinsを使ったり、監視ツールとしてNagiosを使ってみたり、負荷検証においてユーザー数を想定してJmeterを使ってみたりとテストや運用といったところに関しても学ばせて頂くことができました。
それ以外にも開発手法(アジャイル開発など)を学ぶ機会も大きかったです。個人では使う機会があまりなかった、GitやMercurialなども積極的に使うようになりました。
これまで自分個人で作ったサイトとは異なり、法人で運営しているサイトは非常に多くのアクセスが集まっていたために、トラフィック対策としてRedisやmemchachedを使ってキャッシュさせる仕組みの作り方についても学んだのは初めてでした。ぜひみなさんにも有給インターンに挑戦してみてはいかがでしょうか?
3.坂本さんが個人で開発される際にどのようなWebサービスを作るか、またどのようなアプリを作るかのアイデアはどのようにして着想を得ているのでしょうか?
Webサービスは、自分が不便だと思ったところから着想を得て作ったものが多いです。他のケースだと例えば、この人誰ったーに関してはFacebookの認証において友達の顔写真が出てきて、この人の名前は何ですか?という形で認証されていたところから着想を得て作っています。
4.最後にエンジニアインターンをみている学生の皆様に一言お願い致します
アイデアを思いつく人はたくさんいるけど、実現できるのは一握りという話をきいたことがあります。この言葉には非常に共感できます。アイデアを思いつくだけの人ではなく、実現できるという意味で、プログラミングは非常に有益なツールだと思います。無料でコードを展開できる環境も数多くあるので、ぜひ自分のアイデアをコードを通じて形にしてみてはいかがでしょうか?