from __future__ import katryo

カリフォルニア州マウンテンビュー在住のソフトウェアエンジニアがいろいろ書きます。

コンピュテーションをアンダースタンディングした

アンダースタンディング・コンピュテーションを読了した。本文中のコードを書き写し、本文と見比べながらじっくり進めて、年末から一ヶ月をかけてようやく終わらせられた。

この本、相当によい本なので、ぜひ読んでほしい。

電子書籍もあります

本書は、Rubyコンピュータサイエンスを学ぶ本だ。

どうしてRuby

なぜRubyか? というと、たぶん現在もっとも人口に膾炙した言語だからだろう。Ruby人口とLisp人口、どちらが多いかと問われたら、Rubyに軍配を上げざるを得ない。Schemeのほうが直接的だけど、わざわざコンピュータサイエンスのために、苦労してまで学ぶべきではない。

Rubyの美しいところは、ノイズが少ない点だ。セミコロンも、変数の前に妙な記号も(たいていの場合は)つけない。これがPerlだったら大変だったろうな、と思いながら、僕は -> を繰り返しタイプしていた。

PythonRuby同様に人気だけど、ラムダを記述するときにRubyより面倒な書き方をせねばならない。その点、RubyはMatz Lispと呼ばれるだけあって、ぽいぽい気軽にラムダが書けて気軽だ。

計算というものを抽象化していく過程で、リストや配列、連想配列といったデータ構造とは別れを告げねばならない。このとき、シンプルな構造体をシンプルなコードのまま表現できるという特徴は、このうえない美点になる。たとえ言語仕様で規定された専用のリテラルを使えなくても、Rubyで作られた構造体はとてもきれいに書ける。

そういうわけで、Rubyが選ばれたのだと僕は思う。

読み進め方

本書は、学部で学ぶような計算機科学の基礎を、Rubyのコードで表現しながら理解してゆくスタイルをとっている。

つまり、実装することで、理解しやすい形に切り分けているのだ。

大学でオートマトンチューリングマシンの講義を受けたとしても、すぐに理解はできない。処理をひとつずつ追っていって、詰まったところは繰り返し考えて、ようやくひとつの節を進められる。

実装で概念を掴んでいくやりかたは、科学的なアイディアをすぐには飲み込めない僕みたいな普通の人間にとって相当に効率がいい。説明を読むだけではわからない論理展開も、コードになれば体感しやすい。

この本を手に取ったら、Rubyのコードを実際に書きながら、じっくり進めていってほしい。思った以上にあっさり最後まで読み終えられるはずだ。

おすすめ読者層

これからコンピュータサイエンスの講義を受ける、学部一・二年生くらいの大学生に、特に本書を薦めたい。

実際のところ、コンピュータサイエンスとプログラミングの間には断絶がある。コードを書くことはコンピュータサイエンスではない。科学の一端が言語にあるにせよ、それは結果であって、プログラミングのためにコンピュータサイエンスがあるわけではない。

大学でコンピュータサイエンスの授業が始まると、その違いに戸惑ってしまって、学習が嫌になるかもしれない。そうなるまえに、本書に触れて、断絶をつなぐ練習をしてほしい。

コンピュータサイエンスを学ぶ道のひとつに、プログラミングがあると僕は思っている。実用的な言語で最初の数歩を踏み出しておくことで、その先に進みやすくなると思う。

あ、Lispをdisってるわけじゃないです、はい。

ルートダブル -Before Crime * After Days- Xtend edition のレビューと感想

ルートダブル -Before Crime * After Days- Xtend edition のPSVita版をクリアした。

正直に言うとおすすめ。Ever17が好きな人はプレイすべき。

しかし、だめなところもかなりあって、コレは傑作だー! と言い切れない歯がゆさもある。

でもノベルゲーム好きならやっといて損はないよ。

http://www.yetigame.jp/w/

面白いところ

このゲームの物語は一直線には進まない。時系列が組み変わりながら、視点を交代しつつ、事件の側面と背景を複数の位置から語ってゆく。事件そのものや人間関係の謎がどんどん積み上げられてゆきながらも、前半まではほとんど解明されない。ルートA、Bをクリアすれば、事件そのものの全体像がようやくわかってくるのだが、その裏にある秘密までは到達しきれないのだ。

