2024/05/06

「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する

システムアーキテクチャ構築の原理」を読んでる。
平鍋さんの記事「『ソフトウェアシステムアーキテクチャ構築の原理(第2版)』読んだ #Java - Qiita」を読み直して、理解が深まった。
平鍋さんの記事に触発されたので、理解できたことをラフなメモ。
間違っていたら後で直す。

【参考】
『ソフトウェアシステムアーキテクチャ構築の原理(第2版)』読んだ #Java - Qiita

「システムアーキテクチャ構築の原理」の感想: プログラマの思索

【1】「システムアーキテクチャ構築の原理」を読んでいて分かりにくかったことは、ビュー、ビューポイント、パースペクティブという概念が出てきて混乱したこと。
これらの言葉は何を表しているのか、具体的に理解できていなかった。

平鍋さんの記事「『ソフトウェアシステムアーキテクチャ構築の原理(第2版)』読んだ #Java - Qiita」では、概念モデルでまとめてくれているので理解しやすかった。

【2】図4-3.コンテクストにおけるパースペクティブが「システムアーキテクチャ構築の原理」のメッセージを全て表している。
平鍋さんの解説が分かりやすい。

43

(引用抜粋 開始)
「非機能要件がシステムのアーキテクチャに影響を与える」という観点を本書は、この言説を徹底的に解説したもの。

非機能要件に限らず、横断的な視点を「パースペクティブ」として捉えている

実際にアーキテクチャを記述しようとすると、1つの文書ではとっても複雑で巨大な説明になる。「ステークホルダー」の「関心事」毎に分割するために、「ビュー」と「ビューポイント」を導入する

「パースペクティブ」は、従来の言葉で近いものとして「非機能要求」「横断的関心事」がある。本書ではこの「ビューポイント」と「パースペクティブ」のカタログを作っています。
(引用抜粋 開始)

【3】図15-1.ビュー間の関係では、ビューを開発や運用の観点で分解している。
この図は、システム開発とシステム保守で分割すれば理解しやすい。
今ならDevOpsだから、開発も運用も一体化しているだろう。

151

【4】図7-3.アーキテクチャ定義のプロセスは、「システムアーキテクチャ構築の原理」が提唱している、アーキテクチャを定義し評価するプロセス。
アーキテクチャ設計の中で、特に非機能要件を含めた横断的関心事をいかにアーキテクチャに盛り込むのか、を考えた一連のプロセスになる。
プロセスの流れは、アーキテクチャ要素や横断的関心事を段階的詳細化して組み立てたあとにアーキテクチャを評価するので、違和感はない。

73

【5】「システムアーキテクチャ構築の原理」では上記3つの図が本書のメッセージになると思う。
本書のやり方を各システム、各案件にテーラリングして設計、実装する必要があるから、本書は、アーキテクチャ設計のメタ概念、メタプロセスの解説書みたいな感触を持っている。

【6】「システムアーキテクチャ構築の原理」の副題「ITアーキテクトが持つべき3つの思考」が指す「3つ」とは、「ステークホルダー」「ビューポイント」「パースペクティブ」と最初に書かれている。

その意図は、ステークホルダーの横断的関心事、特に非機能要求をユーザ観点のビューポイント、システム観点のパースペクティブで分解して組み立てて、トレードオフを考慮したアーキテクチャを設計すること、を意味していると考える。

他にも気づいた他内容があれば書いていく。

| | コメント (0)

「システムアーキテクチャ構築の原理」の感想

システムアーキテクチャ構築の原理」を読む機会があったので感想をラフなメモ書き。

【参考】
「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する: プログラマの思索

『ソフトウェアシステムアーキテクチャ構築の原理(第2版)』読んだ #Java - Qiita

アーキテクチャ構築の原理 第2版を読んだ - 勘と経験と読経

