2012年12月29日土曜日

テイルズオブグレイセスをクリアした

なかなか時間がとれなくて遅くなりましたが、テイルズオブグレイセスFを今さらながらクリアしました。

これはヴェスペリア以来の名作でしたね。
抜刀システムはよかったですね。未来への系譜編できれいにおわってよかった。


2012年12月17日月曜日

忘年会

2012年も忘年会たくさんありますね。
今日で4つめかな。あと2つです。

今日は私の地元である宮城の友人たちと、東京で忘年会しました。
銀座でスペイン料理です。「スペイン料理 Hola! Ginza8
なんだかんだで、地元の人は東京に、たぶん20人くらいはいると思います。会ってないだけで。

今日のメンバは、私、すけさん、貴裕、えーちゃん。





モチベーションの元

C++忘年会 2012で@yohhoyさんに「アキラさんのモチベーションの元はなんですか?」と聞かれて、その場では「まぁ、勉強会とか出てると感化されますよ」と簡単に返してしまいましたが、もうちょっと整理してみます。

順を追って話しましょう。
まず、私が所属していた最初の会社では、新しいものを学ぶ体制がなかったことから、Boostを使おうとしても却下され、課の方針で「毎月何か技術を習得しよう」というのがあったのに毎月私しか発表がなかったりと、やりたいことがやれない、成長できる環境ではない、という理不尽を感じていました。

そして3年所属していた会社に別れを告げ、 @Seasons さんからお誘いを受けてエレファント・エンターテインメントという会社に入りました。最初に会ったときに「Boost使えるよ」と言われてほいほい付いていきました。
その会社はゲーム会社だったのですが、スタッフの一人ひとりが、物作りに関するモチベーションに溢れていました。 @melponn とも一緒に仕事ができて、これが開発のあるべき姿なんだなと思えました。スーツじゃなくなったのも大きいですね。

それから1年半ほどその会社で働き、「自分だけがこんなに充実した開発ができていいのだろうか。前の会社での自分のような、理不尽を抱えている優秀な技術者がたくさんいるのに」と思い、私は私と同じ境遇の人を生み出さない社会を作るための活動をしようと決意しました。@Seasonsさんが「ぼくは君たちが気持ちよく開発できるように、喜んで生け贄になるよ」と言ってマネジメントしてくれていたのも、動機の元になっていると思います。
ソフトウェア業界の、お金が入ってくる仕組みを確立したというだけで、技術をアップデートせず、今までやってこれたからこれからもやっていける、と考えるこの風習は、後世に残すべきではないと強く思っています。

私は、あとから続くプログラマのための道を整備する、そんな生き方をすることにしました。
これが私のモチベーションの元です。

そう思い立ってからは個人で勉強会を開催したり、ソフトウェア業界への問題点をブログに書いたり、他のひとのブログでやりとりしたりを繰り返してしました。やがて個人の力では限界があるとわかったので、uskzさんと会社を作りました。
勉強会のような個人でもできる活動では、個人と対話し、それに共感した個人がチームの隣の人を変え、その2人がチームを変え、会社を変え、やがて社会を変える。そんな長い道のりの最初の一歩を踏み出してくれるひとを生み出すボトムアップのアプローチをとっています。
対して会社の方は、個人が会社を変えていくのは難しいので、会社が会社を変えていくトップダウンのアプローチをとっていこうと考えています。

自分の感じた理不尽を他の人には味合わせたくない。最初の動機はそれだけです。

そして、同じ動機ではないにしても、同じ方向に社会をよくしようと考えている人が多くいることを、いろんな勉強会に参加することで知ることができました。そういった「変えようとしてる」人たちと意見を交わし、共有し、それによって自分と相手が成長しより広い視野を手に入れる。そんなことをここ数年やってきました。
なので、最初の動機は自分の理不尽からでしたが、今は他の人の動機も受け止めた上で活動を続けています。

2012年12月10日月曜日

ペアプロ会

Coderetreat in Tokyo 3rdというイベントに参加してきました。ペアプログラミングのイベントということだけ見て参加したら、実はGlobal Day of Coderetreatという世界94ヵ所で同時開催する壮大なイベントだったのでした。

この日は、6回別な人とペアプロして、Java、C#、C++、Ruby、Scalaという5言語を使いました。C++は2回やりました。
ペアプロのテーマはライフゲームで、45分間で作って、次のペアプロではコードをバッサリ捨てて最初からやり直す、ということをやってました。

参加者の中に、昔の会社の後輩がいました。朝に「アキラさん!」と話しかけられて最初誰かわかりませんでした。4年ぶりくらい?今は、主催会社のひとつであるGXP社にいるそうです。その人とはC#でペアプロしました。

あとはJavaプログラマの@AyumiHOSOZAWAさんとC++11でペアプロしました。「普段何使ってるんですか?」と聞いたらJavaと言ってたので「じゃあJavaでやりますか」と言ったら普段と違うものでやりたいというので、じゃあRubyかなと思ったら、私がRubyそんなに詳しくなくて滞りそうだったので、「やっぱりC++でいいですか」と言ってOKもらってやってました。

5回目にめるぽんとペアプロしました。片方がテストを書いて(インタフェースを決めて)、もう一方が実装を書く、無言ペアプロにチャレンジしました。この形式はそこそこ拮抗した相手じゃないと難しいのかなーと思ったので、言語はお互いがよく知ってるC++にしました。たまーに「これインタフェースが間違ってる」とか「ここバグってる」とかしゃべってしまいましたが、気になったところがあったらバッとキーボードを奪ったりしながらペアプロしてました。ここで初めて完成までたどりつけました。
「よっしゃ完成!!」と言ったらめるぽんが「ぼく、このプログラム落とせますよ!!」と言い出したので、どこがバグってるんだろうと考えて悶々としてたら「すいません、あれ正しかったです」と言ってきました。私バグとか出しませんし。

