nekoTheShadow’s diary

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

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

ここ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

最近読んだ漫画の読書メモ:『漫画版 野武士のグルメ』『漫画版 野武士のグルメ 2』『ルードウィヒ・B』『いやされて 社畜女子のコミックアンソロジー』

これを書いている人は基本的には漫画読みではないのですが、たまには漫画を読みたくなることもあります。そこでここ数か月で読んだなかで、面白かったいくつかの作品について読書メモを公開します。ただ繰り返すようにわたしは漫画についてよい読者ではないので、もしかすると頓珍漢なことを書いているかもしれませんが、許してください(´・ω・`)

久住昌之土山しげる『漫画版 野武士のグルメ』『漫画版 野武士のグルメ 2』(幻冬舎)

野武士のグルメ

野武士のグルメ

以前に読んだ『孤独のグルメ』が面白かったので、同系統の漫画を探していたところ、『孤独のグルメ』に並んで平積みされていたので購入。原作者が『孤独のグルメ』と同じのようですね。定年退職後に時間が有り余っている還暦男があちらこちらでご飯を食べる――というだけなのだが、引き込まれてしまう。作中では「野武士」と称される、主人公の食に対する姿勢は確かにユニークではあるものの、それを除くとただただおっさんがご飯を食べているだけ。しかし面白い。不思議(´・ω・`) 『孤独のグルメ』しかり、それが何かは説明しづらいものの、漠然と面白いという不思議なタイプの作品でした。

手塚治虫『ルードウィヒ・B』(希望コミックス カジュアルワイド)

手塚治虫の絶筆で、以前から関心はあったものの、読むに至らなかったのですが、偶然書店でいわゆる「コンビニコミック」版の本作を発見。値段も手ごろだったので、手に取った次第です。これが死の間際、病床にて書かれたとは思えない出来上がり。とくにフランツの存在。これが本作を音楽家の伝記漫画にたいへんな深みを持たせています。絶筆ということで、本作はかなり半端なところで終わっています。かなわないことではありますが、続きが読みたい(´・ω・`) 007シリーズやシャーロック・ホームズシリーズなど、すでに亡くなった作家の作品をほかの作家が書き足していくということは欧米ではよく見られるので、本作もほかの漫画家が続きを書いてくれないかしら(´・ω・`)

赤塚不二夫『おそ松くん ベスト・セレクション』(ちくま文庫)

