Magnolia Tech

いつもコードのことばかり考えている人のために。

『レガシーコードとどう付き合うか』は、経営層とエンジニアサイドの価値観の橋渡しをしてくれる稀有な一冊

めもりーさんの『レガシーコードとどう付き合うか』を読んだ。

これは優秀なプログラマであり、CTOとして経営に参画しためもりーさんならではの1冊でした…とはいえ、果たして人生何周目だったらその経験をここまで分かりやすく言語化できるのか分からない。

簡単に言えば、以下の記事の完全版、というか、経営とエンジニアの両サイドから見た「企業が顧客に価値を届けるという営みにおける”エンジニアリング”とは何か?」というテーマなんじゃないかと思います。

note.com

[目次]

  • CHAPTER 01 なぜレガシーコードが生まれやすいのか

  • CHAPTER 02 レガシーコードを改善するための道筋

  • CHAPTER 03 レガシーコードを読む力

  • CHAPTER 04 レガシーコードを改善するための準備

  • CHAPTER 05 レガシーコードを改善する

特に興味深い記載が、以下の3つのCHAPTERにありました。

CHAPTER 01 なぜレガシーコードが生まれやすいのか

冒頭でPHPのインストール方法が載っていて、「さぁ悪いコード例が出てくるのか?」と思ってCHAPTER 01を読み始めてまず面食らうのは、コードではなく、企業の資金調達フェーズから見た開発への期待値と、なぜそこでレガシーコードというものが生まれるのか、という切り口で語られていることです。

これが今までに語られてこなかった目線なので、非常に興味深い。斬新。

CHAPTER 02 レガシーコードを改善するための道筋

そして続くCHAPTER 02も、そのレガシーコードを改善するための役割、発想として、「経営的アプローチ」と、「開発的アプローチ」の二つの側面から語られます。

特に、おなじみプログラマの三大美徳や、変更容易性、循環的複雑度、テスタビリティなど、エンジニア目線での価値観に多くのページが割かれています。ここはぜひ経営層に人に読んで欲しいところです。

CHAPTER 04 レガシーコードを改善するための準備

一つ飛ばして、CHAPTER 04が、採用も含めた人材戦略から始まる改善の準備が語られていて、視座が高い!

冒頭の、”カレーライスのルーとライスを混ぜるのは簡単ですが、混ぜた後に白い米とルーを分ける作業は容易ではありません。」という説明は、一度手がつけられないほど複雑化してしまったソフトウェアの特性を表す良い表現だな、と思いました。

おわりに

『レガシーコードとどう付き合うか』、実はめもりーさんの著書だ、という理由だけで購入ボタンを押してしまったので、内容を全然知らないで読み始めたので全然期待値が自分の中で形成されない中で読み進めたのだけど、「まさかこんな発想の本があるなんて!」という驚きの連続で、久しぶりに「良い本を読んだなー」と思える1冊だった。

この本は、スタートアップの経営層がエンジニアリングとどう付き合うか、エンジニアはどんな価値観を持っているか、ということを知る良いきっかけになるし、反対にエンジニアサイドが「経営層はなにを考えているか」ということを知るきっかけにもなるので、どちらかが読む、というより一緒に読んで、「共通の価値観、共通の語彙」を作り上げるために読むといいんじゃないかと。

全部で200ページくらいしかないし、必ずしも全部読む必要は無いし。

一方でSI企業だったり、ある程度規模の大きな企業の情報システム部門や、エンジニアが読んだ時に、「完全にここに当てはまる場面」というのは少ないかもしれないけど、それがいつ自分に巡ってくるかは分からないので、やっぱり読んでおいて損はないですね。

というか、こんな本、他にないですよ。

めもりーさんはすごい!、という言葉で締めさせていただきます。

『Functional Programming in Scala, Second Edition』を買った

『Functional Programming in Scala, Second Edition』を買った。

1st editionから8年越しの改版。ぱっと見でわかりやすいのは、サンプルコードがすべてScala3ベースに書き換えられていること(コーディングスタイルもインデントベースのものに置き換えられている)。

クーポンコードが有ったので、出版元のmanningから電子書籍版で購入。

www.manning.com

PDF版以外が、MEAP版しかダウンロードされないので、それはそれで問い合わせようと思うけど、PDF版で読み始めたところ。