最後のペアプロは、@katzchangさんとScalaでやりました。めっちゃ楽しかった。
設計自体は、直前にやっためるぽんのとほぼ同じ、コンストラクタ以外では値を書き換えないimmutableな設計だったのですが、自分の考えにはなかった斬新な実装アイデアがいろいろ出てきておもしろかったです。発想の転換がまだまだ必要だなーということがわかったので、これでまた成長できますね。


こういう、モチベーションの塊のような場所に身を置くと、自分のモチベーションもすごい回復するので、やはりこういう場所にはちょくちょく参加するのがいいなーと思いました。


ただ、ライフゲームはもう飽きましたね。このイベントは毎回ライフゲームをやってるそうなので、そのおかげで毎回メンバは違うそうですが、まぁもう書きたくないからネタが変わったらまた行きます。

2012年12月8日土曜日

複数の言語を学ぶということ

私はプログラミング言語を20言語くらい学んできました。
その主な理由は、自分の成長のため、新たな考え方や技術を学びたい、というものです。
そしてそのほかの理由として、「自分の偏った考えを改善したい」「他言語のユーザーと対話してお互いにさらに上を目指したい」というものもあります。


私はプログラミングをC++からはじめて、数年はC++ばかりを学んでいました。そしてブログをはじめて多くの人とコメントやトラックバックでやりとりするようになり、たまに揉め事なんかも起こしました。その揉め事の原因の一つが、「考えが偏っている」でした。正しい知識を持っていないのに意固地になっている場合もありましたが、自分がやってきたことを信じたいがために、他の考え方が許容できなかった場合もありました。
そういった経緯から、いろんな言語を学び、考え方を学び、ユーザーと話したりして、徐々に偏った考え方を直していくことができたつもりです。


それと、私と同じように、自分が使ってる言語の考え方に寄ってる人が大勢いることもわかったので、ここ数年は、自分が普段使っている技術の勉強会だけではなく、全然関係ないジャンルの勉強会にも顔を出すようにしています。そういった勉強会で参加者と「自分の言語ではこうなんだよ。このあいだ学んだ言語ではこうだったよ。そしてこの勉強会で話されている言語はこうだと思うんだ」というような話をしています。そして、自分の言語のコミュニティに戻って、他言語の話をするようになりました。
これによって、お互いのコミュニティがお互いから学ぶための、いくつかの土壌が作れたと自負しています。これはもちろん私だけの力ではなく、相手のコミュニティの人たちも同じ動機を持ってくれたことが大きなところだったと思っています。
たとえば、私が主催しているBoost.勉強会では、過去に私が出席した別のジャンルの勉強会出席者や、別な言語のユーザーが何度か来てくれています。

こういったお互いを知る努力を行うことによって、互いのいいところを知り、なぜそうなってきたのかを知った上で、お互いがさらに先に進めるようになります。勉強会のみならず、Twitterもいろんな言語のユーザー同士が気づいたらフォローしあって気軽に話し合うようになっていました。Twitterや勉強会がこれほど普及する前までは、各言語のユーザーは自分たちのコミュニティが運営するメーリングリストやフォーラム、自分のブログから出てきて知らない言語のユーザーと話すことはほとんどなかったと思います。

ここからは、お互いを知ったユーザーがこれから何をしていくのか。どういった成果を出していくのか、が求められる時代だと思っています。
そのための試みのひとつが『プログラミングの魔導書』だったりするのですが、もっと他の何かも模索したいですね。

自らの動機を分析せよ

物事を始めるには動機が必要です。私/あなたがしたいことは何でしょうか。
そして、他のひとを巻き込むためには、共通の動機を設定する必要があります。

「それによって作られたものは、何らかの形で自分のためになるだろうから、各人の動機で参加してください」

この動機は、場合によってはそれで十分な場合がありますが、協力しあいながら共通のものに向かって進みたいなら不十分です。
みんなに通じる共通の動機とはなんでしょうか。それには自分の動機を深掘りして考えることが必要です。
「自分の目的が達成されたら何が起きるだろうか」を想像してみましょう。そこでは誰にどんな形で幸せが訪れているでしょうか。そして、幸せになった人たちはなぜ幸せになったのでしょうか。
「幸せになった人」は曖昧なのでこれも深堀りしてみましょう。会ったこともない誰かではなく、自分の身近にいる特定の誰かを思い浮かべてみましょう。「私がこれから作るものは彼に何をもたらすだろうか」。


自分の動機を分析することで、他者にも言える共通の動機が見えてきます。
これによって考えだされた動機は、より広く届く声となり、より多くの人を巻き込むことにつながります。


私はここ数年、常に自分に「自分は何がしたいのか」「それは何故か」「それは何故か」「それはつまりどういうことなのか」を問い続けています。
新たな技術の普及に向けて活動するにあたり、相手に届けるための言葉というのはとても重要になります。
「新たな技術は楽しい!」では、共通の感覚をもつ人や、新しいもの好きの人にしか言葉は届かないですが、たとえば「新たな技術は残業からあなたを解放します」だと仕事が悪循環して脱出策を模索している人にも届くかもしれません。
このような動機は、相手や目的によって設定し直す必要があります。個人向け、企業向け、同じ悩みを持っている人向けなどなど。自分の動機だけを主張し続けることで声が届くひとは、「自分と同じ動機を持つ人」か「その目的に個々人の動機を持つ人」のどちらか、もしくはこの2種類の人だけでしょう(そして後者は集まりにくい)。


自分の動機を分析し、他の人にも通じる動機を見出すことで、より多くの人を巻き込むことにつながります。
for (;;) { 私/あなたは何がしたいでしょうか? }