【0】「システムアーキテクチャ構築の原理」は最新版の第2版もある。
僕は確か、デブサミ2010の時に会場で購入した記憶があり、第1版を持っている。
その時から興味のある部分だけかいつまんで読んでいたので、全部を通して読んでいなかったので、輪読するのは良かった。

システムアーキテクチャ構築の原理」を読んで興味を持った部分はいくつかある。

【1】1つ目は、2008年の初版でありながら、マイクロサービスやサービス志向のアーキテクチャ設計を目指していること。
機能的ビュー、情報ビュー、並行性ビューなどのソフトウェア構造のアーキテクチャ設計の観点は、業務システム設計と微妙に違うな、と感じていたが、実際はクラウドベースのマイクロサービス設計を目指しているのだろう。
実際、並行性ビューでは、昔のバッチ処理設計よりもイベント駆動の並列性アーキテクチャに力点をおいている。
たとえば、REST APIやAdapter・Facadeパターンのようなアーキテクチャ設計を念頭に置いて実装しようとしている。

そう考えると、マイクロサービス設計における新たな設計思想はまだ含まれておらず、荒削りな内容を感じるが、文章の背後にある著者の思い、こういうことを言いたいのではないか、を推測しながら読むと理解できるのでは、と感じる。

【2】2つ目は、ATAMという非機能要件の設計技法を解説してくれている点だ。

データベースコンサルタントのノウハウちょい見せ アーキテクチャをレビューする方法(ATAM)

ATAMはシナリオベースで非機能要件を評価する設計技法。
僕の理解では、システムのアーキテクチャの特に非機能要件を品質特性ごとに分類し詳細化して、それをシナリオに落とす。
そのシナリオを優先度付けして、シナリオベースにアーキテクチャを評価して整合性を取ったり、システム設計を明確化する。

利点は、非機能要件をアーキテクチャとして評価する技法として、シナリオベースを用いているので、アジャイル開発をやっている人には取り組みやすいと思う。
デメリットは、CMMIを作ったSEIがATAMを提唱しているので、重たいプロセスになりがちで、テーラリングが必須であり、プロマネによってばらつきが出やすいこと。

ATAMに関する日本語書籍は「システムアーキテクチャ構築の原理」と「間違いだらけのソフトウェア・アーキテクチャ―非機能要件の開発と評価 (Software Design plus)ぐらいしかないので、貴重だと思う。

データベースコンサルタントのノウハウちょい見せ 書評「間違いだらけのソフトウェア・アーキテクチャ―非機能要件の開発と評価」

【3】3つ目は、2009年頃の書籍なので、UMLをベースとした設計を念頭に置いていること。
機能的ビューではコンポーネント図、情報的ビューではER図やDFDや概念クラス図、並列性ビューではステートマシン図を使うと良いと説明されている。
このあたりの意見は僕も同意するが、注意点はいくつかあると思う。

コンポーネント図は「アジャイルソフトウェア開発の奥義」でも重要視されている。
機能を1つのコンポーネントとみなし、コンポーネント間のインターフェイスを重視する設計は重要だと思う。
一方、コンポーネント図だけでは表現しきれない仕様や要件があり、不十分と感じる。

その点は「システムアーキテクチャ構築の原理」でも、メッセージングのやり取りは記述できないので補足説明や別の図が必要と書かれている。

並列性ビューに出てくるステートマシン図は、より詳しく書いていくと結局、詳細設計レベルになってしまう。
アーキテクチャ設計ではRFPに出てくる要件レベルまでで留めたいので、粒度を揃えるのが難しい場合が多いだろう。

【4】「システムアーキテクチャ構築の原理」を読んでいて思い出すのは、2000年代にソフトウェア・プロダクトラインが流行した頃に読んだ「 実践ソフトウェアアーキテクチャ」に出てくる一節だ。

そのボタンを押したら何が起きるのですか?~アーキテクチャは利害関係者のコミュニケーション手段: プログラマの思索

実践ソフトウェアアーキテクチャの解説記事: プログラマの思索

