エンジニアtype - エンジニアのシゴト人生を考えるWebマガジン

コードの複雑さを上げずに「世界の複雑さ」と戦うために読んでおきたい良書5選【2012年のインプットlog-和田卓人】

公開

 
業界で名の知れたプログラマーは、今年1年何を学んでいたのか? 2012年も残りわずかとなり、いよいよ「年忘れ」の時期になった今、あえて今年1年で学んだことを忘れる前に取材・記録しておこうという本企画。「同業者が役に立ったものは、自分にも役に立つはず」という仮説を基に、彼らの学びlogから、今年の流れと来年の動向予想をしてみよう!
プロフィール
t-wada

タワーズ・クエスト株式会社 取締役社長
和田卓人氏 (@t_wada

テスト駆動開発(TDD)の普及役として知られるプログラマー兼経営者。学生時代、オブジェクト指向分析/設計に傾倒。その後、ソフトウエアパターンやXP(eXtreme Programming)を実践する人たちと出会い、TDDの誕生を知る。現在は講演活動やハンズオンイベントを開催しながら、TDDの普及運動を行う。名著『プログラマが知るべき97のこと』も監修

和田氏の2012年はどんな1年だった?

先日行われた『DevLOVE 2012』で、「愛せないコードを書くには人生はあまりにも短い」というタイトルで講演を行った和田卓人氏。

■講演内容の詳細はコチラ↓
http://d.hatena.ne.jp/t-wada/20121217/develove2012_tdd

t-wada-devlove

和田氏が『DevLove2012』で発表した資料はSlideShareで公開されている

2012年はどんな最新技術を学んでいたのか? と質問すると、返ってきたのは「温故知新。今年は新しいものだけでなく、過去を学ぶ1年だった」との答え。

聞くと、本業で手掛けていたある大規模なBtoCシステムのシステム移行設計/実装を通じて、「“長生きするデータ構造”、“姿を変えながら使われ続けるシステム”とはどんなものなのか?」と考えることが多かったからだという。

システムというのは、例えばデータベースのような“土台”となるシステムの上に、その時々で必要となる各種アプリケーションが連携する形で動いている。言い方を変えると、「それぞれ要件や技術の寿命が異なる要素が混在している」(和田氏)状態だ。

ゆえに、複雑化する要件に対応するために機能追加やデータ移行を重ねるうちに、設計やコードがツギハギになっていき、次第に手を加えること自体が困難になっていく。そうなると、やりたいことをすばやく実現するのは難しい。

コードがダメになる理由は、人間の限界にあるというわけだ。

Programming-image

From Zach Klein
プログラミングで最も高い「障壁」とは、人間自身の処理能力の限界にある

では、この課題を解消するには何が必要か? と考え続けた結果、和田氏がたどり着いた答えが「コードの複雑さを上げずに、世界の複雑さと戦う」というもの。

「新システムを構築しながらデータ移行を行うだけでなく、バグや不具合になりかねないデータやデータ構造も修正する。もちろんその間も、フロントエンドは稼働させ続ける。こういった作業を同時進行で進めているうちに、複雑な要件に対応しつつ、劣化せずに長く利用可能なシステムを作るには、巨大で複雑な一枚岩のプログラムを作るのではなく、シンプルで単機能なプログラムを複数組み合わせる方がベターなんだと改めて認識したんです」

シンプルかつ単機能なプログラムは、できること・できないことが明確だ。そこにムリに手を入れて機能を拡張させていくよりも、「できること、できないことを理解した上で別の単機能なプログラムと組み合わせる」(和田氏)方が、全体として複雑さの度合いが下がり、調和を保てるのだ。

そう考え直した和田氏が主にインプットしてきた(し直してきた、という表現の方が適切かもしれない)のは、UNIX、REST、SQLという至ってノーマルな技術について。いずれも「技術トレンドが移り変わっても長く使われ続けてきたものだけに、『スジの良い技術』、『長生きする設計』のヒントがあるはずだと考えた」(和田氏)からだ。

「例えばUNIX系OSには、複数の単機能なプログラムをつなぐために“パイプ”という仕組みがありますよね。パイプに代表される設計思想こそが、先ほど話した『コードの複雑さを上げずに、世界の複雑さと戦う』ための、一つの解だと思ったのです」

和田氏が思考を巡らす上で参考にしていた良書の数々を教えてもらおう。

今年の和田卓人を支えた、注目インプットlog

【1】 UNIXの原理原則を学ぶ良書2冊

UNIXに関する情報は、それこそネットでも書籍でもたくさん出ていますが、僕は特に

■『The Art of UNIX Programming
■『UNIXという考え方―その設計思想と哲学

の2冊を参考にしていました。この2冊は、UNIX系OSの設計思想や背景から学ぶことができるからです。

短くまとまっている『UNIXという考え方』はUNIX思想を知るための第一歩として、大著『The Art of UNIX~』はUNIXプログラミングの文化・価値観についても詳細にまとまっているので、年末年始のような休暇中に改めてUNIX思想を知る上で良い本だと思います。

【2】 RESTの設計思想、背景を知る1冊

RESTについても、UNIX同様に設計思想から学ぼうと思ったら

■『Webを支える技術 -HTTP、URI、HTML、そしてREST

が参考になります。RESTについて知るべきことが、きれいにまとまっている本です。

World Wide Webは、すでに20年以上も使われている“長寿なアーキテクチャ”です。それを支えるHTTPやURIといった技術要素を改めて学ぶと、RESTの優れている点に気付かされます。

【3】 SQLやデータベースの理論面と実践面を頭に叩き込む2冊

SQLやデータベース設計の理論面と実践面の学習には

■『データベース実践講義 ―エンジニアのためのリレーショナル理論
■『達人に学ぶ SQL徹底指南書

が参考になると思います。リレーショナルデータベースも、強固な理論を背景に持った世界です。

実は今年、オライリージャパンから来春発刊予定の『SQLアンチパターン』を監訳する仕事も頂戴していて、本業以外でも理論面と実践面から改めて学び直す機会がありました。『データベース実践講義』は、僕が大学に通っていた時に授業で使われていたテキスト(『データベースシステム概論(絶版)』)を求めやすくしたもので、良い書物は時代を問わず学ぶべき内容が多いものだと感じています。

原理原則を知ることが、未来の技術トレンドを先読みする糧に

「これらの本を読んでいて、ほかにも気付く点があります。それは、この3つの技術は共通して『制約(できること・できないこと)を利用者が合意し、共有することで発展してきた』ということです。制約を共有することで、コードは時間を超えてつながるのです」

Ruby on Railsの作者であるDavid Heinemeier Hanssonも、「制約が自由をもらたす」と語っているが、まさに同じ視点を和田氏も持つようになったという。そしてこの考え方をほかの技術にも当てはめてみることで、近未来の技術動向も予想できるはずと続ける。

「例えばNode.jsなどが好例だと思います。Node.jsが登場した当初は、『非同期プログラミングしかできない、とても用途の限られた不自由な環境』と揶揄される向きもありました。が、そのプログラミング上の“制約”に合意し、その制約を受け入れる代わりに可能になるものを理解することによって、新しい世界が見えてきます。制約がシンプルな設計を尊ぶ文化を生み、Node.jsのエコシステムは非常に興味深い形で広がっています。最近になって、注目技術として挙げられることが増えてきたのも、こうしたバックボーンを持っているからだと思うのです」

今は「便利なフレームワーク」や「パッと見では使えそうなライブラリ」の情報で氾濫し過ぎている節もある。年末年始を機に、和田氏のような視点で、今後の技術トレンドを見直してみるのも面白いかもしれない。

取材・文/浦野孝嗣 撮影/小林 正

>> 増井雄一郎氏の「2012年インプットlog」はコチラ
>> 山本裕介氏の「2012年インプットlog」はコチラ