算譜王におれはなる!!!!

偏りはあると思うけど情報技術全般についてマイペースに書くよ。

30歳になりました!

f:id:ngsw_taro:20180704112944j:plain

本日、30歳の誕生日を迎えました 🎉

やはり、ひとつの区切り感はありますね。 せっかくなので、僕のこれまでのプログラマー人生について話します。

完全にチラ裏の自分語りです。 ドラマチックな展開もなければ、知見も教訓もありません。 ただ、昔のこと、プログラミングを始めた頃のことを思い出して整理してみたら、自分が初心に返るための便利アイテムになるじゃないかなと思い、 記憶があるうちに書いておきます。

簡単にまとめると

  • コンピュータとその面白さを知った
  • Javaは最高のおもちゃだった
  • 勉強会やコミュニティに参加するようになった
  • マイナーなプログラミング言語と出会った
  • 毎日楽しくお仕事してる

これまでの人生を振り返って、一言で表すと「運がよかった」ですね。 夢中になれるもの、仕事としてやっていきたいものが見つかったのは、とてもありがたいことですが、運とか偶然と言うほかありません。 そして、これも運命の巡り合わせとして、いろんな人と出会いました。 それが自分の人生にものすごくプラスになっていて、感謝しかありません。

では本編を。以降、常体で。

幼少期〜中学時代: プログラミングと出会う

子供のころは、これと言って得意なものがあったわけじゃないけど、ものづくりに夢中だった。 お絵かきとか工作が好きな子供だった。教育テレビのわくわくさんが大好きだった。 小学生になると漫画を描いたり、RPGとかゲームの設定を考えてノートに書いたりして遊んでいた。

我が家には、当時としては珍しくコンピュータがあった。 しかし幼い僕はまったく興味を持っていなかった。 コンピュータは、たまにお絵かきソフトで遊ぶ程度のものだった。

コンピュータとか、パソコンとか、インターネットが便利なものだということが、小学生になると徐々にわかっていった。 ポケモンの裏技とかを、父はインターネットで調べてくれた。

中学校ではコンピュータの授業があった。とは言っても「技術・家庭」のひとつの小さな単元だ。 これがまともにPCを触る初めての体験だった。 教科書を見るとコンピュータの5台装置がどうのと書いてあって難解な印象があった。

だいたい、この頃から自宅でのPC・インターネット利用が解禁された。 親から許しが出たのだ。 両手の人差し指を使ってキーボードを叩き、メールで友達と連絡をとったり、ちょっとした調べ物をしたり、ゲームなどを楽しんだ。

授業とは関係なく、個人的な趣味でホームページをつくっているという同級生がいた。 僕にとっては衝撃的だった。 インターネットにつなげると見れる情報の詰まった画面、そういうものは専門知識を持った大人たちがつくるものだと思い込んでいたからだ。 それを普通の中学生にも作れてしまうというのが衝撃的だった。

中学生の僕もものづくりが好きだった。 そして、当然このタイミングでホームページづくりに興味が湧いた。 しかし、どう始めればいいのか見当もつかなかった。

ある晩、父にホームページのつくり方を聞いた。 父はPCを起動して「メモ帳」を開き、英字やら記号やらを書いていった。 そして「.html」と拡張子をつけてファイルを保存し、ファイルをダブルクリックで開くとインターネットエクスプローラーが起動し、そこには「ホームページ」が表示されていた。 メモ帳で書いた英字や記号のことを「HTML」というものだと教わった。 その簡単なルールも教えてもらった。 こうして、僕はホームページつくりに夢中になっていった。

ネットサーフィンしていると、テキストや画像が動いたり、ちょっとした仕掛けがあるサイトをよく見かけた。 ページ上に雪が降ったり、星がマウスポインタを追っかけてきたり、そういうやつだ。 これを実現するにはJavaScriptというものを学ぶ必要があることを知った。 僕はJavaScriptを修得すべく図書館に行って入門書を借りた。 しかし、借りた入門書はJavaScriptではなくJavaだった。 思えば、この勘違いは人生の分岐点だったかもしれない。