実践ソフトウェアアーキテクチャ」では、政府のある委員会の2日間に渡る討議の中で、新人のアーキテクトが、政府が作ろうとしているシステムのアーキテクチャをコンサル独自の記法でモデルを描いて委員会の参加者に説明していたところ、委員会の参加者たちは何が問題なのかに初めて気づいた。
そして、委員会の参加者たちは、新人のアーキテクトの説明を途中で止めさせて、システムのアーキテクチャの問題点を活発に議論し始めたという一節だ。
これが意味しているのは、アーキテクトの役割とは、システムのアーキテクチャ設計に関する最終責任者ではなく、各利害関係者の間でシステム要件のトレードオフを考慮させる調停者であることだ。

つまり、アーキテクトの役割はシステム要件を決めることではなく、システム要件のトレードオフを色んなステークホルダーに説明して理解させて、最終的な意思決定を引き出す調停者として振る舞うべきだ、ということ。
この一節は僕が一番好きなところでもある。

システムアーキテクチャ構築の原理」では、アーキテクトがすべてのパースペクティブやビューポイントを理解している全能の神のように思えてしまうが、実際はそうではなく、アカウンタビリティを持つ調停者という観点で捉えると理解しやすいと考える。

気づいた点はまた書き留めていく。

| | コメント (0)

2024/04/21

物理学の各分野の基本思想

最近、物理学の各分野の本を片っ端から読んでいる。
こういう基本的な考え方が分かっていないから、ずっとつまずいていたんだな、と気付きがあった。
自分の気づきをラフにメモしておく。
間違っていたら後で直す。

【参考】
物理学の基本思想とは何なのか: プログラマの思索

【1】電磁気学の基本思想は、マクスウェル方程式の理解にある。
マクスウェル方程式は4つあるけれど、微分形式で表現される法則はわかりにくい。
∇、rot、divなどが出てきて混乱する。
よくわかる電磁気学」「ゼロから学ぶ電磁気学」なども良い本なのだろうが、僕には直観的でなくて受け付けにくかった。

むしろ「高校数学でわかるマクスウェル方程式」で説明されている通り、積分形式でマクスウェル方程式を表現するほうが直観的で理解しやすい。
線積分、面積分が出てくるので慣れも必要だが、微小な線分、面積、体積に対し電流や電場、磁場がどのように変化するか、をぐるっと合計して、最終的に積分すれば、マクスウェル方程式が出てくる。
微分形式は、積分形式のマクスウェル方程式を微小な空間で考えるだけで十分。

マクスウェル方程式が分かれば、ローレンツ力や特殊相対性理論との関係性も計算して導くことができる。
高校数学でわかる相対性理論」で説明してくれている。

【2】解析力学の基本思想は、ラグランジアンとハミルトニアンの理解にある。
特にハミルトニアンが重要。
ハミルトニアンの正準方程式、そして、最終的にはハミルトン・ヤコビの方程式まで出せればいい。
ゼロから学ぶ解析力学」「よくわかる解析力学」を読んで納得した。

【3】流体力学の基本思想では、流線と圧力(揚力)を複素関数で表すことにある。
速度ポテンシャル、流れ関数のいずれも偏微分すれば速度が出てくる。
そこから、オイラーの定理、ベルヌーイの定理、ジッタジェーコフスキーの定理が出てくる。
はじめての解析学 微分、積分から量子力学まで」では、流体力学では流線と圧力の2つの変数を複素関数として表現することで、障害物の流線を表現でき、最終的に飛行機の翼と空気の流れを計算するという流れになる。
高校数学でわかる流体力学 ベルヌーイの定理から翼に働く揚力まで」では、障害物のある流速から揚力が生まれる説明を計算式と一緒に丁寧に説明してくれているので理解しやすい。

