nekoTheShadow’s diary

IT業界の片隅でひっそり生きるシステムエンジニアです(´・ω・`)

最近読んだ翻訳小説: 『暗黒街の女』『ニューヨーク1954』『シスターズ・ブラザーズ』『秘密の花園』

最近読んだ小説のうち、翻訳小説について、いくつか読書メモをブログに残したいと思います(´・ω・`)

ミーガン・アボット暗黒街の女』(ハヤカワ・ミステリ)

暗黒街の女 (ハヤカワ・ポケット・ミステリ)

暗黒街の女 (ハヤカワ・ポケット・ミステリ)

語り手である若い女が女貸元であるグロリアと出会い、その私設秘書として裏社会で名前を知られていくのだが、ろくでもないギャンブラーと恋に落ちてからは人生を一転させていく――1960年代を舞台としたノワール小説で、ストーリの転がり方もさることながら、キャラクターの書き方が上手。必ずしも多くを語るタイプの書き方ではないにもかかわらず、登場人物たちの心情がびしびし伝わってきて、魅力的な小説だと思いました(小並感)

ディビッド・C・テイラー『ニューヨーク1954』(ハヤカワ文庫)

ニューヨーク1954 (ハヤカワ文庫NV)

ニューヨーク1954 (ハヤカワ文庫NV)

タイトルの通り、1954年のニューヨークを舞台としたノワール作品です。歴史考証がきちんとなされているかどうかは別として、1950年代に発表された小説に近づけてはいます。たとえばそのころの小説には、共産主義への恐怖を表す表象として同性愛を利用することが多々ある、つまり「異常者=共産主義者=同性愛者」という(現代的な価値観からすれば)ありえない図式が頻繁に用いられるのですが、そのあたりの「感じ」を効果的に利用しているように感じました。雰囲気づくりが非常に上手な作品だと思います。

パトリック・デウィット『シスターズ・ブラザーズ』(創元推理文庫)

シスターズ・ブラザーズ (創元推理文庫)

シスターズ・ブラザーズ (創元推理文庫)

ブッカー賞の最終選考に残るなど、英語圏では「おかたい」文学として評価されたにもかかわらず、日本では創元推理文庫で出版されたがためにミステリジャンルで高く評価されたという、ちょっと奇妙な小説です。本書の内容を一言でいえば、シスターズ兄弟の珍道中、あるいは股旅物。全般に血の気が多く、ブラックなユーモアにあふれているのですが、しかし一方で妙にペーソスを感じさせる面もあって、独特の読了感を味わえる作品でした。

バーネット『秘密の花園』(光文社古典新訳文庫)

秘密の花園 (光文社古典新訳文庫)

秘密の花園 (光文社古典新訳文庫)

日本だと少女小説や児童文学として受容されていることから、これまで何となく避けていたのですが――超面白かった(´・ω・`) わがままでこしゃまくれたメアリがイギリスの片田舎の豪邸で、子供らしさを取り戻しながら、周囲を巻き込んでいく。これが「お涙頂戴」というか、非常に感動的。また自然や風景の描き方が簡潔ながら、やさしさを感じられ、読んでいて爽快な気分になりました。なんでも読んでみるもんですね(´・ω・`)

Brett Slatkin『Effective Python: Pythonプログラムを改良する59項目』(オライリージャパン )を読んだ

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

