nekoTheShadow’s diary

技術ブログとして始めたはずが、読書&愚痴ブログになりました(´・ω・`)

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

ここ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の悲哀や組織運営やチームビルディングの難しさは、実感としてわからないのかもしれませんね(´・ω・`)

最近読んだノンフィクション: 『ドキュメント 五代目山口組』『モンスター』『誘蛾灯』『浅草博徒一代』

ここ1-2か月で読んだノンフィクションのうち、面白かったものの感想をブログに書き残しておきたいと思います(´・ω・`)

溝口敦『ドキュメント 五代目山口組』(講談社+α文庫)

ドキュメント 五代目山口組 (講談社+α文庫)

ドキュメント 五代目山口組 (講談社+α文庫)

昨今世間をにぎわしている山口組3分裂に関する同著者のルポを以前に読んだことがあり、本書がテーマとしている5代目組長がそのルポで大変批判的に扱われていたということから興味をもって手に取った1冊です。その批判的な論調はルポが書かれた20年前(=本書の出版年)とほとんど変わらず、この5代目は山口組という巨大組織をすべるほどの器ではなかった。合理主義的で経済にも明るく、やくざ内政治もうまいという点では近代的で先駆的ではあったが、山口組ひいては暴力団全体の気質を変化させてしまった――というのが本書の5代目組長への評価となります(ただ本書はほとんど触れていませんが、このようなタイプの組長出現は当時の経済状況=バブル経済があってこそのことだとは思います)。先述したルポでは山口組の分裂のきっかけをこの5代目組長の就任に見るのですが、それを予見したような記述を20年前に行っていることに驚かされます。

そういえば、繰り返し話題に挙げた「ルポ」ですが、その書評をブログに乗せていたことを思い出しました。そもそも「ルポ」を買って読んだのは「hontoのメルマガが執拗に進めてくるから」という、自分でもどうかしているとしか思えない理由でしたが、ただ読んでみて勉強になったことは確か。なんでも食わず嫌いせず読んでみるものですね(´・ω・`)

nekotheshadow.hatenablog.com

一橋文哉『モンスター: 尼崎連続殺人事件の真実』(講談社+α文庫)

モンスター 尼崎連続殺人事件の真実 (講談社+α文庫)

モンスター 尼崎連続殺人事件の真実 (講談社+α文庫)

ひとりの老婆を中心とした、血縁関係のない「ファミリー」が金を目当てとして次々に人を殺めていく――3流サスペンスやホラーの筋立てとしか思えない尼崎事件を覚えている方は多いと思いますが、本書はこの「老婆」の生い立ちから事件の一部始終を丹念に追いかけています。凶悪犯罪が発生すると、その事件の裏に何か深刻な社会的事情があったのではないかととりざたされますが、本書を読む限り、尼崎事件はそのような社会的事情とはかけはなれた特異点的な犯罪だと感じました。

