Magnolia Tech

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

rust本

プログラミング言語Rust入門

プログラミング言語Rust入門

プログラミングRust

プログラミングRust

Rustプログラミング入門

Rustプログラミング入門

『ビューティフル・コード』…美しいコードとは何だろう

久しぶりに読み返している。

冒頭の竹内郁雄先生の推薦のことばはこのような書き出しで始まる。

最近,プログラムのコードの話をするのは,ソフトウェアのなんたるかをわかっていないような言われ様をするようだが,コードの話をしないで,なにがソフトウェアかというのが筆者の強い思いである。プログラムを書いたことことがないシステムエンジニアが威張っているような会社は早晩亡びる.プログラムコードには,およそ人が「書く」もののエッセンスのほとんどが詰まっている.よい問題理解に始まり,設計,製造,検査,保守改良に至るソフトウェアのライフサイクルをきちんと制御する能力の大半は,実は文章の力であり,文章の力はよいコードを書く力とほぼ等価である.つまり「美しいコード」を書けるということは,たとえ,コードを書くチャンスがなくても「美しいソフトウェア」を開発できるということなのだ.美しいソフトウェアを開発した人はそれを実際に体験・体得している.

なるほど……この文章が書かれたのは13年前だ(2008年に邦訳が出版されている)。果たして、昨今のソフトウェアを取り巻く環境は「美しく」なったのだろうか。


どういうコードが美しいかは諸説有るし、人それぞれの立場にも依るものだと思うけど、この本ではさまざまなコード例を挙げながら、「この観点で、美しい」が語られている。古い本なので、Perlをはじめとする動的型付が多く出てくるのは時代を写していて興味深い。いまならもっと「型!型!」と書かれているような気もする。

全部で33個のコードに関するエッセイ集であり、一つ一つ別の人が執筆している。なので、一つ一つの章は完全に独立していて、関連はないので、拾い読みにはちょうどよい一冊。ただ、教科書的な網羅はしていないので、その点は(本の厚さも含めて)期待しすぎるとちょっと肩透かしを食うかも。

なお、まつもとゆきひろさんが書かれたRubyの設計に関する章が一番読みやすかったし、理解しやすかった。日本語版向けにリライトされているそうなので、当たり前なんだろうけど。

ちなみに、「継承は美しくないから使わない」なんて話は出てきませんでした:)


原著はKindle版が入手できる。

『入門監視』を読んで、僕らはどんな視点でシステムを"診る”べきなのか、考えてみた

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

  • 作者:Mike Julian
  • 発売日: 2019/01/17
  • メディア: 単行本(ソフトカバー)

よく考えたら、この本を取り上げていなかった。今更だけど、出版から2年経った今でもまったく色褪せていない。


古代、システムの監視の世界はシンプルだった。

データセンタに専用の監視ルームが備え付けられ、24時間365日オペレータがアラートの発生を”目視で”監視していた(もう少し気の効いたシステムならパトランプが備え付けられ、そして鳴りすぎることで頻度が下げられ、「結局何のために設置したのか?」が忘れ去られる)。

エラーは主に死活監視で、インフラにしろ、アプリケーションにしろ、何かがエラーメッセージを吐けば、解析のための情報を手順書に則り収集し、保守メンバへ渡される。

そして、オペレータは、いつ起きるか分からないアラートを逃さないように、監視作業にまた戻っていく。

その繰り返しだ。


システム設計の中でも「監視」と、「移行」は難易度の高い分野の2大巨塔だ。

どちらも定番が無いし、さまざまな設計作業の最終局面においてようやく始められる。そして、設計をはじめる頃には動かせない要件が多すぎて、「目の前にある手段を工夫して、組み合わせて、やる」となりがちになる。

監視のターゲットが「監視を意識して」設計されていることはなかなか無い。

ミドルウェアのマニュアルにエラー監視の方法がきちんと書かれていることは稀で、とにかく「ERROR」とか「ABORT」といった「文字列の出現」を正規表現などを駆使して抽出する。監視が不足していれば追加するし、多すぎれば削除する。とにかく、絶対に最初から「ちょうどよく」ならない。