総論に移る前にまずは各論から。読書メモからいくつか抜粋&清書します。本当はもっとあるのですが、書き出すときりがないので、控えめにしておきます(´・ω・`)

  • 項目20: Pythonではデフォルト引数としてNoneを指定することが多々あるのですが、これはデフォルト引数の評価が関数が定義されたときに1度だけ行われるから。たとえばhello(msg, time=datetime.now())としたくなりますが、これはNG。
  • 項目21: Python3からはキーワード引数を強制する方法があるようです。たとえばdef hello(msg, *, time=None)とすると、たとえばhello('world', time=datetime.now)というようにキーワードをつけて関数呼び出しをしないとエラーになります。
  • 項目26: Pythonは多重継承を許可していることはよく知られていますが、本書はmixin用途にのみ、多重継承を利用すべきとしています。わかりやすい戦略ですね(´・ω・`)
  • 項目28: collections.abcの存在自体は知っていたのですが、本章を読んで初めてその内容を理解しました(´・ω・`) JavaでいうところのCollectioIteratableに近い機能を持っているようです。
  • 第4章: 「メタクラスと属性」というタイトルからもわかる通り、本章はまるっとメタプログラミングについて書かれています。黒魔術志向(?)のRubyをよく知っている身としては「Pythonのリフレクションなんてたかが知れている」と勝手に思い込んでいたのですが、意外にもしっかりとサポートされています。自分がこの手の機能を利用するかどうかは正直微妙ですが、OSSのコードリーディングなどをする場合には役立ちそう。個人的には項目32、すなわち__getattr____getattribute__に関する部分に関心を持ちました。いわゆるフックメソッドですね。
  • 第5章: この章はいわゆるマルチスレッドプログラミングについて書かれています。そもそもPythonでマルチスレッドプログラミングができるということを知らなかったので、素直に勉強になったというのが第一印象です。しかもかなり書きやすそう(´・ω・`) 自分でマルチスレッドプログラミングをごりごり書くことは少ないとは思いますが、知っ ていて損はないはず。 -項目55,項目57,項目58,項目59: デバッグやパフォーマンスチューニングについて書かれた項目です。Pythonでアプリケーションを作ったことがないので、何とも言えないのですが、大変便利そうではあります。この手の機能を標準で用意してくれているというのが良いですね。お仕事で使う機会があればいいな――ないと思うけれど(´・ω・`)

Effectiveシリーズなので説明不要かもしれませんが、本書はプログラミング言語Pythonのベストプラクティス集です。そもそもPythonらしいコーディングとはどのようなものでしょうか? まずPython特有の機能、あるいはPythonにおいて手厚くサポートされている機能を多用することがあげられるはずです。たとえば第1章。13の項目から構成される、その名もずばり「Python流思考」というタイトルのこの章ではイテレータを利用することが何度も強調されます。Pythonに慣れていないプログラマだとlistやsetを多用しがちですが、イテレータを使うほうがPythonicとされており、パフォーマンスの面でもイテレータを利用する側に軍配が上がります。この「イテレータの利用」は一例にしかすぎませんが、本書がそのようなPythonらしさに関して、非常に注意を払っていることは明らかであり、本書はPythonicへの特急切符となりうると思います。

面白いのは、Pythonらしさの追求において「プログラミング一般において、よいとされる原則」に触れだしているところ。

  • 項目14: Noneを返すよりは例外を選ぶ
  • 項目49: すべての関数、クラス、モジュールについてドキュメンテーション文字列を書く
  • 項目56: unittestですべてをテストする

などなど。これらはPythonでなくても、現代的なプログラミングにおいて基本的には推奨されている原則です。Pythonは「書きやすく読みやすい」言語を目指して設計されたと聞きます。したがってPythonの敷いたレールにのっかれば、おのずと現代的なプログラミングについても学べてしまうのかもしれません。

さてその内容についてはまったく文句のない本書ですが、あえて文句をつけるならば翻訳の質。プログラマなら英語を読むべきとか、技術書翻訳に高い品質を求めるほうが間違っているとか、いろいろご意見はあると思いますが、本書の翻訳はお世辞にもレベルが高いとは言えない。どことなく機械翻訳的というか、逐語訳的というか。ただしそもそもの文章量が少ないうえに、サンプルコードが充実しているので、「まったくもって意味が分からない」ということはありません。ちょっと気にかかるという程度の問題で、本書の評価を極端に下げるほどのものではないとは思います。

飯山陽『イスラム教の論理』(新潮新書)

イスラム教の論理 (新潮新書)

イスラム教の論理 (新潮新書)

タイトルはちょっぴりそっけなさを感じる本書ですが、まずは各章のタイトルを眺めてみましょう――なかなかセンセーショナルな文言が並んでおり、ついつい読みたくなりませんか?(´・ω・`) 

  1. イスラム教徒は「イスラム国」を否定できない
  2. インターネットで増殖する「正しい」イスラム教徒
  3. 世界征服はイスラム教徒全員の義務である
  4. 自殺はダメだが自爆テロは推奨する不思議な死生観
  5. 娼婦はいいが女奴隷はいる世界
  6. 民主主義とは絶対に両立しない価値基準
  7. イスラム世界の常識と日常

