プログラミング 美徳の不幸

Ruby, Rails, JavaScriptなどのプログラミングまとめ、解説、備忘録。

TechStuDIG 2012

DeNAの技術系インターンであるTechStuDIGに参加してきました。
一応当該インターンで得た情報をソーシャルメディア等に掲載することはやめてください的な紙にサインしたので、あまり深い話はせずに、来年以降のTechStuDIGの宣伝くらいにしたいと思います。

まず、率直に言ってやはりDeNAのインターンに参加できたこと良い経験でした。内容は、15日間でチームに分かれて、JavaScriptのOSSを開発するというもの。OSSといっても、簡単なライブラリくらいかと思ったらかなり専門性の強い(3Dゲームエンジンとか、パーティクルエディタなど)内容に加えて、そのライブラリを使用したアプリケーションも作らないといけない。これを平均1企画につき1.5人で15日間ということだから、1人月もないわけです。このスピード感に対する要求は相当なものだと思います。

で、僕はNodeJSを使ったリアルタイムアプリケーションというのを担当したんですが、いやー、まぁなかなか大変でした。技術的な大変さというのはあとにして、とりあえずサーバサイドのコーディングには自信があったんですが、それも大した実力でないと自信が一気にぶち壊されたこと、およびサーバサイドだけコード書けてもクライアント側が書けないと一人で立派なアプリケーションはできないこと。
まぁただ、これらは僕が日頃クライアント側なんて誰かにやってもらえばいいだろうということで勉強してなかったという話なので、本質的な問題ではありません。本質的に、最も衝撃を受けたのは、本当にできるプログラマーは事前にそれほど知識がなくとも、吸収力がとても早いし応用力が高いことです。
だから僕はサーバサイドのコードなら、多少言語が違ってもフレームワークが似ていれば対応できますが、できるエンジニアというのは、仮にフレームワークを作ってみろと言われても作ってしまうような、創造型のプログラミングができるのだなと感じました。
わかりやすく大学受験に例えれば、東大の二次試験を解けるのが創造型プログラマセンター試験の数学を解くのがSIer型凡人プログラマ。私は現状では露骨に後者でしょう。

で、今回優秀な学生さんを見ていていったい私とどこが違うのだろうか? と考えたところ、
1.書いてきたコードの量が違う
2.書いてきたコードの種類やパラダイムが多様
3.前提となっている計算機科学全般に対する知識が広い
4.アルゴリズムに強い

とまぁ、こういうところなのかなと感じました。まぁ1については、他のプログラマがプログラミング歴4年とか5年とかを考えると私の場合はまだ2年にも達していないので、しょうがないことです。これでも毎日それなりに書いてる気がするので、これについては時間的解消を待つしかありません。
2ですが、これは少しむずかしい。というのは、私がWebアプリのコードだけ書いてきたのに対して他の学生はCUIのゲームとかパズルとか、iPhoneアプリAndroidアプリ、Windowsアプリ、あるいは一言で言い表すのが難しい研究用ツールと、本当に多様で、これらを自由に行き来している感じがしました。難しいというのは、Webアプリは日頃書く必要性とかあるんでやってますが、他はあまり作りたいものもないし、作らなければいけない環境にもないので、なかなか自発的に習得するのが難しいということです。とはいえ、CUIのパズルくらいなら趣味で書いてひと通り完結させるとこまで持ってけるので、これからは趣味で多様なプログラムを書くことを意識したいと思います。

他には、4。Top Coderとかやってみます笑


で、最後にDeNAという会社ですが、一部上場企業とは思えない笑、柔軟さとか若い人の勢いがありました。いい会社だと思います。まぁただ、社員さんは好きなことを仕事にできているというのに満足度を感じているようなので、仕事が楽とかすぐ帰れるとか、そういうのに価値を置く人には不向きでしょう。