アプリケーションはなかなかきちんとしたログを出力しないまま異常終了を起こす。そして解析情報が不足していることで、原因の判明に時間がかかる。「間に合わせの」ログが仕込まれることは有るが、役目が終わっても取り除かれることなく蓄積していき、後世の人は目的の分からないログを撮り続ける……


『入門監視』は、そのような過去の監視の苦労を繰り返さないため、そして世の中の環境の変化(インフラ、アプリケーションの複雑化、インターネットサービスがよりビジネスへ直結、SaaS監視ソリューションの充実……)を取り入れるために、さまざまなプラクティスを紹介している。

『入門監視』というタイトルだけど、原題は「practical monitoring」……『実践モニタリング』といった方が適切で、この本を読んだからといってゼロから監視環境が設計できるわけではない。どちらかというと、一度でも監視設計をしたことが有る人がその考え方をアップデートさせるための本とも言える。

この本がなぜ重要なのか、読む価値が有るかといえば、得てして分離し易い「監視対象のアプリケーションを設計する人」「監視対象のインフラを設計する人」「実際に監視をする人」の三つの視点を一冊の中で一気通貫で語っているところ。

(監視ソリューションの入門書は、監視設定の方法は教えてくれても「なにを」監視すべきかまでは教えてくれない)

ビジネス視点、フロントエンド、アプリケーション、サーバ、ネットワーク……何を監視すべきか?を一気通貫で語っていて、どうすればシステム全体が一貫した価値観で監視できるようになるかをコンパクトにまとめている。

監視は、つまりリスク管理であり、システムの挙動の確からしさを可視化するものであり、そこには一貫した戦略が必ず必要になってくる。この本はそれを教えてくれる。自分の役割の、その向こう側を考えるきっかけになる。

監視を必要とする人、監視をする人の価値観を分断させてはいけないのです。


また、この本の特徴としてさまざまなアンチパターンがtipsとして載っていることが挙げられる。アンチパターンだけを読むのは時に危険なのだけど、背景が明確なので、何かのときに思い出すにはちょうど良い粒度だと思う。


あとはSaaS監視ソリューションの導入についてSongmuさんが書かれた付録Cは必読なので、これを読むためだけでも買う価値はあります。


あとそういえばサーバ監視といえば、最近こんな本も出たようです……今度読んでみようっと。

わかばちゃんと学ぶ サーバー監視

わかばちゃんと学ぶ サーバー監視

  • 作者:湊川あい
  • 発売日: 2020/12/22
  • メディア: 単行本(ソフトカバー)

駆け出す前に『コーディングを支える技術』を読んでみるのはどうか

よく初心者向けの定番書籍として『リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)』の名前が上がるけど、『コーディングを支える技術』もなるべく早い時期に読むことをお勧めする1冊だと思う。

この本の冒頭で、技術の学び方には、以下の3つがあると説明している。

  • 比較から学ぶ
  • 歴史から学ぶ
  • 作ることで学ぶ

「作ることで学ぶ」系の本も非常に有効だけど、この本は筆者は「比較から学ぶ」「歴史から学ぶ」に多くページを割いていると書いている。

そう、いろいろな言語を複数比較しながら解説が進むところが良いのだ。現代では、ただ一つの言語だけですべて賄える、という訳にはいかず、さまざまな言語を使っていく必要がある。そしてそれぞれの言語の機能にはそれぞれ由来や思想がある。

プログラミング言語のさまざな機能を例示しながら、「なぜその機能が必要か」「この言語ではどうなっている、なぜそうなっているか」「どうしてそのような機能になってきたか」ということが丁寧に解説されている。

特に「第4章 処理の流れのコントロール」「第5章 関数」「第6章 エラー処理」はしっかり読むことをお勧めする。特に「関数」では「再帰呼び出し」が出てくるので、ここを理解できれば、もう勝ったも同然。

単に特定言語、特定ライブラリの機能を教えられた通りに使うだけより、背景を理解することで機能に対する理解度が格段に理解が上がり、結果として「何故こうなっているのか?」を考える習慣が身につき、「良いコード」が書けるはずだ。

ぜひ駆け出す前に、読んでみよう。


