The King's Museum

ソフトウェアエンジニアのブログ。

『三体』を読んで

『三体』を読みました。四月の読書。

三体

三体

  • 作者:劉 慈欣
  • 発売日: 2019/07/04
  • メディア: Kindle版

『三体』は中国の SF 小説。数年前にずいぶんと話題になったみたいで、なんとなく名前だけ認識してた。

物理学の三体問題をテーマにしていて、そういう数学や物理学的な何かをテーマにするのは他の SF 小説でもあるけど、やっぱり中国が舞台というのがとても新鮮だった。 脳内で登場人物の名前を日本語読みするか中国語読みするかでずっといったりきたりしてちょっと苦労したけど。

小説の中で登場する謎のゲーム『三体』の舞台がだんだんと明らかになっていき、最終的にアルファケンタウリに繋がったときは「なるほどー」と感心してしまった。アルファケンタウリって聞いて Civilization 4 の宇宙勝利を思い出した笑。

この小説、三部作なんだよね。二作目はすでに日本語訳が出ていて、三作目は五月に発売するみたい。

三体Ⅱ 黒暗森林(上)

三体Ⅱ 黒暗森林(上)

  • 作者:劉 慈欣
  • 発売日: 2020/06/18
  • メディア: Kindle版

三体3 死神永生 上

三体3 死神永生 上

  • 作者:劉 慈欣
  • 発売日: 2021/05/25
  • メディア: 単行本

大学生のころに SF を読んでた時期があって、カール・セーガンの『コンタクト』とかアーサー・C・クラークの『幼年期の終わり』とか『2001年宇宙の旅』シリーズを読んでいた。『三体』とテーマが似ていたのでそのときの感情を思い出し、少しセンチメンタルな気分になった。

こういう小説は誰にも邪魔されずに数日間家に引きこもって読みたくなるけど、そういうことができるのはいつになることやら…。

『The DevOps 逆転だ!究極の継続的デリバリー』と『The DevOps 勝利をつかめ!技術的負債を一掃せよ』を読んで

『The DevOps 逆転だ!究極の継続的デリバリー』と『The DevOps 勝利をつかめ!技術的負債を一掃せよ』を読みました。3月の読書。

いわゆるビジネス・フィクションと呼ばれるジャンルの本。DevOps シリーズ3部作と呼ばれるシリーズで、創業100年近い自動車部品販売の企業が業績不振から華麗に立ち直るというストーリー。IT 版『ザ・ゴール』ともいうべきか(読んだことないけど)。

両者ともほぼ同じプロジェクトを舞台に描かれていて、登場人物も一部重複している。でも、パラレルワールド的な設定なのでどちらかだけ読んでも特に問題はない。『逆転だ!』(一作目)の方は IT 運用部門を舞台にしていて、『勝利をつかめ!』(二作目)の方は IT 開発部門を舞台に書かれている。自分はどちらかといえば開発が主軸なので「勝利をつかめ!」の方が身近に感じたかな。

--

二冊とも主人公がこれでもかというくらい問題が山積みのプロジェクトに投入されるところからストーリーが始まる。障害が日常化している運用。まともにデプロイできないソフトウェア。立ちはだかる内部監査。参加して一ヶ月経過してもビルドさえできない開発環境。リリースマージに数日かかるコードベース。社運をかけ数年間で数千万ドルを投入した一大プロジェクトのリリースがうまくいかず大炎上。どう考えても巻き返せるようには思えない。

しかし、主人公達はあれやこれやと立て続けに対策を練ってプロジェクトを立て直していく。技術的負債の解消。継続的デリバリーの導入。マイクロアーキテクチャ化。コンテナ技術の利用。アジャイルの導入。クラウド化。コンテキストからコアの仕事へのシフト。 最終的には会社の業績をV字回復させて、主人公たちは共に CIO(将来の COO)と社内初の Distinguished Engineer になって大団円。

フィクションだからしょうがないけど取り入れる施策がことごとく上手くいくんだよね。 それはまぁいいとして何かを変化させる時にありがちな利害の対立や葛藤がほとんど描かれない(多少、描写はされたとしても数ページ後には解決している)。 ローパフォーマンスだった部門も数週間すると圧倒的なパフォーマンスを発揮するように大変化する。 そんなにすぐに変化できる組織だったら、そもそもそんな問題山積みにならないんじゃないの?と思ってしまった。