わからないなりに入門書を読み進めた。 最初の難関は環境構築だった。 コンパイラをインストールしてパスを通すのに、結構苦労した。 if-elseやfor, whileは楽しく学べた。 条件によるループやジャンプが、楽譜の進行に似ていて面白いと思った。

高校時代: クソゲー量産マシーン

Javaを学んでしまったので、JavaScriptでホームページをリッチにするのは諦めた。 代わりに、Javaでホームページを面白くしたいと思った。 当時はまだ、いろんなところで使われていたJavaアプレットという、Webページに組み込んで動作できるJavaアプリケーションのひとつの形態があった。 アルカノイドみたいなゲームや、オリジナルのしょうもないゲームをつくって、Javaアプレットとして公開していた。

Javaアプレットをつくっても、それで遊べるのはPCだけだったので、学校で友達にプレイしてもらうにはハードルが高かった。 なので、違う方法を模索したが、答えは近くにあった。 携帯電話だ。 当時、ガラケー最盛期で、誰もが持っており、授業中に着メロが鳴り出すと気まずくなったりしたものだった。

僕の利用キャリアはVodafoneで、その機種はJavaのランタイムが搭載されていた。 そうして、僕はVodafoneの携帯電話で動くJavaアプリケーションの開発を始めた。 おそらくだが、PC上でアプリを開発して、USBか何かで携帯電話をつないでインストール&デバッグなんてことは、できなかったと記憶している(もしくは、単に調査不足)。 アプリを開発して、エミュレータではなく自分の携帯電話の上で動かすために、アプリストア(コンテンツアグリゲータと呼ばれていた)に開発者登録を行った。

それからというもの、携帯電話ゲームをつくりまくって公開しまくった。 アプリストアにある週間ランキングで1位を獲ったこともあった。 アプリ雑誌で紹介されたり、作者インタビューとかも受けたりした。

ゲームをつくって、みんなに遊んでもらうという、開発者としてはすごく幸せな体験をしていた一方、その実装はひどかった。 オブジェクト指向以前の話で、データの構造化なんてしないし、メソッドさえも活用せず、巨大な神クラスが一つだけある、ひどい有様だった。

public class MyGameCanvas extends Canvas {
    // 敵の座標
    int[] enemyXs = new int[100];  // ←java.util.Vectorが使えるの知らなかった
    int[] enemyYs = new int[100];
    // 敵のライフポイント
    int[] enemyLifes = new int[100];  // ←こんな感じで敵に関する情報が散らばっていた

    protected void paint(Graphics g) {
        // ここが1000行以上とか
    }
}

柔軟な設計とか可読性とか、全然気にしていなかった。 コードをひたすら書いて、時には無知から来る車輪の再発明なんかもして、とにかく動くものをつくるのが楽しかった。 そんな当時の僕の愛読書は、秀和システムの「最新Java逆引き大全 550の極意」だ。 まるでゲームの攻略本のようだった。 この本を読んで、Swingによるデスクトップアプリケーションの開発にも挑戦した。

自分専用のPCが欲しくて、アルバイトで貯めた3万円で、中古のノートPCを買った。 書籍の付録のLinuxのインストールCDを使って、Linuxを入れて遊んでいた。

大学時代: Androidを始めて勉強会デビュー

高校生のころ、唯一得意な科目が物理だった。 興味もあったし、そういう学科に進学しようと思っていた時期もあったが、情報工学を学んだ将来の方が、高校生の僕にはイメージしやすかったので、情報系へ進んだ。 とはいえ、具体的な将来の夢はなかった。 なんとなくシステムエンジニアになるのかなーと思っていた。

大学時代を振り返ると、もっと真剣に授業に臨めばよかったと思うけど、当時の僕にとって授業は退屈なものが多かった。 だから授業の外で勉強を頑張った。

