Findy Engineer Lab

エンジニアのちょい先を考えるメディア

なぜ『達人プログラマー』は今なおエンジニア必読書なのか 翻訳者・村上雅章さんに聞く“読むと元気が出る本書の魅力”とは

プログラマの必読書と名高い『達人プログラマー』。2013年にピアソン桐原社が技術書を取り扱わないことになり、数多くの名著が日本で入手困難となった「ピアソンショック」の影響を受けたものの、その後オーム社から新装版として発行されました。さらに、原著の第2版発行に伴い、『達人プログラマー 熟達に向けたあなたの旅』を刊行。進化の速い業界内で、20年以上も定番として扱われる、他に類を見ない技術書となっています。

3冊すべての翻訳者である村上雅章さんは、ご本人もニュージーランドで活躍しているエンジニア。本書とのかかわりや受けた影響、おすすめの読み方まで、メール取材でたっぷりとうかがいました。

村上雅章(むらかみ・まさあき)

1982年、京都産業大学外国語学部言語学科卒業。1982~1999年、国内情報処理企業にてSEとして勤務。1999年から現在に至るまでニュージーランドにて翻訳およびシステム開発に従事。訳書に、『Java言語仕様』『Java API アプリケーション・プログラミングインタフェース』(アジソン・ウェスレイ・パブリッシャーズ・ジャパン)、『Hacking:美しき策謀 第2版』『PDF構造解説』『Tomcatハンドブック 第2版』『アート・オブ・プロジェクトマネジメント』『イノベーションの神話』(オライリー・ジャパン)、『プログラミング言語 SCHEME』『オブジェクト指向のこころ』『ソフトウェア職人気質』(ピアソン・エデュケーション)など多数。

読み進めるうち、自分はまだまだ修行中だと思い知った

――本書に、翻訳者としてかかわることになった経緯を教えてください。

経緯といってもさほど劇的な出会いがあったわけではありません。懇意にしていただいていたピアソン・エデュケーションの編集者様から「面白い書籍がある」と原書を送っていただいたのがきっかけです。この書籍に出会うまでは、プログラミング言語関係(JavaやScheme)の書籍を翻訳した経験がありました。

当時、書店におけるIT関連の書棚は、PCの使い方やプログラミング言語に関する書籍が大半を占めており、開発手法に関するものは特定の工程で使うツールや、公的機関が定義した堅苦しい方法論の解説書がいくつかある状況。「開発者」という人間系の部分に着目した書籍はなかったと記憶しています。

その後、送られてきた書籍を読み進めていくうちに「何か作ってみたい!」という創作意欲が湧き上がってきました。こういう書籍は間違いなく良書です。このため、そのまま翻訳作業に入らせてもらったというわけです。

私は当時、翻訳原稿をLaTeXソースの形態で納品していました。翻訳作業を進める傍ら、高まった創作意欲を満足させるべく、書籍中に登場するさまざまな用語を一元的に管理するアプリを作成し、セクション間のフォーマットを統一するLaTeXマクロや、参照まわりの処理を自動化するマクロを記述していきました。もっとも、印刷所に入稿する際に必要となるさまざまな調整作業は編集者様にお任せすることになっていたため、難解なマクロ付き原稿を押し付けられた編集者様にはちょっぴり申し訳ない気持ちが残っています(笑)。

その後、2013年のピアソンショックにより一時的に絶版となったものの、オーム社様が新装版として第1版の再販を決定し、ピアソン版の原稿をベースにする方針の下、私に声をかけてくださったという次第です。そして第2版についても、同じような経緯で私に声をかけてくださいました。

――本書は、エンジニアである村上さんにどのような影響を与えましたか?

影響ですか? 本書第1版の翻訳時点で私は、この業界に身を置いて20年近く経っていたため、それなりのノウハウ/スキルを獲得できていると自分では思っていました。ところが、読み進めるうちに自分はまだまだ修行中のレベルだという点を思い知らされ、多少(多少ですよ!笑)謙虚になったと思います。

もっともIT業界でそれなりの経験は積んでいたため、激しく同意できる内容も数多くありました。しかし、著者であるDaveとAndyの言語化能力とともに、緩急のリズムがつけられた的確な表現/構成はとても勉強になりました。それに加えて、今までモヤモヤしていた物事や、考えたこともなかった物事が明確に語られているのには感服するほかはないですね。

「常にこういった観点から物事を俯瞰できるようにしたい」という希望を抱くようになったという点で、かなり影響は受けています。実行できているかどうかははなはだ疑問ですが(苦笑)。

ということで、本書に書かれている内容を常に全部実行できている! と自信を持って答えることはできない(やはり人間、無精な方向に流れがちなのです)ものの、常にそうありたいという態度を心がけています。