後半のCルートで状況が一変する。

筋が通った答えが解き明かされ、それまでの思い込みを反転し、謎だったものが一気に繋がってゆく。これが面白い。

さらにつけ加えると、数字に象徴的な意味を持たせる演出、現実の理論に架空の設定を入れ込んでくる攻め口などは中澤工のゲームおなじみのもので、プレイしたことがある人ならちょっと楽しくなるはずだ。自分も「あっこれEver17で見たやつや……」と思った。

だめなところ

長い。

ルートBが特に長い。緊張感のないキャラクターのセリフを眺めながらぽちぽちボタンを押す作業は結構つらぽよだった。たとえばFate/stay night に比べたら物量的には短いけれど、ルートダブルの日常シーンはほんとプレイ時間が長く感じる。

なんで長く感じるかというと、キャラクターが好きになれないのが一番の原因かなーと思う。

主人公の夏彦はルルーシュみたいなポーズでドヤるのがなんだかなーだし、渡瀬とかいうおっさんは「俺は男なんだ」とかめんどい発言するし、ましろとかサリュとか悠里とかとってつけたような性格だし。

問題は、キャラクターが役割に沿った安易な言動を選んでいることにあると思う。「ここで正気を失うことになってるんで、気が狂ったようなセリフを言います」と、筋の決まった演劇のように、ストーリーの都合にあわせてキャラクターが動いている。だから不自然に感じるし、キャラクターを好きになれない。

そうそう、悠里がメインヒロインのはずなんだけど、一番なじめない存在だった。こういう儚いキャラ、好きじゃないです。もっとこう、予想外の活躍してほしいです。

まとめ

欠点もあるけど面白いのはたしかなので、Ever17が好きならプレイしよう!

http://www.yetigame.jp/w/

PS3PSVitaダウンロード販売専用)、Xbox360版があるよ。

スノーボード体験

一月と二月の頭に、都合二回、会社の同僚とスノーボードに行ってきた。

スノーボードに挑戦するのは初めてだったわけだけど、よくあんな不安定な遊びを楽しめたなと振り返って思う。

10974522_833331203400247_1677825360691680851_o

ゲレンデで、いかにも上手そうな人があっさり転ぶのを何度も目にしてきた。スノボはスキーに比べると明らかに転びやすいスポーツで、転倒に対する意識というか価値観を変えないと楽しめない。

楽しくはあったけど、スキーのほうがよかったかなー転ばなくても進めるしなー、と後悔せざるを得なかった。

あと、滑った翌日は筋肉痛に苦しんだ。足じゃなくて、肩と背中と腹筋が痛くなった。どうしてそうなるかというと、起き上がるのに上半身の筋肉を使ったからだ。五十回くらい転んだから、全身をかなり鍛えられた。

10498461_833331306733570_2485997482673953514_o

ちなみに、男だけで行ってきた。

夕食のあとに酒とお菓子を買い込んで宴会をしたのだけど、夜が深まるにつれノリがどんどん男子校になってきていた。具体的な内容は書けないのだが、あの場に集った面々は中学生並みの知能指数になっていた。

社会人とはなんだったのか。

サイコパス劇場版を観にいった。

なお鹿矛囲桐斗の事件とはまったく関係のないエピソードだった。二期とはなんだったのか。

続編がいくらでも作れるシステムになってたので、次のTVシリーズは月村了衛さんとかがシリーズ構成をすればいいんじゃないですかね……。

年末年始で読んだ本まとめ

年末年始で読み終えた本の感想を端的に書く。☆は5点満点での評価。

読んだ本

のうりん

☆☆☆☆


本気で笑えた。

最初から最後までパロディ尽くしだった。自分はだいぶわかるけど、これ、元ネタ知らない人は面白いんだろうか。

当然ながら、自分でも気づかなかったパロディが多数ある。元ネタが気になった人はのうりん元ネタwikiで確認しよう。

ケモノガリ 2

☆☆☆☆☆

楽しい。

とにかく、速い。不自然さや強引さにつっこむ暇を与えず、とてつもない勢いで物語が展開される。

1作目は映画「ホステル」のノリだったけど、本作では拷問も少なめで暴力描写が苦手な人にもおすすめできる。うそ。できない。