「日本におけるイスラム教紹介」においては「イスラム教=平和の宗教」というイメージが支配的です。イスラムに帰依している人であれば、自分の信仰する宗教をよく言うのは当たり前。非イスラム教徒でも中東社会に関心を持っているという人はたいていインテリですから、他者の宗教を悪く言ってはいけないという規律訓練を受けており、ついついイスラム教の良い側面ばかりを強調してしまうのでしょう。

しかし現実には「イスラム教=平和の宗教」というイメージに真っ向から反抗するような過激派が跋扈しており、もはやニュースバリューを持たないほどに凄惨な無差別テロが頻発しています。イスラム国などは最たる例でしょう。「平和の宗教」でありながら、現代の国際政治を語る上で無視できないほどの影響力を持つ過激派を生み出し容認する――本書はそうした「イスラム教と現実社会のねじれた関係」について、おもにイスラム教の観点からわかりやすく解説したものになります。

本書が面白いのは、抽象的・総論的な話がほとんど出てこないというか、イスラム教と社会の関係を社会理論としてまとめようとはしないところ。個別具体的な事象について、その背景を語るというスタンスをほぼ崩さないため、読んでいて非常に納得感(?)がありますし、そもそも読み物として読みごたえがあります。ちょっとお堅い「ニュースの裏側」のような感じでしょうか。

お仕事がプログラマということもあって「2. インターネットで増殖する『正しい』イスラム教徒」が個人的にもっとも関心を持ちました。詳しくは本書を読んでもらうとして、おおざっぱに論理展開をまとめると「インターネットの広まりによって、コーランの原典やその解釈にアクセスしやすくなった結果、世俗の権力に癒着したイスラム法学者の見解に疑問を抱く人が増え、またそのような人たちが『つながり』やすい環境も整備されたことから、イスラム過激派隆盛の要因のひとつになっている」というもの。メディアの進歩が既存宗教に与える、かつてはルターによる宗教改革(これは活版印刷術の普及が一大要因でした)でも見られたことですが、似たようなことが検索エンジンSNSの流行でも起きているというのはちょっと不思議な気分(´・ω・`)

読書メモ(宗教関係): 『失われた宗教を生きる人々』『講義ライブ だから仏教は面白い!』『剣と清貧のヨーロッパ』『トマス・アクィナス』『イスラームの歴史』

ここ2-3か月で読んだ宗教関係の本に関して、読書メモをさらしておきますね(´・ω・`)

ジェラード・ラッセル 『失われた宗教を生きる人々』(亜紀書房)

失われた宗教を生きる人々 (亜紀書房翻訳ノンフィクションシリーズII―14)

失われた宗教を生きる人々 (亜紀書房翻訳ノンフィクションシリーズII―14)

「中東社会=イスラム教」と勝手に思いがちですが、その見方は一面的で、実際には「イスラム教以外の宗教を信仰する人々」「イスラム教でも少数派に属する人々」が数多く存在します。本書はそうした中東地域に住む非イスラム教徒の暮らしぶりに関する旅行記・エッセイ集になります。注意してほしいのは、本書はあくまで身辺雑記的なスタンスをとっているということ。「マンダ教徒」「ヤズィード教徒」「ゾロアスター教徒」「ドゥールズ派」「サマリア人」「コプト教徒」「カラーシャ族」について本書は取り上げていますが、かれらの歴史や神学を知りたいという場合、本書は不向きでしょう。イスラム教全盛のこのご時世に非イスラム教徒がどのような生活を送っているのか? そこから離れようとしないところが本書の長所だと思います。