冒頭の「あなたの人生」や巻末の「あとがき」が本書の価値を上げている

――第1版と第2版で、大きく異なる点は何でしょうか? 反面、変わらないメッセージや考え方はどのようなものでしょうか。

第2版は、「まえがき」にも記されているように、3分の1近くが新たに書き下ろされています。また、Tip(ピアソン版では「ヒント」としていたもの)に至っては、第1版の70個から100個に増えています。増えたものの多くは1999年の出版以降に登場した新たな流れを反映したものと、第1版の出版当時に重要だと考えられていた内容を再整理し、より一般的な観点から光を当てたものになっています。

本書は「エンジニアとしてのものの考え方」という意識/姿勢的な部分から、「設計段階でのノウハウ」や「ツールを使用する際の心構え」「実装/テスト時における考え方」という作業工程ごとにテーマを決めたセクション、そして「チームのあり方」や「ユーザーとの関係」といった幅広い話題を扱っており、ツールや設計、実装といった工程にまつわる話題は、その時代が重視していたものによって大きな影響を受けます。

例を挙げると、2000年代に入って普及してきたエクストリームプログラミング(XP)やスクラムといった手法によって開発アプローチそのものに大きな変革が訪れ、チームというものの考え方にも新風が吹きこまれました。こうした変革には、ペアプログラミングに代表される「個人での開発から仲間との共同開発へ」という流れや、テスティングフレームワークの充実による実装工程とテスト工程の一体化があります。さらには、オブジェクト指向に関する考え方の整理により、実世界を継承構造によってモデル化するのではなく、変化をインターフェースの裏側に隠蔽するという考えが重視されるようになってきたことも含まれています。この辺りの記述が再整理されるとともに、当たり前になったことなどはより高い次元からの表現に変わっています。

そうした移ろいゆくものとは関係のない部分、つまりエンジニアとしてのものの考え方や、ユーザーとの関係構築の仕方など、人間系のウェットな部分は大きく変更されていません。とはいえ、表現や観点がかなり洗練されています。また、第1版と比べるとエンジニアを元気づけてくれるというか、エンジニアに対するエールが前面に打ち出された記述が増えているとも感じています。特に第2版の冒頭に追加された「あなたの人生」というセクションと、本文最後に追加された「あとがき」は本書を通じて流れている「著者らの思い」をより高い次元から言語化しているという点で、本書の持つ価値を数段引き上げているのではないでしょうか。

第2版に追加された「あなたの人生」は最も印象深い箇所のひとつ

――エンジニアとして、本書とどのように付き合っていますか。

章ごとに対象とする視点が大きく分けられているため、時間が空いた時に自分が取り組んでいる物事に該当する記述がありそうなページをランダムに開き、実践できているかどうかを自問するようにしています。また、各話題の最後にある「関連セクション」にも積極的に目を通すようにしています。

本書の章立ては主に、開発時の局面ごとに整理されていますが、解説されている達人のものの考え方は限定された局面に縛られず、さまざまなかたちで連携しあっています。このため関連セクションへの誘導を活用すれば、達人の頭の中で起きている各項目との連携を垣間見られると感じています。

時間があれば「チャレンジ」の項にも真面目に取り組みたいのですが、翻訳時点で巻末の回答例も既に目を通し、訳出してしまっている以上、カンニングしているかのような後ろめたさがあるので(笑)、それは今後の課題になっています。

――第1版、第2版問わず、本書内で印象に残った箇所、役に立った箇所はありますか。

最も印象的な箇所は第2版の冒頭に追加された「あなたの人生」というセクション中のTip 3「あなたには現状を打破する力がある」というものですね。セクションの冒頭で紹介されているブルース・リーの言葉、そしてTip 3内で引用されているMartin Fowler氏の言葉は強烈です。

「私がこの世界にいるのはあなたの期待に応えるためではないし、あなたがこの世界にいるのも私の期待に応えるためではない」(ブルース・リー)

「あなたは組織を変えることができる、あるいは組織を変わることもできる」(Martin Fowler)

これらの言葉こそ、技芸を極めた達人が見ている景色であり、我々が目指すべき到達点を示しているように感じています。そしてその上でDaveとAndyは「あなたには現状を打破する力がある」と語ってくれているのです。

さらに、「あとがき」では書籍中に記されたすべてのTipsを実践していく上で常に頭の片隅に置いておくべきスタンス、すなわちTip 100「これはあなたの人生だ。皆と共有し、祝福し、生み出していくこと。そして思いっきり楽しむこと!」が記されています。これは本書が対象としているソフトウェア開発という分野だけでなく、充実した人生を送っていく上でのTipだという点で、著者らからの最も素晴らしいプレゼントだと考えています。