まず「ファミリー」という形態が異常そのもの。そもそも血縁関係婚姻関係がない人間と共同生活を送る、そのうえ新しい名前を与えるという点で、一般常識から乖離していますが、その裏では凄惨な暴力をくわえて、正常な思考能力を奪う。そうして膨れ上がった「ファミリー」の豪奢な生活を維持すべく、財産を目的として、よその家庭に入り込み、果ては殺人まで行きつく場合もある――と聞くと、この原因を社会一般に帰するのはかなり厳しいように思います。筆者はこの「異常」の要因を「老婆」の生い立ちと彼女が心酔していたとある暴力団員にあると結論付けていますが、正直にいって納得いきかねます(´・ω・`) 事実は小説より奇なりということでしょうか。ただこの「のっとり」にあった家庭はどこにでもある「普通」の家庭であり、「異常」の発生が社会と無関係に起こるとしても、その「異常」に巻きまれる可能性は十分にあるということを思い知らされます。

青木理『誘蛾灯: 二つの連続不審死事件』(講談社+α文庫)

必ずしも見目麗しいというわけではない女性に多くの男たちが入れあげ、金を貢げるだけ貢いだあとに不審死を遂げていく――と聞くと首都圏連続不審死事件が想起されがちですが、同時期によく似た事件が鳥取でも起きており、本書はその鳥取連続不審死事件を取材したものとなります。資産家令嬢を装った容疑者が婚活パーティを通じて知り合った独身男性に貢がせて殺害(?)する。そして逮捕/収監/死刑確定後も裁判の場やブログメディアを通じて自らのアピールを続けるという点で、前者はどこか都会的な劇場型犯罪、昔かたぎな単語を使えば"アプレ犯罪"のような様相を見せていたのに対し、後者は土俗的というか、俗っぽい言葉をつかえば「どろどろ」とした印象を持ちました。

疲弊した地方都市の、常連客だけしかいないようなスナックに勤務する肥満体のホステス。そのうえx2で5人の子供を持つシングルマザー。そんな彼女に男たちが入れあげ、結果として不審死を遂げていくのだが、その男たちはいわゆる"ダメンズ"ではないどころか、新聞記者や景観などお堅い職業が多く、しかもそのほとんどが妻子持ち。本書によると容疑者の女は病的なうそつきで、男性を支配する才能の持ち主であったようですが、それにしても「社会的に立派な人々がなぜこんな女に?」という印象はぬぐえませんでした。本書は「どんな家庭にもあるちょっとした不和に入り込んでいく才能を女が有していたこと」と「経済的にも文化的にも疲弊していく地方都市」をこの不可思議を説明するファクターとして繰り返し挙げているのですが、それもどこまで当たっているのか。やはり事実は小説より奇なり(2回目)。ルポタージュを読む面白さはこういうところにあるのかもしれません。

佐賀純一『浅草博徒一代: アウトローが見た日本の闇』(新潮文庫)

浅草博徒一代―アウトローが見た日本の闇 (新潮文庫)

浅草博徒一代―アウトローが見た日本の闇 (新潮文庫)

大正から昭和にかけて浅草に勢力を張った博徒の晩年にインタビューを試みた筆者がそのインタビューを物語風に再編成したものになります。まず「博徒」という生き方・職業があること自体が勉強になりました。社会の風紀を乱すということで、いつの時代もばくちやギャンブルはご法度。しかし需要あるところに供給ありというのも世の常です。品物がご禁制であり、国家権力としては存在してはいけない職業であることから、記録にきちんと残されているわけではありませんが、職業として存在する以上はそこには独特の美学や倫理観や経済制度があり、その一端を知ることだけでも十分勉強になります。また裏街道から見る社会を知ることで、読者の社会理解に多様性をもたらすものだとわたしは思います。

ただ本書の魅力はそれだけではありません。本書が取材する博徒が送った、その波乱万丈の人生は下手な小説などよりはずっとドラマチック。大正から昭和初期という激動の時代に博徒という文字通りやくざな生き方を選んだ男の一代記に読みごたえがないなんてあるはずがないのです。これで3度目になりますが、やはり事実は小説より奇なり。出版社のマーケティングとして、ミュージシャンとしてはじめてノーベル文学賞を受賞したボブディランが「ぱくった」本として本書を売り出していきたいようですが、そういう好事家観点だけで読んでしまうと大変損をするので、お気を付けください(?)。

「しがない問題」を解いてみました。

お題「しがない問題」

tbpgr.hatenablog.com

@tbpgrさんが「しがない問題」というお題を作成されていたので、自分が好きなRubyとPython3、最近お勉強中のC#、そしてお仕事で最近にらめっこをすることが多いSQLで回答してみました。休日でやることがなかったので(´・ω・`) なおSQLDb2 Express-C 10.5で動作確認していますが、標準的なSQLからそれほど乖離していないと思います。

まずはRubyRubyは配列から重複なく指定された数の要素を取り出すsampleというメソッドがあるので、これを利用します。

def solve
  chars = "しくてがない".chars
  title = nil
  100.times do |n|
    title = chars.sample(4).join
    return "#{n + 1}回SIerのSEからWEB系のエンジニアに転職したが楽しくて仕方がないラジオ、略して「しがないラジオ」" if title == "しがない"
  end
  "#{title}ラジオ」ちゃうやん"
