トーキョーナガレモノ

日本映画の旧作の感想。でもそのうち余計なことを書き出すだろう。

注意)本・DVDなどへのリンクはAmazonのアフィリンクです。ご了承下さい。過去記事一覧はこちらです。

プログラミング本に人生を影響されたっていいじゃないか

今週のお題「人生に影響を与えた1冊」

去年の夏はフィルムセンターで毎日のように増村保造のメロドラマを観ていたのに、今年の夏はほとんど映画を観ることができなかった。

きっかけはこの本だった。

JavaScriptプログラミングの本である。

解説書や入門書ではないのでJavaScriptの文法に通じていないと読み通すのは難しいが、jQuery等の知識は必要ない。

この本のテーマは「コードゴルフ」。ゴルフが少ない打数でカップインを目指すように、コードゴルフはいかに少ない文字数で結果を出力するかを競う遊びだ。

実例を見るのが早いだろう。本書の最初の問題「アスキーアートで丸を描こう(1)」から。(スマートフォンで見えやすいように、丸のサイズをオリジナルの半分にしています) 

█ 普通のJavaScriptコード (runをクリックして実行)

コードゴルフJavaScriptコード (runをクリックして実行)

function(){ ... }内の文字数を比べてみると、上は350文字、下は76文字しかない。同じ結果を得るのに、その気になればここまで短く書けるのである。

もちろん短くするために色んなものが犠牲にされている。インデントもスペースもない、変数名が一文字しかない、ifステートメント三項演算子で代用している、forループに変な書き方をしている、これらのために可読性はひどく低下している。特にvarを省略しているので全ての変数がグローバル変数になっているのはミスを招きやすく危険だ。業務でこういうコードを書いたら間違いなく怒られるだろう(自分は仕事でプログラミングをすることがないのでそういう機会はないのだが)。だからコードゴルフは「遊び」と割り切るプログラミングだ。

 

コードゴルフは腕に覚えのあるプログラマーの手なぐさみに過ぎないのだろうか。そうではない。

コードゴルフを上手く行うには、そのプログラミング言語の仕様を熟知していなければなりません。また、問題によっては、同じ処理を別のアルゴリズムで置き換えたり、提示されたデータをアルゴリズムで生成したりして、文字数を削減する必要があります。

コードゴルフは、言語仕様の知識とアルゴリズムに対する造ママ、柔軟な発想が求められる、プログラマ向けのパズルゲームです。(序文より)

 「アルゴリズム」という言葉が3回出てきた。たしかに、JavaScriptのプログラミング経験がある人なら、「;」は省略可能であることも、for文やif文の「{}」も、既述のようにvarも略せることは知っている。ここまでは言語仕様の熟知の範囲でできることだ。

さらにその先の、アルゴリズムの工夫を凝らすところにコードゴルフの面白さがある。Mathオブジェクトを使わずに計算する、定数で置換可能な変数は定数にする、文字列に添字を渡して文字を取得する、二重ループを一重に変換する…これらは人間の頭を使わないとできない、奥深いプログラミングテクニックだ。これらを駆使して短く書くための論理構造を手と頭を駆使して考える。そしてある時「あー、こうすれば短くなるじゃん!」という気づきが訪れる(そうならない時もあるが)。その、アルゴリズムをうまくコードにはめ込んで動かした瞬間の面白さにコードゴルフの真髄がある。実に知的な遊びではないか。

 

JavaScriptに限らずプログラミング本は何冊も読み、読んでは挫折を繰り返した。だがプログラミング本で知的興奮を覚えたのは本書が初めてだった。もっと若い時にこんな本に出会いたかった。

 

JavaScriptはブラウザさえあれば実行可能だし、編集はエディタさえあればいい。今はrepl.itIdeone.comのようなオンラインのコードエディタもある。結果はオンラインコードエディタの「run」をクリックすれば即座に表示される。プログラミング環境を用意する必要はなく、チャレンジする気さえあればいつでも始められ、コーディングに専念できるのがJavaScriptコードゴルフ言語に採用した本書の狙いである。

 

本書は、リクルートのITエンジニア向けスキル評価サービスCodeIQで著者が出題した問題をセレクトし解説を加えて一冊にまとめたもの。「プログラマのためのコードパズル」に感化されてしまった自分は夏じゅう、開いている時間をほぼ全てCodeIQの問題解きに使ってしまった。プログラミングスキルは上がったか?それは聞かないでほしい。

 

カテゴリ「読書」の関連記事

ブログトップに戻る