【4】量子力学の基本思想は、シュレディンガー方程式の理解にある。
電子の位置を知りたいが、実際は確率でしか分からない。
位置を把握する確率は、確率密度関数で決まる。
確率密度関数は波動関数で表現される。
波動関数はシュレディンガー方程式から導かれる。
はじめての解析学 微分、積分から量子力学まで」では、そういう流れが基本にあって、ハミルトニアンやポアソン括弧、演算子の量子化、飛び飛びのエネルギーが出てくると説明してくれている。
ゼロから学ぶ量子力学 普及版 量子世界への、はじめの一歩」ではその説明をお約束として前提としている。
はじめての解析学 微分、積分から量子力学まで」では、量子力学を解析学が最終的に定式化する説明として、最終的に、シュレディンガー方程式とヒルベルト空間が1対1に対応すること、物理量がエルミート作用素に1対1に対応することを説明してくれている。
ただし、量子力学は奥が深いので、これだけでは不十分。
よくわかる量子力学」で最終的に習得が必要かなと思う。

【5】特殊相対性理論の基本思想は、ローレンツ変換に対し、従来の古典力学の見方とアインシュタインの見方が決定的に異なる点を理解することにある。
ゼロから学ぶ相対性理論」では、ローレンツ収縮の話は古典力学の観点からも出てくるが、アインシュタインの考え方が独創的である点を丁寧に説明してくれている。
また、ミンコフスキー空間の考え方も独特だが、「ゼロから学ぶ相対性理論」では、ローレンツ変換後の座標をへしゃげる(回転させる・少しだけ潰す)という比喩が理解しやすかった。

【6】統計力学の基本思想は、温度・圧力・熱量のようなマクロな物理量とアボカドロ数もの膨大な数の分子の運動を結びつける時にエントロピーが橋渡しする点にある。
ボルツマンの定理がエントロピーと場合の数を橋渡しする。
高校数学でわかるボルツマンの原理―熱力学と統計力学を理解しよう」「ゼロから学ぶ統計力学」の説明が丁寧だった。

【7】物理学の本を読んでみて面白いと気づいた点は、複雑な自然現象を単純なモデルとして構築した後、局所的な変化から微分形式を導き、最終的に公式や物理量を導出すること。
単純なモデルと局所的な変化から微分形式、つまり微分方程式を導く箇所は物理屋特有の直観的な考え方がある。
自然現象はこうあるべきだ、という考え方に基づく。
そして、得られた公式や物理量に対し、単なる数式や数値と思わず、物理的にどんな意味を持つのか、を徹底的に考える所が面白い。
そこに物理屋特有の発想がある。

一方、得られた公式や物理量は理論に過ぎず、実験や観測によって最終的には証明される。
理論と実験・観測のアウフヘーベンによって物理学の体系や基礎づけられて強化されるわけだ。
直感と厳密な計算、根気強い実験という相反する能力が要求されている点が面白いと思った。

| | コメント (0)

Redmineで持ち株管理する事例

Redmineで持ち株管理するツイートを見かけたのでメモ。
単純に面白いなと思った。

Redmineのチケットにそれぞれの持ち株の情報を記載し、ステータスごとにチケットパネルでカンバン風に表示している。
ステータスは、候補、買付注文中、保有中、売却注文中がある。
おそらく、株の候補をリストアップし、ネット証券などで買付し、保有して、配当をもらいながら、最後に売却するという流れなのだろう。

メリットは、ステータスごとに持ち株の状況がわかること。
だが、実際はこれだけは使いづらいだろう。
現在のそれぞれの持ち株の運用損益や評価金額、すべての持ち株のサマリ情報も表示したい。
また、持ち株の運用損益や評価金額の履歴も表示させたい。

すると、ネット証券のAPIを使って持ち株の最新情報を日次で取得し、持ち株チケットに紐づけて、履歴情報を持たせるような仕組みが欲しくなる。
結局、ネット証券会社のアプリの簡易版みたいな機能が欲しくなってくるだろう。
つまり、Redmineのプラグインでそういう仕組みを作りたくなってくるだろう。