end

puts solve

お次はPython3。Python2でも動きそうな気がします(´・ω・`) Pythonにもsampleメソッドが存在するので、これを使うのが便利そうです。

import random

def solve():
    for n in range(100):
        title = "".join(random.sample("しくてがない", 4))
        if title == "しがない":
            return "第{0}回SIerのSEからWEB系のエンジニアに転職したが楽しくて仕方がないラジオ、略して「しがないラジオ」".format(n + 1)
    return "「{0}ラジオ」ちゃうやん".format(title)

if __name__ == '__main__':
    answer = solve()
    print(answer)

さてお勉強中のC#ですが、わたしのC#力が低いからか、sampleメソッドに類するものを見つけることができませんでした(´・ω・`) ただ乱数を生成するSystem.Randomクラスは用意されているので、自らsampleメソッドを実装することに。

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(solve());
    }

    static string solve()
    {
        string title = null;
        foreach(var n in Enumerable.Range(1, 100))
        {
            title = sample("しくてがない", 4);
            if (title == "しがない")
            {
                return $"第{n + 1}回SIerのSEからWEB系のエンジニアに転職したが楽しくて仕方がないラジオ、略して「しがないラジオ」";
            }
        }
        return $"「{title}ラジオ」ちゃうやん";
    }

    static Random random = new Random();

    static string sample(string chars, int len)
    {
        var idxs = new List<int>();
        while (idxs.Count < len)
        {
            var idx = random.Next(chars.Length);
            if (!idxs.Contains(idx))
            {
                idxs.Add(idx);
            }
        }
        return string.Join("", idxs.Select(idx => chars[idx]));
    }
}

最後のSQLですが……これで本当にあっているのかしらん(´・ω・`) なおSQLがいくら得意でも、実際のアプリケーション開発でこんなSQLは書いてはいけません。保守担当者が地獄を見ます(実体験)。フレームワークによる自動生成や分析屋さんが書き捨てで書く分なら問題ないのですが、メンテナビリティを考えると、シンプルなSQLがベストだと思います。

with
chars(char) as (
    select 'し' from sysibm.sysdummy1
  union
    select 'く' from sysibm.sysdummy1
  union 
    select 'て' from sysibm.sysdummy1
  union 
    select 'が' from sysibm.sysdummy1
  union 
    select 'な' from sysibm.sysdummy1
  union 
    select 'い' from sysibm.sysdummy1
),
titles(idx, title) as (
  select row_number() over (order by title), title
  from (
    select c1.char || c2.char || c3.char || c4.char as title
    from chars c1, chars c2, chars c3, chars c4  
    where c2.char not in (c1.char)
    and   c3.char not in (c1.char, c2.char)
    and   c4.char not in (c1.char, c2.char, c3.char)
  )
),
episodes(episode, idx) as (
    select 0, 0 from sysibm.sysdummy1
  union all
    select episode + 1, cast(rand() * (select count(*) from titles) as integer) + 1
    from episodes 
    where episode < 100
),
programs(episode, title) as (
  select episode, title 
  from titles t join episodes e on t.idx = e.idx
)
select case
  when (select count(*) from programs where title = 'しがない') <> 0 then
    '第' || (select min(episode) from programs where title = 'しがない') || '回SIerのSEからWEB系のエンジニアに転職したが楽しくて仕方がないラジオ、略して「しがないラジオ」'
  else
     '「' || (select title from programs where episode = 100) || 'ラジオ」ちゃうやん'
  end
from sysibm.sysdummy1

いうまでもありませんが、本問題のもとねたはTech系Podcastの「しがないラジオ」。問題の発案者である@tbpgrさん(出演もされていましたね)がTwitterでよく話題に出されていたことがきっかけで存在を知り、通勤中などに関心のある回を"拾い聴き"しています。いい視聴者じゃなくてすみません(´・ω・`)

shiganai.org