おそ松さん』人気にあやかってか、本書が平台に積み上げられていたので、ついつい購入。有名漫画ですが、よくよく考えてみれば内容を知らない。せっかくの機会だし、抜粋版を読んでみるのも悪くない――という軽いのりで読み始めたのですが、面白かった(´・ω・`) とにかく無茶苦茶でナンセンス。そもそも6つ子という設定もぶっ飛んでいるうえに、話自体もそもそも筋があるのかないのかよくわからない感じで、とにかく勢いだけで進みまくる。あとがきによると、作者の赤塚不二夫自体がけっこうな奇人変人だったのですが、しかし奇人変人にしか書けないような作品という気もします。

ビタワン、結うき。、火野遥人 他『いやされて 社畜女子のコミックアンソロジー』 (電撃コミックスNEXT)

いやされて 社畜女子のコミックアンソロジー (電撃コミックスNEXT)

いやされて 社畜女子のコミックアンソロジー (電撃コミックスNEXT)

毎週Twitterで読む『社畜ちゃん』の更新だけが楽しみという社会人生活(血涙)を送っているのですが、その『社畜ちゃん』の原作&作画コンビが宣伝していたので購入。感想としては――かわいい(´・ω・`) とくに今の現場は殺伐している(炎上中)ので、本作に掲載されている作品の登場人物のような人がひとりでもいれば精神の癒しになるのですが、そうはうまくいかないですよね(´・ω・`)

浅山太一『内側から見る創価学会と公明党』(ディスカヴァー携書)

本書は創価学会公明党の関係性を、どちらかといえば創価学会の視点から分析したものになります。本書によると、創価学会公明党を応援することを明示的に支持するようなことはなく、また学会員の間でも公明党を応援する動機や理由に統一的な見解はないそうです。要は学会員は必ずしも公明党を支持するいわれはないにもかかわらず、かれらは日本人の平均からすれば熱狂的ともいえる熱量をもって公明党を応援しています。いってみれば「創価学会公明党の間に流れるあいまいな関係性」がどのように形成され、変遷し、そして現在に至るまで維持されているのか。聖教新聞創価学会会長の発言や講演などを題材として、本書はその答えを洗い出していきます。

もちろんその答えはそれほど単純ではありません。少なくとも新書1冊にまとめねばならないほどには複雑な問題です。教義の観点から公明党の支持をどのように正当化するのか。政治活動の自由や政教分離の原則に抵触しないよう、どのようにして信者を公明党支持に向かわせるのか。本書は膨大な資料からそうした問題をひとつひとつ整理し、創価学会戦後民主主義とは相反する存在である宗教政党を成立せしめたのかを明らかにしています。また「下部構造が上部構造を規定する」というマルクス主義的な発想になじんでいると、支持母体/圧力団体である創価学会の側が公明党を一方的にコントロールしているかのように思いますが、やはりそれほど簡単な話ではありません。宗教政党という政治的社会的にナイーブな存在を抱えることによって、創価学会の側が変質していくということも当然あり得ます。本書はその双方向性にも自覚的で、ページ数を割いてじっくり議論を進めています。

創価学会公明党の関係については、反学会的な立場による陰謀論めいたものか、学会御用の出版社や文化人による礼賛的なもののどちらかばかり。本書のように社会科学的な視点から冷静に見つめなおしたものは少ないように思います。また政治と宗教の関係というと、どちらかといえば政治学の観点から議論されることが多く、どうしても政治側の影響ばかりが取りざたされがち。本書のように社会学の観点から宗教側にスポットライトを当てたものは珍しいのではないでしょうか。あと単純に自分の知らない世界のことが知れたのもよかったですね。不思議なことに創価学会とはあまりかかわらない人生を送ってきており、教科書的な知識を除くと、創価学会について知っていることといえば、創価大学が八王子の山奥にあることぐらいだったので(´・ω・`)

伊藤淳一『プロを目指す人のためのRuby入門:言語仕様からテスト駆動開発・デバッグ技法まで』(技術評論社)

Twitterはてなブックマークでみんながほめていたから」というたいへん"みーはー"な動機で買ったのですが――超よかった(´・ω・`) なお本書に割いた時間は1日1.5-2時間×1週間弱。読みながら例題をすべて写経したあと、もう1回通読しました。

まず断っておきたいのは、これを書いている人はRubyのプロではないということです。Ruby歴は3-4年程度、本業はSIer勤務のシステムエンジニアですが、お仕事としてRubyを書いたことはありません。Rubyに関連するOSSに関与しているわけでもなく、複数人によるRuby開発の経験はほとんどなし。書籍やネット上の情報を頼りに独立独歩/孤立無援/徒手空拳Rubyを学んできました。ちなみに競技プログラミングシェルスクリプトの代用がわたしのRuby利用の大半になります。

要は日曜大工ならぬ日曜Rubyistの立場でしか本書を判定できないということです。たとえば「本書を読めば、本当に"プロ"になれるのか」あるいは「本書の記述は"プロ"としてやっていくに十分か」というような判断はわたしにはできかねます。ただ無手勝流ながら結構な時間を投資してきたという自負はありますし、事実本書で紹介されるRubyの機能や書き方で「まったくもって初見」というものはありませんでした。その程度の人間がこの記事を書いていると思って読んでいただけると幸いです(´・ω・`)