日本語版の改版が出るのかは分からないけど、これは一番繰り返し読んだ本かもしれない(それだけ理解がなかなか進まなかったし、すぐ忘れる)

ThinkPadにUbuntu Server 23.04をインストールする

ちょっと前にThinkCentreを買ってUbuntu Serverをインストールしたけど、今回はThinkPad(T495)にインストール。

機種固有のハマりポイントが有ったので、その設定

  1. クラムシェルモードで利用するための設定

サーバ利用なので普段はディスプレイは閉じた状態で運用したい...だけど、閉じるとサスペンドしてしまう。

systemd-logind.serviceHandleLidSwitchという設定をignoreに変えるとサスペンドしない。設定は以下のサイトを参照した。

nisshingeppo.com

より詳しい解説は、以下のドキュメントに書かれている。

www.freedesktop.org

  1. 使用しないネットワークデバイスのチェックをスキップする

起動までにやたらと時間がかかることに気づいた。どうやらネットワークデバイスのチェックに時間がかかっているらしい。

ThinkPad T495はEthernetの端子は一つしかないけど、MACアドレスが二つ振られていて、Linuxから見ると二つデバイスがあるように見えている。一つのMACアドレス分しか有効になっておらず、もう一つはリンクアップしないのだけど、ずっとそれを待っている(デフォルトの2分間)状態だったので、無視するように設定を変更した。

systemd-networkd-wait-onlineがその処理を担っているようなので、設定をオフにする。

以下のサイトを参考にした。

qiita.com

より詳しい解説は、以下のドキュメントに書かれている

www.freedesktop.org

  1. Wake on LANが効かない

これはまだ未解決。解決したらここに書く。

  1. おわりに

システムの起動時の挙動は、systemd関係に行き着くことが多いので、systemdをちゃんと勉強しておいた方がよさそう。

『プログラマー脳』

ずっと前に買ったまま積んでいたけど、GW期間にようやく読み進めることができた。

なぜコードを理解するのが難しいのか、それは理解する方法に問題があるのか、それともそもそもコード側に問題があるのか、といった内容が書かれている本

読み物としては非常に興味深いし、これまで出版されたことの無いテーマなので、新人プログラマを指導する人には一読する価値が有る

『モダンLinux入門 - オンプレミスからクラウドまで、幅広い知識を会得する』...サブタイトル通りの入門書

2023/4/24 訳者のお名前の誤字を修正しました 大変失礼致しました —-

コンテナ/クラウド時代のLinux入門本令和最新版。

Linuxのしくみ ―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識』の著者、武内覚さんと、数々の技術書に執筆や翻訳をされている大岩尚宏さんの訳。

サブタイトルに有る通り、色々な場所で使われる現代における、モダンなLinuxの入門本。

OSそのものの入門書ではないので、「OSとは何か?」みたいなところからだと厳しいけど、それがわかっている人には、カーネルシェルスクリプト、アクセス制御、ファイルシステム、ネットワーク等、Linuxを構成する技術要素がものすごい密度で解説されているので、「あれってどうなっているんだっけ?」という知りたいことへのとっかかりとしてちょうど良い。豊富な関連リソースへのリンクや、最新のトピックも網羅されているので、リファレンスのリファレンスとして1冊手元にあるといい。全部で218ページしかないっていう薄さもいい。

冒頭でLinuxの良いところとして「デフォルトではすべてのプロセスにシステムの全リソースが見えるようにしています」と始まり、リソースの可視性からコンテナへ繋いでいき、さらに「オブザーバビリティ」へ繋がっていくところが、単にアプリケーションや、サーバプロセスを動かすだけでなく、実際に運用していく上での視点がフォローされているところが「モダン」というタイトル通りだな、と思いました。

詳細に読み込むというより、斜め読みしておいて、「あれ、このキーワード知らない」とか、「あ、この仕組み、自分では説明できないな」といった自分の知識の答え合わせ、リファレンスとして使うのにちょうど良いので、入門済みの人も手元にあると、人に説明する時に便利じゃないかなと。

とりあえず手元にあって良い1冊ですね。


この本と、『Linuxのしくみ ―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識』を読んでおくと、ざっとLinuxの入口に立てて、良いんじゃないかと。