そもそも名前も知らなかった宗教・宗派がほとんどで、そのような宗教が存在しており、かつ、イスラム教全盛のご時世において苦境に立たされているということを知れただけでも勉強になりました。宗教それ自体ではなく、それを信仰する人の生活と現状がありのままに知ることができるという点で良書だと思いました。また書きぶりが妙にエキゾチックというか、異国情緒にあふれているということもあり、その感覚をエンターテイメント的に楽しむのも「あり」だとは思います(´・ω・`)

魚川祐司『講義ライブ だから仏教は面白い!』 (講談社+α文庫)

講義ライブ だから仏教は面白い! (講談社+α文庫)

講義ライブ だから仏教は面白い! (講談社+α文庫)

同著者の『仏教思想のゼロポイント』が面白かったので、手に取った1冊です。『ゼロポイント』がややアカデミック寄りで、メインテーマである"ゼロポイント"について直截的に語ろうとしていたのに対し、本書はタイトルに「講義ライブ」とある通り、やや通俗寄り。「読者の理解のためには寄り道も上等」というスタンスを感じました。話が込み入ったところに入ると「あとは『ゼロポイント』に譲る」というような記述もあり、「簡単に読めること」に対するこだわりがうかがえます。

もっとも「平易」であるからといって「レベルが低い」わけではありません。当たり前ですが、根底にある考え方は『ゼロポイント』と全く同じです。筆者は本書から『ゼロポイント』への導線を想定しているようですが、その逆を行った人間からすると、『ゼロポイント』を初めてよんだときには「実はよくわかっていなかった」「よくわからないまま、読み飛ばしていた」部分が保管されたような気がします。副読本としてもおすすめ(´・ω・`)

nekotheshadow.hatenablog.com

佐藤彰一『剣と清貧のヨーロッパ: 中世の騎士修道会托鉢修道会 』(中公新書)

都会の喧騒から離れた郊外で、自給自足の集団生活を送りながら、観想的人生を実践する。修道院という存在に対して、わたしのような人間はそういうイメージを持ちがちですが、実はそれは一面的な見方でしかありません。本書は多面的な修道院システムのうち、12世紀に登場した騎士修道会托鉢修道会について紹介しています。騎士修道会にしろ托鉢修道会にしろ、用語だけは知っていたものの、その登場の要因や実態などはよく知らなかったため、勉強になったというのが素直な感想です(´・ω・`) あとは同著者の『贖罪のヨーロッパ』も面白かったので、これもぜひ(´・ω・`)

nekotheshadow.hatenablog.com

山本芳久『トマス・アクィナス: 理性と神秘』(岩波新書)

トマス・アクィナス――理性と神秘 (岩波新書)

トマス・アクィナス――理性と神秘 (岩波新書)

トマス・アキナスといえば、カトリック随一の神学者で、主にアリストテレス哲学とキリスト教神学の統合を目指した――と高校の教科書ではそう習うのですが、では具体的にどのような理屈でその「統合」を行ったのか? そしてその「統合」作業を通じて、どのような思想を構築していったのか? 本書はそういう「トマス哲学」を紹介した1冊です。本書を読む限り「トマス哲学」というのは非常に明晰な思想であるという印象を持ちました(小学生並みの感想)。

カレン・アームストロング『イスラームの歴史: 1400年の軌跡』 (中公新書)

イスラームの歴史 - 1400年の軌跡 (中公新書)

イスラームの歴史 - 1400年の軌跡 (中公新書)

もともとは非イスラム教徒(カトリックのシスターらしい)が書いた一般向けの入門書で、アメリカでベストセラーになったものの翻訳になります。本書が面白いのは「イスラム教史」の入門書であるということ。イスラム教の入門書とうたわれるものは数多くありますが、そのほとんどは教義に関するもので、本書のように歴史にスポットライトを当てたものは実は珍しいのでは? イスラム史を学ぶ上でネックになるのは、人物名でしょう。日本人になじみがないせいか、中東地域の人物名が登場すると頭が混乱しがちですが、本書は人物名がほとんど登場しないからか、すんんなり読むことができました。イスラム史の大枠をつかむにはもってこいの1冊だと思いました。