前置きが長くなりましたが、わたしが思うに本書のよいところは4点挙げられます。まずはRubyの基本文法を網羅的ながら、ほどよく学べること。あるプログラミング言語の機能を紹介するにあたって、「どこをどれだけ取り上げるべきか」「どこを泣く泣く捨てるべきか」というのはさじ加減の難しい問題だと想像しますが、本書はその点において過不足のない分量だったように思います。とくにSymbolやRegexpなど「多言語ではなじみが薄いが、Rubyでは多用される機能」「Rubyではとりわけサポートの手厚い機能」について、しっかりとページを割いており、「誰に向けての本であるか」を筆者が強く意識しながら執筆したことを感じさせます。

次にRubyらしい書き方が学べる点。Rubyは「やりかたはひとつじゃない」言語として知られていますが、いくら多様な書き方を許容するとはいえ、パフォーマンスや可読性や慣習の観点から「推奨される書き方」「推奨されない書き方」が存在します。ただこの「推奨される/されない」はRubyプログラマやコミュニティの中で暗黙的に了解されているだけであり、新規参入者は非常に学習しづらい。本書はそのような暗黙的「Rubyらしさ」を体系的網羅的かつ平易に解説しています。本書の中では「Rubyではこのような書き方が好まれる」「Rubyの機能としては存在するが、推奨されない」という類の表現が頻出するのですが、これこそまさに「読者にRubyらしいコーディングを身に着けてほしい」という筆者の意思の現れであると思います。

3つ目の長所として手を動かしやすいつくりになっていることも見逃せない点です。本書は「その章を読み進めることで、章の冒頭に提示された例題が解けるようになる」という構成を採用しているのですが、まずユニークなのは「例題を冒頭に提示する」点。IT計技術書だと「省の最後にクイズが添えられている」というものはよく見かけますが、冒頭というのは珍しいのではないでしょうか。ただこのような構成だと、読者はその問題に解答することを意識して章を読み進めることになるので、読むことに対する身の入り方が変わってきます。

また例題の解答も「単にソースコードを教えて終わり」ではなく、「プログラマがその例題をどのように解決していくのか」の過程が詳細に示されます。本書ではテスト駆動開発(TDD)という開発手法が採用されているのですが、この例題の解説に沿ってソースコードを写経していくと、まるでTDDにたけたシニアデベロッパペアプログラミングをしているかのような錯覚に陥ります。Rubyプログラミングだけではなく、TDDの初歩まで学べるなんて、一石二鳥ですねー。

最後に本書はプロとしての立ち振る舞いまで教えてくれる1冊です。「エラーメッセージはきちんと読む」「英語にひるまない」「Dont't Repeat Yourselfを忘れない」などなど、プログラマであれば当然知っておくべき原理原則や心構えを本書は随所で訴えており、タイトルにわざわざ「プロを目指す人のための」という文言を冠した筆者のメッセージが伝わってきます。個人的には「9.4 例外処理のベストプラクティス」「11.5 汎用的なトラブルシューティング方法」あたりは、Ruby以外でも十分通用する内容だと思いました。今の職場(保守開発)の壁という壁にコピーを張って回りたいぐらい(切実)

以上4点、ちょっとほめすぎかしらん(´・ω・`) ただそれだけ学びの多い1冊でした。Rubyをお仕事にしていないわたしですら、これだけ勉強になったということは、Rubyをお仕事にしている人、これからお仕事にしたい人にとっては、きわめて役立つのではないでしょうか。

ThinkPad X270を買って、ブログをいっぱい書きました。

以前にMacBookを買うべきか、ThinkPadを買うべきかを悩んでいるという記事を書いたのですが、結局ThinkPadを買いました。機種はX270。ThinkPadシリーズでもっとも人気がある12.5型のモデルですね。メモリは8G、256GBのSSDを積んでお値段およそ12万円弱というところでした。意気込んで池袋のビックカメラパソコン館まで足を延ばしたものの、実態はオンラインショッピングの代行をしてくれるだけでした(´・ω・`) まあビックカメラ購入クーポンがあったらしいので、良しとしましょう。