丘ルトロジック

☆☆☆

ちょっと退屈。

高校の部活で、オカルトと殺人鬼に挑む話。予想以上にテンプレ構成のチームだった。

もうちょいびっくりしたかったな。

USJのジェットコースターはなぜ後ろ向きに走ったのか?

☆☆☆☆

感想はこっちに書いた

関数プログラミング実践入門

☆☆☆

俺、この連休が終わったらHaskellを始めるんだ……。

gihyoの電子書籍版

臨機巧緻のディープ・ブルー

☆☆☆

こんだけ設定を積み上げておいて、続編なしですか!?

小川一水さんに直接サインをもらった本なので、思い入れはあるのだけど……。1巻だけでは、浸りきれなかった。

感想を書いての感想

これらのほとんどは、読みかけのまま、実家に置いていたものだ。せっかく帰ってきたのだからと、まとめてこうして読み終えた。

本は、読みかけのまま放置するとよくない。内容を忘れて、読み直したときに続きを楽しみにくくなる。読み切っていない本の記憶が、なんというか、自分の人生におけるノイズになっていると感じる。

今年は、読みかけの本みたいに、これまでやり残したことを整理していく年にしたい。

それと。ひとつまえの記事でやり忘れていたけれど。

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

「USJのコースターはジェットコースターはなぜ後ろ向きに走ったのか?」感想

USJのコースターはジェットコースターはなぜ後ろ向きに走ったのか?」を読んだ(どうでもいいことだけど、業績悪化した遊園地を立て直す話なので甘城ブリリアントパークを思い出して脳内でAKINOの歌声が流れ続けていた)。

新書でおなじみの「なぜ」タイトルでウッと身構えてしまうが、内容はだいぶよかった。実例を、しかも実際にうまくいったケースを見せてくれるので、机上の空論かもという不安なしに読み進んでいける。

本の内容

簡単にまとめる。

USJで実現したアイディアの、作成の中心にあるのがイノベーションフレームワークだ。ドヤ感ある命名だけど、著者がそう書いてるので受け入れよう。

イノベーションフレームワークとは

イノベーションフレームワークは四つの柱で成り立っている。

  1. フレームワーク
  2. リアプライ
  3. ストック
  4. コミットメント

1のフレームワークが核にあると考えていい。フレームワークのなかにフレームワークがあるのは気持ち悪いけど受け入れよう。

アイディアを練る際に重要なのは、以下の二つをしっかり考えて決めることだ。

  • どんな条件を満たしているべきかを決める
  • どこに着眼点をおくかを決める

これはTDD(テスト駆動開発)のようなものだ。マーケターは、まずspecを考えねばならない。最終的な目的を達成するために、成り立たねばならない条件(spec)を定める。

着眼点を決めるのは、必要条件を決めてからだ。条件をきちんと定め、的を射たものと確信できていないと、アイディアを練るときに見当違いの領域に立ち入ってしまい、無駄に時間を費やしかねない。

条件と着眼点を決める際の手法には複数あるが、戦略的フレームワークが最も汎用的に使える。

戦略的フレームワークとは

まず、何を目的にして、どんな条件を満たせばよいかをはっきりさせる。で、その条件を満たすためにどんな戦略をとるかを決める。そして、その戦略で進めたとき、必要な条件を満たすための戦術を考える。

目的のspec => 戦略のspec => 具体的なアイディアと、トップダウンにspecを考える。

このように、段階的にブレイクダウンしていくことで、何をすべきかを決めていく。

あとはすごい頑張れば勝つ確率が高められる。

「すごい頑張る」の部分についても本書では書かれているがそのへんは省略する。

感想

フレームワークを使っても、あくまで確率が高められるだけで、確実に勝てるわけではない」と率直に告げている点に好印象を抱いた。


エンジニア的に問題に取り組むと、どう解決するかにいきなりフォーカスしてしまいがちだ。最初の目的設定と、specへの落とし込みが、特に怠りやすい点だと思う。細部にフォーカスして行動する際に迷いを持たないためにも、満たすべき必要条件をきちんと決められるようにしたい。

2014年振り返り

来年の生き方を考えるために、今年を振り返る。

月ごとのまとめ

1月