ここで、Redmineのチケットは、かんばんやワークフローのようにステータス管理させたい「フロー」の概念と、情報を資産として蓄積させたい「ストック」の概念の2つを持つ。
今回の持ち株の事例は、チケットをストックとして扱う事例に相当するだろう。

チケットはデータでとプロセスの二面性を持つ #redmine: プログラマの思索

Redmineによるチケット駆動開発はストック型プロセスとフロー型プロセスの二面性を持つ: プログラマの思索

Redmineのチケット駆動開発では、チケットに複数の意味を持たせて運用した方が上手く回る: プログラマの思索

こういうアイデアは面白いなと思った。
ちょっとしたデータ管理にRedmineを使ってみる事例は色々集めてみる。


| | コメント (0)

2024/04/14

物理学の基本思想とは何なのか

最近、物理学の書籍を図書館からかなりの数を借りて読んでみた。
物理初心者の感想をラフなメモ書き。

【参考】
物理学を攻略するためのマップ: プログラマの思索

経済数学の直観的方法の感想: プログラマの思索

数学や物理は背景にある思想を知らなければ理解できない: プログラマの思索

量子革命がコンピュータ革命を引き起こした: プログラマの思索

熱力学や電磁気学の設計思想: プログラマの思索

物理学の設計思想には、いくつかの基本的設計があると思う。

【1】1つ目は、物理学では、数式の意味を解釈することが大切であること。
その数式で、物理的現象や物理量を説明できるか?
ゼロから学ぶ相対性理論」に出てくる。

ローレンツ変換と読むがアインシュタイン方程式と呼ばないのはなぜか?
ローレンツもアインシュタインも同じ数式を導いているが、アインシュタインはエーテルなんて存在せず、速度が絶対速度ではなく2つの座標系の相対速度であることを見抜いた。
ローレンツもアインシュタインも同じ数式であるローレンツ変換を扱っているが、物理的解釈が徹底的に異なる。
そこにアインシュタインの独創性が現れている。

よくわかる電磁気学」の通り、マクスウェルの方程式でも、変位電流に気づいた経緯でも、数式の不整合だけでなく、物理的にも磁場が何らかの電流を放出しているはずだ、という考え方があった。
シュレディンガー方程式は電子が波の性質を持つという考え方があった。

いずれも単なる数式ではなく、数式が物理現象をどのように表現するのか、という観点が必要になってくる。

【2】2つ目は、細かく区切って考えるのが物理学の極意ということ。
よくわかる電磁気学」のあとがきに出てくる。
場の考え方、すなわち近接作用が物理学の基本思想だ。
つまり、近接作用を考えると、物理法則は微分形式で表現できる。
微分積分では、微小な線分、面積、体積をイメージすればいい。

微小なdr, dS, dvなどで物理現象を表現できれば、微分方程式が出てきて、微分方程式を解けば全体的な現象を表す関数や運動方程式が出てくる。
一方、「高校数学でわかるマクスウェル方程式」の通り、マクスウェル方程式は積分形式で表現した方が理解しやすい。
なぜならば、高校数学で出てくるアンペールの法則、電磁誘導の法則などは、マクスウェル方程式の積分形式と対応付けて説明しやすいから。
マクスウェル方程式の微分形式は、「高校数学でわかる相対性理論」の通り、非常に小さな空間で積分形式のマクスウェル方程式を適用すれば出てくる。

近接作用の考え方が場の量子論につながることが「よくわかる電磁気学」でも触れられている。

【3】3つ目は、解析力学を制覇すれば、物理学の諸分野を理解しやすくなるメリットがあること。