大学2年の春に基本情報技術者試験に、同じ年の秋にソフトウェア開発技術者試験に合格した。 資格なんて飾りみたいなものだけど、受験勉強で得た知識は、悪くないものだと思う。

だいたい同じ頃、Head First デザインパターンという本を読み、オブジェクト指向プログラミングに開眼した。 以来、拡張性・柔軟性、保守性・可読性に気を配ったコーディングが、僕のプログラマー人生のテーマのひとつとなっている。

大学生になっても、細々とケータイアプリをつくり続けていた。 ゲームのスコアをユーザ同士で競って遊べるように、ランキング機能をこのときに初めてつくった。 サーバサイドはPHPで実装した。 しかし、ケータイアプリでHTTP通信するには、キャリアに公式クリエータとして申請し、承認されなければならなかった。 アプリ上でシームレスにランキング登録するUXを諦めて、代わりに、アプリが生成するURLをコピペして、ブラウザで開くことでランキングに登録することができる仕組みをつくった。

大学3年生のとき、ゼミ的な科目を履修し、研究室を出入りするようになった。 そのときの課題が卒論に続くテーマとなったのだが、それはフレームワークだった。 教授からRuby on RailsSpring frameworkを勧められて、Rubyは肌に合わない感じがして、Springを選んだ。 そのとき初めてDependency Injectionというものを知った。

また、同じ年(2009年、21歳)に国内初となるAndroid搭載のスマートフォン HT-03A が発売した。 ガラケーJavaアプリを開発していた僕にとって、Androidは最高のおもちゃだった。 AndroidJavaでアプリケーションを書くことができるし、(ちょっと違うけど)Java SEが載っているのがすごかった。

そのときからAndroidファンであり、Android開発者だ。 実際にAndroidマーケットの開発者として登録したのは、もう少し後だが、簡単なゲームをつくって公開もした。 画面のタッチイベントを取れたり、各種センサーを使えるのが楽しすぎた。

大学では、あまりプログラミングに熱心な友達はできず、学外でそういう仲間を見つけようと思った。 日本Androidの会というコミュニティがあって、その支部である町田支部(僕の地元)の勉強会に参加したのが、初めての勉強会だ。 他にも横浜支部とか、Androidデ部とか、Twitter API勉強会とかに参加した。 ABCというAndroidのカンファレンスにも参加した。 そこで出会った人たちとは、今も仲良くさせてもらっている。

勉強会では、いろんな発表を聞いて新しい発見があるし、実際に開発を生業としているプロたちと話せるし、とても勉強になった。 そして、ある欲がじわじわと湧いてきた。 発表者として勉強会に参加したい、と。

初めての発表は、ワイヤレスジャパンで日本Androidの会がブース出展してて、そこでのライトニングトークだったと思う。 人前で話すのが本当に苦手で、ステージに立つと頭が真っ白。忘れる、セリフも時間も。 これはいかん、数をこなして慣れるしかない、と思った。

メインでやっていたアルバイトの他に、プログラマーとしてアルバイトを始めた。 ベンチャーのゲーム会社で、少しだけ働いた。 そこで身につけたAndroidOpenGLする知識を、ABCで発表することになった(どういう経緯だったかは覚えていない)。

いろいろあって留年して、大学5年生になり、卒論を終えて暇になったとき、運命の出会いがあった。 Kotlinというプログラミング言語との出会いだ。 2012年1月頃、ネットニュースでその存在を知り、面白さに魅了された。

当時はまだコンパイラが提供されてなく、実行する環境がなかった。 ドキュメントを頼りにKotlinについて調べ、ブログに書いたり、勉強会で発表したりした。 そんなマイナーな言語を学んでも...という冷ややかな反応は少なからずあった。

就職活動は、可もなく不可もなく、普通にスーツ来て会社を回った。 SIerでのシステムエンジニアを志望していた。 その中で、新卒で入った会社を選んだ理由は、僕の「技術に関心を持ち、熱心に取り組んでいる姿勢」を評価してもらったからだ。 そういうこともあって、仕事が楽しみだった。