――この本の影響により、プログラマー業界で常識となっていたり、共通言語ができるなど、業界に強い影響を与えたものはありますか。

基本的に本書が創出した言葉として最も有名なものは「DRY原則」でしょう。また、「割れた窓」や「蛙の煮物」「直交性」「DbC」「LoD」「KISS」「コンウェイの法則」「曳光弾」「十分によいソフトウェア」などは本書が初出の言葉ではなく別の原典があるのですが、1冊の書籍で語られている体系的な概念世界の中で紹介され、現実世界における運用という文脈の中で説明されているという点で、これらの言葉によってある種の標準言語体系が構築されていると考えています。

時代を超えて読み継がれるのは、人間の本質や技術の根幹に着目しているから

――本書はITエンジニア本大賞2022年の技術者部門大賞に選ばれています。本書が他の技術書と一線を画す理由は何だと思いますか?

本書を読んでいただいて各人で体感していただくのが最も適切なのではないかと思うのですが、私が考えている理由は以下のようなものです。

どのような開発方法論や基盤技術を使用している場合であっても、ものづくりという作業を進めていくのは人間です。本書はその人間を中心に据え、開発におけるさまざまな局面において、どのような態度で作業に臨んでいくべきか、またどのような観点から俯瞰して物事を考えていくべきかを語ってくれています。こういったことを、現在のソフトウェア開発技法の根底をなしている「アジャイルソフトウェア開発宣言」の起草者に名を連ねている2人が平易な言葉で語ってくれているという点が、本書を唯一無二のものにしているのではないでしょうか。

――第1版の発売から20年が経っても、「エンジニア必読」と言われる理由はどこにあると思いますか。

日進月歩、ドッグイヤーとも称される速さで技術革新が続くこの業界であってもそれを動かすのは人であり、人の本質は変わりません。20年以上もの間、読みつがれてきているのは、ひとえに人間を中心に据えている点と、プログラミングやテスティング上の技術的観点に立った説明においても、そうした技術における根幹部分に着目した説明がなされているという点があり、それゆえに時代の荒波に耐えてきているのだと考えています。

タイトル候補には、妻に却下された「鉄人プログラマー」も

――本書を翻訳する際に苦労した点、工夫した点があれば教えて下さい。

最初に思い浮かぶのは『The Pragmatic Programmer』という書籍タイトルの訳出です。先程述べたように、この書籍は技術書に分類されていながら、人そのものに焦点を当てているという点で、極めて異色かつ唯一無二とも言えるものでした。このため、親しみやすい上、広く訴えかけられる邦題をつける必要があると考えたのです(邦題を自由に決定できるという裁量権を与えていただいた編集者の方には感謝しています)。

そして最初に考えた案は直訳的な意味合いを色濃く残した「実践的プログラマー」というものでした。しかし、「実践的プログラマー」という邦題の書籍が書店の本棚に並んでいたとして、手に取ってみたいと思うだろうか? という問いを自らに投げかけてみた結果、この案はお蔵入りになりました。いくら良書でも手に取ってもらえなければ世に出す意味がありませんから。

次に考えた案が「達人プログラマー」でした。ただ、プログラマーという言葉は、米国では広い範囲の開発者を指している一方、日本では「システムエンジニアの作成した仕様書をコードに落とし、単体テストを実施する人」という狭い範囲を指す際に用いられる場合もある点が気になりました。この観点を考慮すると、邦題は「達人開発者」になるのですが、「漢字5文字のタイトルも何だか変だし、だからどうした?って感じだなぁ」と思い、この案も却下しました。

最後に出てきた案は「鉄人プログラマー」というものでした。これは当時テレビで放映されていた料理番組のパロディー、いやオマージュであり、本書の軽い語り口も相まって、それはそれで気に入っていたのですが、妻に却下されました。今思えば却下してもらって良かったと考えています(笑)。

次に本文の話ですが、何度も書いているように、これは今までにない書籍であり、多くの人たちに読んでもらいたい思いと、本文中に登場するIT分野とはまったく関係のないたとえ話をきれいにつなげられるという理由から、文体は柔らかい方に倒した「です・ます調」にしました。その結果、訳出文字数が増え、ひいては文章が冗長なものになりやすいため、緩急のリズムを付けるように気をつけて訳出していました。もっとも成功したかどうかは分かりませんが……。

また、第1版のコード例で使われていたプログラミング言語は、幸運なことにすべて私が熟知していたものだったのですが、第2版ではElixirが登場していたため、あわててこの言語を学習することになりました。この時には、本書に書かれている「毎年少なくとも言語を1つ学習する」という教えをサボっていたことを後悔しました(笑)。