修士課程を修了できないという危機感がどんどん強くなっていた。

2月

修了できた。

3月

新生活の準備をしていたら終わった。引っ越し先を探したり、京都で行きそびれている場所を探して巡ったりしていた。

4月

入社と研修。ネットワークとかクライアントとサーバの関係とか、現在の実践的なWeb技術の基礎を学んだりしていた。

5月

研修続き。長崎に旅行した旅先で2万5000円の部屋に泊まったりした

エンボディチェアを買ったり、ドラム式洗濯乾燥機を買ったりして、QOLを高めた。

6月

まだ研修。

7月

研修の最終段階。WebアプリケーションをAmon2で作った。

それまではWebアプリケーション開発に対してRailsウェーイな姿勢で接していたが、研修を経た結果、言語やフレームワークではなくメンテナブルな設計を保つことが重要だと考えを入れ替えた。だがPerlはノイズが多すぎて嫌い。

新生活を始めてから買ったものをまとめたりした

8月

研修を終えた。crontabでのバッチ処理とか、MySQLのチューニングとか、枯れているけどしっかり作ると手間がかかる開発手法を身につけた。

YAPC::Asiaに参加して、エンジニアネットワークを体感した。

9月

職場でのキャッチアップ。Webアプリケーションを作るのが自分の責務になった。

情報科学若手の会に参加した。

サイエンスとエンジニアリングの境界面を確認し、自分の立ち位置と学ぶ方向を決めた。

10月

Railsについて、自分の経験を話した。Webアプリケーションを構成するコンポーネント群とどう付き合うか、考えをまとめた。

Railsでできることは、まだRailsに任せてよい。でも、分割できることは分割して、小さな領域にフォーカスしたほうがいい。余計な部分を消して、部品の目的に集中できるから。

あとFate/stay nightクリアした。

11月

ビジネスの観点からみたプロジェクト開発がわかってきた。プログラミングをしていると個々の小さな目的にフォーカスしてしまいがちだけど、それではビジネスにならない。プロジェクトの目的を忘れず、常に頭の中の20%くらいはプロジェクトの目的を考えておく、それくらいがいい。

あとDenkinovelの機能追加をした

月末に、さくらインターネット石狩データセンター見学に参加した

12月

忘年会の準備が大変だった。

魔法使いの夜、エンディングまでプレイした。後日譚だけまだやってない。

振り返ってみて

技術に関して

ミドルウェアからクライアントまで、Webアプリケーション開発はできるようになった。ひとまずなにかを作れる自信は持てた。いうなれば、防具が揃った状態だ(皮の鎧くらいだけど)。

ここから先は武器がほしい。

とりあえず、コンピュータサイエンスをある程度は身につけておきたい。年末に始めたアンダースタンディング・コンピュテーションを続けて、コンピュテーションをアンダースタンディングすることでその第一ステップとする。

それと、関数型プログラミングくらい「できる」と胸を張りたい。目前の課題として、業務で一番使える可能性の高いScalaをします……。

加えて、実務で直接使える知識として、OSやミドルウェアの動きなども説明できるようになりたい。だいぶ前に買ったなるほどUnixプロセスで順を追ってコードを実行することで基本を理解しておいて、ISUCONの過去問で実際のソフトウェアをどう動かすかの感覚を身につけるつもりでいる。

まとめると、来年は、専門分野を持つための発射台を作るフェーズにしたい。広い分野の知識を土台に固めておいて、いつでもキャッチアップできる体勢を整える。

文章に関して

アナテマ・フィジクスと、とある原作付きのノベルゲーム開発を再開したい。ゲームエンジンに何を採用するかは決めきれていないけれど、マルチデバイス対応を考えて、WebView上で動かすノベルスフィアのO2エンジンか、Adobe AIRVMとして使うAIRNovelのどちらかを採用するつもりでいる。

Denkinovel、12月にiOS版を出すつもりだったのに進んでない。Swift情報がいまいち出揃っていないことと、よりモチベーションが湧くもの(CSとかFateとか魔法使いの夜とか)を優先したのが原因。積んだゲームと本を崩し切るまで1か月くらいかかるけども、それからiOS向けアプリをきちんと作りたい。

来年の抱負

※(恥ずかしいので削除しました)