--

全部の施策が成功するので先が読めてしまい、読み物としてはワンパターンで食傷気味だったかな。 自分には『闘うプログラマー』みたいなノンフィクションのほうが向いているみたい。 得られたものがあるとすれば、運用・開発における理想像とは?みたいな目指すべき場所はうっすらと認識できたかもしれない。

リファクタリング【第2版】- 第4章:テストの構築

第4章はテストの話。

リファクタリングにテストは必須。ここでいうテストとはいわゆる単体テスト。 リファクタリングは外部からの振る舞いを変えずに内部構造を変えること。 だから常に単体テストを実行して、外部からの振る舞いが変わってないことを確認しながら作業する。

自分が単体テストに入門した著書はこれ。読んだのはもう10年近く前かも。

Pragmatic Unit Testing In Java With Junit

Pragmatic Unit Testing In Java With Junit

たまに「あえてロジックを変えてテストが失敗することを確認する」など、この本と共通する話が多かったな。 そこらへんは今でもちゃんと実践できている気がする。

単体テストはうまくかけばあまり変更することもないんだろうけど、毎回そんなうまく書けるわけもなくて。 コードを変えたときに(特にインタフェースを変えたときに)テストも修正しないといけないということがままあると思う。

でも、そのコストは必要な投資だと思っていて、単体テストがあることで得られるリターンは大きいと思う。 人手を介さず CI で常に回しておくこともできるし。 まぁそれでも大量の単体テストを書き直してるときはけっこうしんどいのは間違いないw

リファクタリング【第2版】- 第3章:コードの不吉な臭い

リファクタリングの第3章。

リファクタリングをいつするべきか、そのタイミングを明確にすることは難しい。 でも、筆者は経験を通してリファクタリングするべきコードの特徴(それを臭いと表現している)をリストアップしている。

  • 不思議な名前
  • 重複したコード
  • 長い関数
  • 長いパラメータリスト
  • グローバルなデータ
  • 変更可能なデータ
  • 変更の偏り
  • 変更の分散
  • 特性の横恋慕
  • データの群れ
  • 基本データ型への執着
  • 重複したスイッチ文
  • ループ
  • 怠け者の要素
  • 疑わしき一般化
  • 一時的属性
  • メッセージの連鎖
  • 仲介人
  • インサイダー取引
  • 巨大なクラス
  • クラスのインタフェース不一致
  • データクラス
  • 相続拒否
  • コメント

名前からすぐに分かる特徴もあれば、名前からでは何かよく分からない特徴もあるな・・・。

今まではリファクタリングする判断を経験と勘に頼っていたけど、こういうリストがあると判断に一貫性が生まれるし他人にも説明しやすくなっていいね。勉強になった。

リファクタリング【第2版】- 第2章:リファクタリングの原則

リファクタリングの第2章。リファクタリングのベースとなる考え方について書かれている。

リファクタリング、とは何か。

リファクタリング(名詞)

外部から見たときの振る舞いを保ちつつ、理解や修正が簡単になるように、ソフトウェアの内部構造を変化させること。

リファクタリングをする、とは何か。

リファクタリングする(動詞)

一連のリファクタリングを適用して、外部から見た振る舞いの変更なしに、ソフトウェアを再構築すること

リファクタリングとは外部から見た振る舞いの変更なしにコードを修正すること。 コーディングしている間、破壊的な変更とリファクタリングの違いを意識して作業するとよい。 これを「二つの帽子をかぶり直す」と表現している。 変更をしやすくするために振る舞いを変えずにコードを修正して変更を加えやすい状態にし、その後、破壊的な変更を加える。

これは CODE COMPLETE の「二回測って一度で切る」の考え方と共通するところがある気がする。

この本でも言及されていたけど、こうやって考えてみるとリファクタリングとはとても小さなステップの集まりなんだよね。 大きくリファクタリングする時間をとるのもわるくないんだけど、理想は普段の機能開発の中に自然と取り入れられているものなのだと思う。

キャンプの古い格言に、キャンプ場を去るときは、来たときよりもきれいにして帰ろうというものがあります。駄目なコードを見かけるたびに少しずつ改善をしていけば、やがて問題はなくなっていくでしょう。