――冗談などが多数散りばめられた本だと思います。翻訳する際に難しかった箇所などあれば教えて下さい。

確かに冗談が多数出てきています。というか、時たま出てくるたとえ話も真面目なのかふざけているのか分からないような楽しいノリのものが多く、翻訳しながらも楽しむことができました。

ただ、さりげなく冗談、というか「くすぐり」を仕込まれるというパターンもあります。その1つが「Don't Panic」というTipです。これは第1版では「パニックに陥らないこと」とそのまま訳していたのですが、第2版の作業をする際、正誤表がないかと原書の公式ページにアクセスしたところ、該当Tipの注釈に「This is true for galactic hitchhikers and for developers.」(これは銀河のヒッチハイカーと開発者にとっての真実だ)と書かれてあるのを発見したのです。原書にはヒッチハイカーの「ヒ」の字もなかったのでまったく気付くことができませんでした。ということで、第2版では、小説『銀河ヒッチハイク・ガイド』(原題:The Hitchhiker's Guide to the Galaxy)に登場する「パニクるな」という表現を使わせていただいています。

あと、分かりやすい冗談の例として、「ドキュメント作成時にはスペルチェッカーを活用する」旨が書かれているセクションで、原書では"After awl, their are spelling miss steaks that the chequer can knot ketch."(After all, there are spelling mistakes that the checker can not catch.の綴りを意図的に間違えたもの)という文が記述されていました。このため私もそのノリに従って、「菜に白、スぺルチェッカーに係ら名井スぺルの待ち害だって或のですから」と訳出したところ、数名の方から「誤植があった」という報告が寄せられてきてしまいました。この辺りの加減というのはなかなか難しいですね。

兎にも角にも、エンジニアにとって「元気が出る本」

――本書を通じて、エンジニアとしてどのように視野が広がると思いますか。

エンジニアと言っても、その守備範囲やレベルは千差万別なので、答えは「人それぞれ」となると思います。ただ、エンジニア歴が長ければ長いほど、本書で語られている内容とよく似た経験を思い浮かべ、大きく頷いたり、身につまされたりしながら深く読み解いていけるのではないでしょうか。そうした過程を経ることによって、その人なりの視野が広がっていくのだと考えています。

――どんな人に、どのような効果がある本だと思いますか。

この業界にあまり馴染みがない、あるいは入ってきてまだ日が浅いという人は、まず本書を通読し、開発の仕事を俯瞰するとともに、その勘所を理解してみるのがよいのではないかと思います。実感を伴って理解できるところは少ないかもしれませんが、経験を積んでいくうちに思い当たる状況に出くわすはずです。その時には該当ページを再び紐解くことで、理解が深まっていくでしょう。言ってみれば、最初の通読は予防接種のようなものです。頭の片隅に入れておくことで、先人が経験してきた落とし穴ともいうべきものに対する早期警戒警報を発令できるようになるはずです。

また経験を積んだエンジニアであれば、自らの経験に照らし合わせて読み進めることで、さまざまな思考実験が可能となり、色々な気付きが得られると思います。この際には、本書にも書かれているように、その内容を批判的な目で評価していくというのも重要だと感じています。

さらにマネージャーであれば、チームメンバーが達人のように振る舞うためのメンタリングや、チーム編成の時点で力を発揮する際などに気付きが得られるはずです。

兎にも角にも、「元気が出る本」だというのが私の感想なので、仕事で悩みを抱えているのであれば、本書を開ける時間を取り、読書にふけって元気を復活させてください。

――「こんなふうに活用してほしい」など、翻訳者としてのメッセージがあれば教えて下さい。

常に手元に置いておき、必要に応じて、また時間ができた時に読んでみてほしいと思います。その際には好きな部分を探し出して読んでもよいし、適当に開けた部分から読んでもよいですが、「関連セクション」の項を活用して項目間のつながりに思いを馳せるのがよいでしょうね。こうした繰り返しによって、頭の中に各項目のネットワークが構築され、達人のものの考え方が無意識のうちに体に染み込むのではないかと考えています。

また、是非とも時間を見つけて「チャレンジ」にも取り組んでみてください。内容によっては同僚や仲間と意見を交わしてみるのもよいと思います。

あと、(単なる思いつきですが)Tipのうちのいくつかをランダム選択で表示し、実践できているかどうかを自己申告で答え点数化するという達人熟達度評価アプリを作ってみるのも面白いのではないかと思っています。

とまぁ色々書きましたが、そんなに難しく考えず、どのような読み方でもよいので「楽しく」読み進めていくのが一番だと思いますし、それがDaveとAndyの望んでいることだと思います。

取材・編集・制作:栃尾江美/Findy Engineer Lab編集部