新卒SIer時代

まぁ普通の大企業。 立派な内定式、入社式を経て3ヶ月間の新人研修。 新人研修は楽しかった。 同期も多く、まるで学校だった。 今でも飲みに行くような友達ができた。

ただ、覚悟はしていたが、やはり内容はJava入門みたいなやつが多かった。 講師が間違えることもあった。

新人研修のカリキュラムに、Androidアプリ開発の実習が2日間 組み込まれていたのを知り、 担当講師に連絡を取り、僕に講師をやらせてください!と申し出た(今思うと若さってスゴイなぁと思いつつも、ほめてやりたくなるw)。 結局、講師をやらせてもらえなかったが、代わりに10分くらい時間をもらって発表することができた。

これは数少ない自慢話なのだが、 研修の修了式で、最優秀受講生として表彰され、社内報に掲載された。

研修が終わり、配属部署でOJTで働くことになったが、なんやかんやあって転職したくなった。 やはり、人生初の転職は勇気が必要だった。 あれこれ悩んだ。 いろんな人に支えられ、転職活動は成功した。

その間もKotlinエバンジェリストとしての活動は継続していて、初めて雑誌に寄稿したりもした。

エムスリー時代

実務でのプログラミング経験はほぼ皆無な状態でエムスリーに入社した。 僕が入社してまもなく、Androidアプリの新規開発のプロジェクトが発足し、主担当として参加できた。 つまり、僕にとっては初陣。 初めて仕事でAndroidアプリを開発するのがすごくエキサイティングだった。

以降、このアプリを軸に、エムスリーではいろんな仕事をした。 詳細は退職エントリを参照してほしい。

taro.hatenablog.jp

エムスリーにいた4年半でいろんなことが起こった。 Kotlinが正式リリースされ、しかもAndroidの公式言語となった。 もちろん、その間 ずっとエバンジェリスト業は続けていた。

相変わらず勉強会でKotlinの良さを発表を継続していた。 もう本当に呆れるくらい。 Kotlinなんか流行らないんじゃないかと思ったこともあった。

しかし、大きな盛り上がりか何度かあった。 その最初のきっかけは、@kiriminさんのブログかもしれない。

kirimin.hatenablog.com

そして、DroidKaigiの誕生。 ありがたいことに、2015年の第1回の開催から今年まで、毎回 登壇者として参加させてもらっている。 まさにKotlinをアピールする絶好の機会だった。

SoftwareDesignで短期連載をやらせてもらったり、単著執筆の機会も与えられた。 Kotlinが普及すると、夢のひとつだった「Kotlinを仕事で使う」が現実になった。

そして、それまでとは変わり、Kotlinが一人歩きするようになる。 つまり、僕の関わらないところで勉強会が開かれたり、ということ。 Kotlinファンは、確実に増えていった。

Ubieに入社して現在

エムスリー元同僚の久保からの誘いで、彼が共同代表を務めるUbie(ユビー)という会社への転職を決めた。

taro.hatenablog.jp

毎日が充実していて、すごく楽しい。 休日は休日でエンジョイするが、月曜を本当に楽しみにしているくらいだ。

Kotlinエバンジェリストとしての活動も継続している。 昨年のKotlinブームは落ち着いて、もはや定番な言語となった感はあるが、現在も執筆や講演の依頼はあるし、意欲的に取り組んでいる。 今年の8/25にはKotlin Fest 2018なる1day カンファレンスを開催する。

kotlin.connpass.com

運営を手伝ってくれる仲間も増えて、これからもKotlinは盛り上がり続けるだろう。

ということで、今日僕は30歳になった。 ものづくりが好きで、偶然にもプログラミングと出会い、おっちょこちょいにもJavaの入門書を読み始めた少年だったが、 ひたすらコードを書き、いろんな人と出会い、機会が与えられたおかげで今の僕がある。 本当、すべてのものに感謝。 次の10年はどうなることやら。

そういえば、昨日 結婚しました。