ThinkPadを購入したのは、やはりトラックポイントThinkPad特有のキーボード。トラックポイントについてはひとたびこれに慣れてしまうと、二度と手放せない中毒性を持っています。MacBookにもトラックパッドというそれはそれでよくできた操作デバイスがあるものの、ホームポジションを崩さなくてよいという点ではやはりトラックポイントに軍配が上がります。またMacBook特有の「ぺらぺら」キーボードが苦手、というかThinkPadのキーボードの出来が良すぎるのです。わたしがPCを利用する目的といえば、プログラミングとQiitaを含むBlog執筆。すなわちキーボードをたたいている時間がとにかく長いため、キーボードにはこだわりたい。となるとMacBookは選択肢から自然に外れてしまいます。

ちなみにお仕事でMacBookを使っている/使わされているというのもThikPad、もといWindowsを選ぶ理由のひとつだったりします。お仕事でもMacOS、プライベートでもMacOSというのは結構つらいし、精神的に休まらない(´・ω・`)

懸念点としてはOSがWindowsになってしまうということ。プログラマやソフトウェア開発者の多くがMacユーザであることが話題になりますが、これにはきちんとした理由があります。ずばり環境構築が容易であること。この世界のソフトウェアの大半はUNIXというOSから生まれているのですが、実はMacOSはこのUNIXをベースとしています。つまりMacOSはソフトウェアが作られた環境と親戚関係にあり、ひるがえってその環境を再現しやすいのです。事実お仕事でMacを持たされた際にソフトウェアの開発環境を構築したのですが、windows7時代に比べて圧倒的に楽。この環境構築が楽という点が最後まで迷った最大の要因でした。

もっともソフトウェアのレベルであれば、Windowsでもなんとかなります。とりわけWindows10からはWindows Subsystem for Linux(通称WSL)が正式にサポートされるようになりました。要するにWindows上でLinux(UNIXの仲間)を簡単かつシームレスに運用できるというもので、天下のMicrosoftが作っているだけあって、非常に出来が良い。凝ったことをしようとなると、そもそもがUNIXベースのMacOSのほうが有利ですが、わたしが個人で利用する程度であればWSLで十分事足りますし、これで事足りないのであればVMWareなどで仮想環境を構築するまでです。

ソフトウェア面は多少面倒でも努力さえすればなんとでもなりますが、ハードウェアはそうはいきません。MacBookのキーボードが気に食わない、トラックポイントをつけたいと思っても、こればかりはどうしようもない。この辺りの事情を鑑みて、結局ThinkPadを買うという決断に至りました。ではこの判断は正しかったのか? いうまでもなく大満足です。その証左が、もろもろの環境構築が終わってX270に本格的に触れ始めた2日間で書いたブログの記事数(実をいうと、年末を除いた今年最後の土日ということで、たまっていた話題をひたすら消化したという面もあるのですが)。やはりキーボードが打ちやすいと、文字を書く手が止まらなくなりがちです。

またThinkPadの中でも小さいモデルを選んだのは大正解でした。これまではDynabookの15.6型ラップトップを利用していたのですが、これがとにかくでかくて重い。お外に持ち出すのはまず不可能で、家の中で持ち運ぶだけでも一苦労。ラップトップといいつつ、膝の上に乗せて作業など絶対にできないという代物でした。一方ThinkPad X270は膝の上に乗せ放題。しかもトラックポイントのおかげで膝の上で作業がしやすい。当然持ち運びも容易。ちょっと場所を変えて作業をするというのが、これほどまでに自分のモチベーション維持になるとは思ってもいませんでした。まだ外に持ち出したことはありませんが、いつかスタバでどや顔してみたいですね(´・ω・`)