もちろん『リーダブルコード』もお勧めだけどね。

コードの共通化、再利用という言葉の捉え方

noteからの転載

アイキャッチが作りたいと思ったので、作ってみた。


コードの共通化について

想像の共通化

共通なコードが一つにまとまる 二つのコードが有れば、共通化で総量は半分になる

実際の共通化

共通なコードと、それぞれの個別機能が渾然一体となる 二つのコードが有れば、共通化で総量は2割くらい減って、密結合により複雑度は5割増しになる また、未来の機能追加で個別コードが増え続ける

コードの再利用

想像の再利用

元の品質が担保されたコードをそのまま使うので、工数はほぼゼロ

実際の再利用

そもそも再利用の可否を調査するのに工数がかかる 再利用した後の品質保証ポイントが爆発し、工数がかかる 再利用時に、本来は不要なコードが残り、未来の機能追加の足枷となる


最初からそう設計されていればいいけど、あとから共通化や、再利用といったキーワードが出てきたら、たいてい危ないことが多い。

必要なのは、共通化ではなく抽象化、再利用ではなくリファクタリングによるモジュール化だよね。

『Webで使えるmrubyシステムプログラミング入門』は、現場で経験値の高い先輩から指導を受けている錯覚を起こさせる一冊だった!!

この手のミドルウェアプログラミング言語の入門・解説書、ひたすら語り口を優しくしているだけだったり、単にリファレンスをなぞっているかのどちらかで、教科書的な硬さとかが鼻につくんだけど、この『Webで使えるmrubyシステムプログラミング入門』は全然違う。次元が違う。

明らかに、”現場で経験値の高い先輩から指導を受けている”ような錯覚を感じさせる内容、流れになっている。

今後、この手の入門書は全部こんな感じでお願いします(あとは公式リファレンス読むんで!)と言いたくなるくらいの良書。マジで良い。

  • 環境がmacOSを使いつつ実際のプロセスはVirtualBox上のLinuxで進む(ちゃんと両方使う前提になっている)
  • 冒頭でmrubyのビルドの解説をする際に、さらっと「ディスク容量が足りなくなる可能性が有るから、このコマンド叩いて」と実用的なtipsが混ざってくる
  • mrubyのビルドの解説が終わったら、次がシステムプログラミングで必須の「psコマンド」の解説に移り、その次がstraceコマンドによるシステムコールの実行監視の解説へ進む
  • その後、mrubyの本とタイトルに書きつつ、C言語によるシステムプログラミングに移る
  • 一旦C言語に寄り道してからmrubyに再度戻ることで、高級言語であるmrubyを使う便利さを実感させる
  • Apache HTTP Serverへの組み込みを通じて、mruby固有の使い方をしっかり解説する
  • 最後に、「安全なプログラムを書く」と題して”C言語による”安全なコードの書き方を学べる
  • 付録は豊富なデバッグ・計測ツールの解説……まさにベテランの知恵!

つまり、mrubyとだけタイトルに書かれているのに、C言語を使ったシステムプログラミングも学べ、実用的なツール類も学べ、結果的に適材適所としてのmrubyの使い方が学べるようになっている。

マジでこれ実践的な教育の流れに沿っていて、凄い。マジで凄い!!

著者の近藤宇智郎さんに直接指導してもらえる幸せな人はいいけど、そうじゃない人はマジですぐ買って、読んで、コードを動かし、自分のコードを書いた方がいいです。

近藤パイセン、マジぱねぇッス!!


これで学んだら、システムコールを使ったプログラミングを解説する本はいくつか出ているので、そちらに進めばいいと思います。

設計がいつも可視化されているとは、限らない

"意識的に意思決定されたことでなくても、そこに設計が有るんだ、暗黙知として。"

結果的に、たまたまできあがった、明文化されていない仕様は仕様と言えるのか、それは設計と言えるのか、と言えるけど、それがユーザーに見えている挙動である以上は仕様であり、設計なんだ。

でもそれがいつも可視化されているとは限らず、たまたま言われたら、確かにそうかもという話になってしまうんだけど、案外そういうところに大事な要素が詰まっている。