2013/01/02

あけましておめでとうございます

いやー2012年が終わってしまいましたねー。2013年もよろしくお願いします。

本来であれば例年通り新年は実家のある北海道帯広市で迎える予定だったんですが、乗る予定の飛行機が機体故障で2時間遅れになり、しかも天候調査の結果欠航になるというオチがついてあえなく帰省断念となりました。というかまぁたぶん別の機体を回そうとすると他のダイヤまで乱れるから欠航にした(飛行機に付着した氷を落としたりする作業が必要なので)っていう感じだとおもいますけどね…。実際同時刻に飛んでるJALの便は条件付き運航ながらちゃんと到着しているし。

そんなわけで年越しの瞬間は一人で鎌倉にいました。


ポツーン

ま、そんな話はさておき、先月ついに30歳になってしまったので今年のポリシーは「30歳になったしそろそろ本気出す」ってことで行こうと思っております。何に対して本気出すのかはこれから考えますけど、本気出していきたいですね!(抽象的)

さて、2012年を技術的な側面で振り返ってみるとすごいいろんな事がありました。

Objective-Cを使うようになった

iPhone向けのソフトウェアを開発するなら必須というまではいかないけどほぼ避けて通れないのがObjective-C。2月に転職してとりあえず数年前からiPhone Developer Programに年貢を納めててうろ覚え状態のまま放置してたObjective-Cに本腰を入れ始めました。

最初は[object method]スタイルの関数呼び出しが意味不明すぎてホントC++に帰りたいと思っていました。でも、Objective-Cはマクロ言語チックにプリコンパイルの段階でC言語に展開されてobjc_msgSend(obj, sel, args...)にマッピングされてるんだよっていう内部実装の正体が分かった瞬間にすべてを把握してすらすら書けるようになりました。仕組みを知るって大事だなぁ。

Javascriptを使うようになった

まぁ別に2012年にJavascript使い始めたってわけじゃないですが、サーバサイドJavascriptとしてnode.jsに触れたのが2012年でした。まぁなんというか、Objective-Cの直後に触ったのがJSでよかった。昔からJSでfunctionを変数に代入するとコールグラフが脳内で意味不明になるのでそれがすごく嫌い(=つまり非同期とかイベントドリブンなJSが嫌い)だったんですが、よく考えたらWin32APIとかGTKとかSWTとかいろんなツールキットでこの手のイベントドリブンプログラミングやってるじゃん。

そんなわけでただの食わず嫌いでしたーってことに自分で気付いたのでそれを克服したらそれなりに書けるようになりました。そもそもなんでnode.jsやねんっていうところもあるんですが、それはWebSocketを使う必要があったからで、当時は特になんも思わずにWebSocketを使ったサーバ側の実装やってましたが、やっといてよかったなーと思ったりしました。

Perl5を使うようになった

Perlといえば! CGI!

という20世紀のPerl観をずっと持ち続けていた(てかいろいろモダンになってたのは知ってたけど、1998年当時にちょろっとPerlの本を買ったらPerl4メインの本で文法も意味わかんないしいろいろとトラウマを抱えることになった…C/C++を学びはじめる2年前の話)ぼくはPerlを避け続けて生きてきたんですが、日本のPerl界のなんかであるたいぷちゃんを頼って転職したぼくにそれが許され続けるわけもなかった。

ということで今もPerlでサーバ書いて仕事しております。最低限の言語仕様と豊富なモジュールといういかにも初学者には取っつきづらい言語というイメージ通り、ホントこの言語演算子多すぎて覚えられるわけねーだろ、ユーザの作ったモジュール多すぎて覚えられるわけねーだろと思っていたんですが、さすがに3ヶ月も延々とPerlばっかり書いてればなんとかなるものです。まさにObjective-C/Cocoaと同じパターン。

しかも隣で一緒に仕事してるのが日本のPerl界のなんかであるたいぷちゃんなので、彼の使う黒魔術に頭を悩ませているうちにその魔術をちゃんと使えばこんな便利なこともできるのかーみたいな感じでモダンなPerlというのがやっと分かってきた今日この頃です。なお、たいぷちゃんが日本のPerl界のなんなのかはぼくもよくわかっておりません。

C#を使うようになった

さて、そんなわけで2012年の後半はPerlの習熟に余念が無かった私なのですが、とある日プロジェクト上の大決断が必要な事態になり、「これ以上HTML5とUnityのハイブリッドモデルで作り続けたら絶対に間に合わないのでプロジェクト解散イベントが発生する」ということでじゃあ全員Unityやりましょうという大決断が下りました。

とはいってもぼくはサーバ側の人間なのでぼーっと聞いてたんですが、そもそもぼくの目から見ると大決断しても間に合わない気配だったので、じゃあC++とかJavaには造詣が深かったぼくがいきなりUnityでC#で通信部分を書きましょう、サーバ書いてるのぼくだし通信部分とデータモデルは全部責任持ちましょうと言わざるを得ない雰囲気になったのでそんな感じでC#もはじめました。

おかげさまで「C#なんてJavaと同じだろー」とタカをくくっていたぼくはJavaに比べてやたら型に厳しいC#でかなり苦労しましたが、なんとかプログラムを書くことはできました。

ちなみにC#ってC++よりも型の制限がきついんですよね。C++はテンプレートを使ってダックタイピングを実現出来るので、実はLL言語ばりに柔軟性があり、しかも超速い(テンプレートをコンパイル時にパラメタライズして実体化しているので呼び出しオーバーヘッドがない)ので大好きなんですが、その点C#は実行時に動的にパラメタライズしてるので、コンパイル時には静的にダックタイピングを解決できないんですね。これがホントつらかった。ちなみにC#のジェネリックとC++のテンプレートの違いについてはMSDNに解説があるのでそれを見てみるとよいかと思います。

おっと、C#の悪口みたいになってしまいましたが、たしかにC++よりは柔軟性がないわーっていうのは確かなので仕方ない。でもそれって.NET FrameworkというManagedなワールドでコードを動かすためにC#に課せられた制限なんで、別に言語として優劣があるということを主張したかったわけではありません。Microsoft的にはJavaみたいにあとからジェネリクス入れたのでコンパイル時には型チェックされるけど実行時はノーチェックみたいな言語に比べればいい実装だろ?って思っているのかもしれませんしね。

さーて2013年は?

とりあえず2011年まではしばらくずっとOSプラットフォームの上で動くネイティブアプリばっかり書いてましたが、2012年の仕事でWebサービスのサーバ側の実装もなかなか面白いなーということがわかったので、2013年はその辺バランスよく手を出していけたらなーと思っております。

やはりこう、あと2年くらいはスマートフォンが主戦場になると思いますので、ネイティブアプリを作れる力っていうのは落とさないようにしていきたいですが、それにしたってネイティブアプリだけではネットワーク機能(Wifi/LTE/3G)が搭載されたスマートフォンの力を半分しか引き出せないので、サーバを活用してユーザが面白いと思えるような仕組みを作っていくことを狙って行きたいですねーと思った2012年でした。

うされもん @acidlemonについて

|'-')/ acidlemonです。鎌倉市在住で、鎌倉で働く普通のITエンジニアです。

30年弱住んだ北海道を離れ、鎌倉でまったりぽわぽわしています。

外部サイト情報

  • twitter
  • github
  • facebook
  • instagram
  • work on kayac