青木峰郎『ふつうのLinuxプログラミング[第2版]: Linuxの仕組みから学べるgccプログラミングの王道』(SBクリエイティブ)

本書がメインテーマとしているのは「Linuxに用意されている、システムとのやり取りをするためのAPI」。すなわちシステムコールの概念や方法をC言語プログラミングを通じて学ぶことができる1冊です。たとえばlsmvpwdなど、普段何気なく利用しているコマンドがKernelとどのようなやり取りをしているのか? 基礎的だが、おざなりにされがちな部分を学ぶことができて、Linuxに対する理解が深まりました。個人的には

このあたりの「わかったふりをしてきた」ところをきっちり学びなおすことができてよかったと思います。プログラマである以上は仕組みが分かったうえで、便利なものを使うという態度を徹底したいものです。しったかぶりを決め込む、わからないものをわからないままにしておくのはだめ絶対(´・ω・`)

筆者の狙いかどうかはわかりませんが「プログラミングを通じて学ぶ」というのが本書の良書たるゆえんだと思いました。Linuxに書かれた本は数多くあれど、そのほとんどは知識として学ぶだけで、読んだ後にきちんと知識が定着しているかどうかというと、実はちょっとあやしい。一方、本書は大量のソースコードが掲載されており、読者は自由に写経することが可能です(実際わたしも全コードをすべて写経しました)。写経とはいえ、実際に手を動かすのと動かさないのでは、知識の身に付き具合が全く違います。忙しいとついついおっくうになりがちですが、これからも意識的に手を動かしていきたいところです。

最後に読者プレゼント(?)。まずは本書を読み終わった後に、なんとなく作成したなんちゃってlsコマンド。本書の途中でlsコマンドを作成するくだりがあるのですが、それとほぼいっしょのような……。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>

int
main(int argc, char *argv[]) {
    if (argc == 1) {
        fprintf(stderr, "NO ARGS\n");
        exit(1);
    }

    for (int i = 1; i < argc; i++) {
        char *dirname = argv[i];
        DIR *dir = opendir(dirname);
        if (!dir) {
            perror(dirname);
            exit(1);
        }

        struct dirent *ent;
        while (ent = readdir(dir)) {
            char *filename = ent->d_name;
            if (strcmp(filename, ".") == 0 || strcmp(filename, "..") == 0) continue;
            printf("%s\n", filename);
        }
        
        if (closedir(dir) < 0) {
            perror(dirname);
            exit(1);
        }
    }
}

もうひとつが標準入力やファイルから1行すべてを読み込むreadline関数を作ったので、こちらもなんとなく公開しておきます。本書はその性質上、ファイルから1行読み込む処理を何度も書く必要があるのですが、そのたびにfgetsを使うのは面倒。とくにいちいち文字数を指定するのはおっくうなので、その必要のない関数を用意しておき、使いまわしていました(´・ω・`) 何かのお役に立てば幸いです(´・ω・`)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LEN 100

char *readline(FILE *stream);
char *xalloc(char *ptr, int len);
void die(char *str);

char *readline(FILE *stream) {
    int len = LEN;
    char *line = xalloc(NULL, len);

    char ch;
    int i;
    for (i = 0; ;i++) {
        if (i == len) {
            len += LEN;
            line = xalloc(line, len);
        }

        ch = getc(stream);
        if (ch == EOF || ch == '\n') break;
        line[i] = ch;
    }

    if (i == 0 && ch == EOF) return NULL;
    line[i] = '\0';
    return line;
}

void die(char *str) {
    fprintf(stderr, "failed to %s\n", str);
    exit(1);
}

char *xalloc(char *ptr, int len) {
    int size = len * sizeof(char);
    void *str = realloc(ptr, size);

    if (str == NULL) {
        if (ptr != NULL) {
            free(ptr);
        }
        die("xalloc");
    }

    return str;
}

まつもとゆきひろ『まつもとゆきひろ コードの未来』(日経BP社)

まつもとゆきひろ コードの未来

まつもとゆきひろ コードの未来

お仕事にはしていないとはいえ、一応はRubyistの端くれなので、Rubyのパパの本は読んだ次第です(´・ω・`) 本書の事実上の後編になる『言語のしくみ』がかなり面白い本であったことも読んだ理由になります。