たとえば、量子力学、統計力学では解析力学の手法に慣れておくと理解しやすくなる。
よくわかる解析力学」では、最後のあとがきで、相対性理論、量子力学、統計力学に解析力学を適用したときの考え方が説明されている。
一般に、原子や分子レベルでは、古典力学では計算が煩雑になったり、より深く考えにくい。
そこで、解析力学のアプローチを使って、何らかの物理量を最小化したり不変にする前提から運動方程式や保存量を導く。

そこで、相対性理論、量子力学、統計力学に出てくる解析力学のツールが違うならば、それぞれの分野ごとに必要な解析力学のツールを説明した本があれば、解析力学に深入りせずに、本来やりたい分野の勉強に注力できるだろう。
たとえば、量子力学に必要な解析力学のツールだけ理解したいなら、「量子力学を学ぶための解析力学入門 増補第2版」が良いらしい。
ただし、実際に読んでみたら完全に専門書なので、ある程度解析力学の知識がある前提で読み進む必要があると感じた。

ここで、物理学では不変量が大切になる。
不変量は何らかの意味ある物理量を表す。
エネルギー保存則、運動量保存則もそうだ。
だから、物理学ではラグランジアンよりもハミルトニアンが重視されるのではないかと思う。

経済数学の直観的方法 マクロ経済学編」では、経済学の目的は「リソースを最適化する(経済政策や戦略により全体費用を最小化する)」ことにあるのでラグランジアンを多用する。
一方、物理学の目的は「物理量を一定に保つ運動や保存則を見つける」ことなのでハミルトニアンを多用する、と説明があったが、まさにその通りと思う。

解析力学では、物理量を最小にするのがラグランジアン、物理量を不変にするのがハミルトニアンと考える。
しかし、解析力学は難しいと感じる。
解析力学が難しい理由は2つあると思う。
1つは、ラグランジアンやハミルトニアンが導出する方程式や数式の物理的意味を理解しづらいこと。
L=T-U、H=T+Uにはこういう物理的意味があるとどの本でも詳しく説明してくれるが、どうしても天下り的な説明になりがちで、初心者は納得しづらい。

最小作用の原理はどこからくるか? - 物理Tipsにも書いているように、「最小になるようなもんを探したらこれになる」と結局理解するしかないと思う。

もう1つは、たとえば、説明をオイラー・ラグランジュ方程式のように、座標をq、1次微分をqドットのように表現しているので、数式そのものが扱いづらいこと。
オイラー・ラグランジュ方程式は3次元座標x,y,zの微分方程式だから、本来は3つの方程式を書き出さないといけない。
しかし、似たような形の微分方程式を3回書き下すのは面倒だから、頭の偉い人が、x,y,zはq1,q2,q3で書いてしまって、まとめてqにしてしまいましょう、と考えた、とみなせばいい。
そんな説明が「ゼロから学ぶ解析力学」に書かれていて納得した。

個人的には、「ゼロから学ぶ解析力学」が解析力学の取っ掛かりの理解に役立った。
理由は、解析力学のラグランジアンやハミルトニアンがきれいに書かれた公式になる以前に、泥臭い数式や計算を見せて説明してくれているから。

たとえば、「ゼロから学ぶ解析力学」では、最後のあとがきに、ゼロから学ぶという条件のもとにレギュレーション(執筆ルール)を筆者に課した。
一般座標q_iを書かずに普通の座標x,y,zで書ける所まで微分方程式や計算をすべて書いたり、「∂L/∂θドット」とは書かずに「∂L/∂v_θ」と書くなどしている。

実際、オイラー・ラグランジュ方程式も、一般座標qや∂L/∂qドットではなく、3次元座標x,y,zと∂L/∂v_x,∂L/∂v_y,∂L/∂v_zで3つの方程式をすべて書き出してくれている。
それら3つの方程式は略記号により、1つの方程式で最終的にはきれいに書かれるわけなので、こういう泥臭い理解が最初は必要なのだろうと思う。

【4】物理学で理解した内容はまとめておこうと思う。

| | コメント (0)

«「スクラムの拡張による組織づくり」のScrum@Scaleの感想