ラジオを聴いている限りだと、パーソナリティのふたりはわたしと年齢が近い感じがします。たぶんわたしのほうが1-3歳年下。またわたしも大阪出身なので、関西人には親近感を抱きがち。自分と同郷で年も近いふたりがIT業界の在り方自体に対して問題意識をもつだけではなく、実際に行動に移しているとなると、これは応援せざるを得ない。なら「全話ちゃんと聞けよ」ということなのですが――仕事が忙し杉内(2流SIer勤め並みの感想)。だれかわてに時間をおくれやす(´・ω・`)

Scott Oaks『Javaパフォーマンス』(オライリージャパン)

Javaパフォーマンス

Javaパフォーマンス

ここ数か月、Java製のシステムのパフォーマンス問題に悩まされることが多く、手に取ったという悲しいいきさつがあります(´・ω・`) しかも11月の初めに買っていたにもかかわらず、前述の問題のせいで読む時間がとれず、ようやくきちんと読み始めたのが年末年始の冬休みでした(´・ω・`)

本書はJavaのパフォーマンス監視やチューニングのいろはを教えてくれる1冊です。本書を手に取った時点でJavaのパフォーマンス測定ツールが純正(?)やサードパーティ製問わず、様々あることは知っており、そういうツールのチュートリアル集・リファレンス集かと思って読み始めたのですが、結果から言うとそんなお手軽な本ではありませんでした。もちろん「道具」の使い方は丁寧に解説されていますが、その「道具」には必ず使いどころが存在します。のみでも丸太を切ることはできるかもしれませんが、そういう場合はのこぎりを使いたいものです。本書はツールの使い方だけではなく、どういう場合に使うべきかという根本的な部分から丁寧に解説している点で、価値の高い1冊だと思います。

またパフォーマンス測定やチューニングが話題になるのは、何かしらの問題が顕在してからが多いと思います。もちろん「問題」への対策を知っておくことも大事ですが、「問題」の原因やそれが起きる背景を知っておくことはもっと大事です。本書はその「原因」や「背景」について、きっちりページ数を割いています。たとえばJavaコンパイラガベージコレクション、ヒープメモリやスタック領域がそもそもどういうものであるか、それらがどのようなアルゴリズムや機能を備えているか、そしてそのアルゴリズムや機能がどのようにJavaのパフォーマンスに影響するのか。通常のプログラミング作業を行ううえではほとんど意識しない領域、俗に低レイヤといわれる領域の話がみっちりと解説されており、わたしのように初心者から中級者の脱皮に悩むプログラマには最適だと思いました。

最後にパフォーマンスの観点で「通常のプログラミング」の際に気を付けるべき事項まで、本書は丁寧に解説しています。パフォーマンス監視やチューニングというと、ツールを駆使したり、設定とにらめっこしたりすることが想起しがちで、実際そういう側面も否定しきれないのですが、しかしコーディングの時点で気を付けなければならない問題、あるいは気をつけておけば発生しなかった問題というのは当然存在します。「+=による文字列結合は避ける」「jdbcを利用したDB操作の際はトランザクションを保ちすぎずに頻繁にコミットする」という基本的なところから、データのシリアライズやスレッドの効率的な利用法という応用編まで、パフォーマンスに関するテーマが幅広く扱われており、とても勉強になりました。

最近はハードウェアのスペック向上が著しいこと、「低レイヤ」のアルゴリズムが洗練されていることから、富豪的なプログラミングでも意外に平気だったりしますが、しかし油断していると火を噴き始めるのがパフォーマンス問題。みんなが困っているところで、問題をさっそうと解決する、あるいは解決までの道筋を立てることができると、かなりの強みになりそう。またパフォーマンスに強い関心がなくても、低レイヤの動きやJavaプログラミングの常識的なところも学べるので、Java初心者を脱したい人にはおすすめできると思います。まずは1-2回通読することで本書に何が書かれているかを頭の片隅に入れており、いざパフォーマンスが発火しだしたときに、本書片手に問題対応するというのが良いのではないでしょうか?


余談: 監訳を務めている「Acroquest Technology株式会社」という会社。どこかで聞き覚えがあると思ったら『Java本格入門』(技術評論社)の筆者陣が所属している会社のようです。この『Java本格入門』も超よかったのでおすすめ(´・ω・`)

nekotheshadow.hatenablog.com