nekotheshadow.hatenablog.com

『言語のしくみ』が「プログラミング言語をデザインする」という一貫したテーマを持っていたことに比べると、本書は非常に手広。筆者が関心を持っているソフトウェア技術を縦横無尽に取り上げたエッセイ集という印象です。出版年が2012年とやや古いため、取り上げられているトピックも時代遅れ――と思いきや、2018年の今でも大きく外していないのはさすが。個人的には第1章から第3章ぐらいまでの、プログラミング言語に関して書かれたパートが一番面白かったかしら。プログラミング言語をデザインしているだけあって、見識の深さがうかがえ、読者としては大変勉強になりました。

世界のまつもとゆきひろ氏を捕まえて、こういうものいいはどうかと思いますが、非常に文章がお上手。実用的で、意図が伝わりやすいし、ユーモアもある。Rubyという世界中のプログラマが使う"言語"を設計できたのは、日本語力・文章力があってのことなのかしらん(´・ω・`)

日経コンピュータ編集『システム障害はなぜ二度起きたか: みずほ、12年の教訓』(日経BP社)

システム障害はなぜ二度起きたか みずほ、12年の教訓

システム障害はなぜ二度起きたか みずほ、12年の教訓

  • 他行で実績のあるシステムの片寄せではなく、新規開発。
  • ハードウェアとソフトウェアが密結合なメインフレーム基盤にもかかわらず、基盤とアプリを分割調達。
  • 大手SIer1社に音頭を取らせるのが通常だが、それを行っている形跡がない。
  • 銀行=システム産業にもかかわらず、システム担当の取締役がいない。システム子会社の実力もかなり怪しい。
  • コーポレートガバナンスコンプライアンスがさほど機能していないともっぱらの評判。

などなど、書き出せばきりがありませんが、大規模システムの構築の常識からかけ離れたプロジェクトマネジメントを行っているとして、インターネットIT好事家からは熱視線(ex.「SI界のサクラダファミリア」「サクラダファミリアのほうが先に完成するのでは?」)が寄せられていることで知られる、みずほ銀行の勘定系刷新プロジェクト。それにしても、素人目にも勝算が低いとわかるこのプロジェクトになぜみずほ銀行は乗り出してしまったのか? 本書はその理由となる、2002年と2011年のみずほ銀行の大規模システムトラブルのルポタージュといってよいでしょう。

本書はざっくり4部構成になるのですが、面白かったのは前半2章。つまり実際にあったシステム障害のルポ部分であり、保守運用経験者の視点から読むと非常に胸が痛くなる内容でした。詳しい内容は本書に譲るとして、2つのシステム障害の真因は「システム投資、とくにシステム運用をけちった」ことだと思いました。直接金を生み出すわけではない情報システムとその運営にはできるだけ金を使うべきではない、というのは事業会社の在り方としてはある一面正しいのですが、銀行のように業務とシステムが密結合な業態だとそうはいかないということが、偉い人にはわかっていなかったのだと思います(´・ω・`)

またここ数か月保守運用をしている身として感じるのは、SI業界の保守運用軽視の傾向。設計開発が花形で、テストはその一段階下、保守運用は最底辺というような妙な身分制があり、このあたりの風潮がSIにおんぶにだっこなみずほ銀行につたわり、結果として運用ミスによるシステム障害が発生したのでは……と個人的には邪推していました。

後半はシステム構築および保守運用プロジェクトに関する一般論が述べられているところであり、学びが少ないというか、「ふんふん、確かにそうだね」という感じ。その内容は確かに正論ではあるものの、ではなぜその正論が実践できないのか? その視点が欠けているようには感じられました。もっとも本書を執筆したのは日経コンピュータの記者陣。つまりSIを生業にしておらず、その職業の性質上個人プレーが多くなりがち。それだと、出入り業者に過ぎないSIerの悲哀や組織運営やチームビルディングの難しさは、実感としてわからないのかもしれませんね(´・ω・`)