自分もコードを触るときは、そのコードを少しでもよい状態にして去ることを心がけている。完璧じゃなくてもね。

NEC Aterm WG2600HP4 を買ったら自宅のネット環境が改善した

自宅のネットワークの調子がいまいちよくなかったので、NEC Aterm WG2600HP4 を買いました。

f:id:hjm333:20210223110735j:plain

もともと、NURO 光のマンションタイプに加入していて ONU の ZTE F660A に付随している WiFi 機能を使っていた。 たまにインターネットの接続が悪くなる時があって、なんでかなーと思ってて、電波状況は悪くなってなかったからインターネット回線自体の問題かと思ってた。 マンションタイプだから回線が逼迫しやすいのかなーと。 たまに起きる程度だったから我慢してたけど、最近は明らかに接続速度が低下してストレスを感じ始めたので、重い腰を調べて原因を調査することに。

手始めに有線での速度はどんなものかと直接ルーターに繋いで速度を測ったら 1Gbps 出るレベル。はやい笑。 その後、何度測定しても有線だと安定して速度が出たので、ネットワーク不調の原因は WiFi のせいということが分かった。

さっそく WiFi ルーターを買おうと思い、いろいろ調べて NEC の WG2600HP4 を買った。 いざとなったときにメッシュ WiFi が組めるのが一番のポイント。 以前も Aterm 使ってて特に不満なかったし、価格も1万円くらいで特に文句のない範囲。 ただ、WiFi 6 が使えないのでそこが唯一の難点か。そのおかげで価格が抑えられているのだろうけど。

導入して数日経つけど今のところ快適に使えている。 ネットワークが不安定になる事象も解決した。 妻が Fire TV Stick で見ている Disney+ がたびたび読み込みで止まるという原因不明で悩んでた問題も解決した。 同じ Fire TV で見てる Prime Video は読み込みで止まることなかったから、WiFi は疑ってなかったんだけど Wifi が原因だったとはね。

以前から専用の WiFi ルーター買おうかなーと迷ってたんだけど、こんなことならもっと早くに買っておけばよかったな。

『ウォール街のランダム・ウォーカー』を読んで

『ウォール街のランダム・ウォーカー』を読みました。二月の読書。

ウォール街のランダム・ウォーカーは投資について書かれた本でこの界隈では有名みたい。 初版が出版されたのは 1973 年でもう 50 年も前だけど、その後何度も版を重ねていて、原著の最新版は 2020 年に改訂している。 その度に内容もちゃんとアップデートされていて、この第 12 版には仮想通貨の話題も。

この本(というか著者)の姿勢は一貫していて、とにもかくにもインデックス投資をしろ、という。 もう、ひたすらインデックス投資の優位性について書いた本といっても間違いではない(もちろん根拠は挙げながら)。 今でこそインデックス投資はとても一般的になったが、この本の初版が書かれた頃はようやくそういう商品が出始めた時期。 その時代から一貫してインデックス投資を勧めていた著者の先見の明には驚かされる。

本の内容は株式投資の一般的な話がメインでテクニカル分析、ファンダメンタル分析、スマートベータとは何か、みたいな話が載っている。 でも、結局インデックス投資と比較されて「ほら、やっぱりインデックス投資が最強でしょ」となる。 自分も影響されてインデックス投資しようと思った笑。 「世間がインデックス投資しかしなくなったら、市場の効率性が失われてしまうのでは?」と警笛をならしている人もいるようで、 たしかにそういう側面もあるのかーと思ったりした。

最後の方は一般人向けの投資アドバイスが載っていて、投資の心構えとかおすすめポートフォリオが書かれている。 実はこの本を読む前に、同じ著者が書いた『投資の大原則』という本を読んでいた。 そちらの方が内容も簡潔にまとまっていて読みやすいし、iDeCo とか NISA とかやろうと思っている人はこっちをさくっと読むといいと思う。

唯一、気をつけなきゃいけないのはアドバイスがアメリカに住んでいる人を対象にしているところかな。 無リスク利回りが 1% だったり、インフレ率が 2% だったり、自国通貨が世界最強米ドルだったりする国に住んでいる人向け。 でも、それを踏まえても役に立つアドバイスがずいぶんと書かれている本だった。

(c) The King's Museum