# Clean Architecture 第II部 構造化プログラミング 読書会#4 ###### tags `book` ## 概要 |項目|内容| |-|-| |開催日|2021/02/28| |開始時間|11:00| |終了時間|15:00| |メンバー|niro,nyx| *** ## 構造化プログラミング #### 感想・気づき・疑問 ### nothing P.53 Dijkstra birthed at 1930. :memo:[ダイクストラに関するwikipedia](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%89%E3%82%AC%E3%83%BC%E3%83%BB%E3%83%80%E3%82%A4%E3%82%AF%E3%82%B9%E3%83%88%E3%83%A9)  >オランダ初のプログラマ:memo:since 1952 今から69年前... now, 2021... *** ### 証明 P54 > 些細な詳細を見落とすとプログラムは動く**かのように思える**が、驚くような事で失敗してしまう。 -> 動かないよりも厄介だな・・・ > 分割統治法とは (wikipedia) >分割統治法は、そのままでは解決できない大きな問題を小さな問題に分割し、その全てを解決することで、最終的に最初の問題全体を解決する、という問題解決の手法である。:+1: P55 - 順次: 単純な列挙で証明 - 選択: (if/then/else) 単純な列挙で証明 - 反復: (for/while) 数学的帰納方で証明 :confused: よくわからん *** ### 有害宣言 P55 CACM:Communications of ACM;米国のコンピュータ学会(ACM)が発行する月刊の会誌:memo: [参考ブログ](https://bn.dodgson.org/bn/2010/01/04/) [Wikipedia](https://en.wikipedia.org/wiki/Communications_of_the_ACM) [Official](https://cacm.acm.org/) サイトめちゃくちゃ重い **ダイクストラが送ったレター論文のタイトル** >Go To Statement Considered Hermful.:memo: >GOTO文は有害だと考えられる :memo: P55 >今日の我々は、好むと好まざるとにかかわらず、構造化プログラマである *** ### 機能分割 P56 > 構造化プログラミングは、モジュールを証明可能な単位に帰納的に分割することを可能にする。 >構造化分析:memo: >構造化設計:memo: [wikipedia](https://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0%E5%8C%96%E5%88%86%E6%9E%90%E8%A8%AD%E8%A8%88%E6%8A%80%E6%B3%95) **技法名** >構造化分析設計技法 >SADT、英: Structured Analysis and Design Technique **誕生時期** >SADTは、ダグラス・ロス(英語版)とSofTech,_Inc.(英語版)によって**1969年から1973年の間** 現在のシークエンス図とかアクティビティ図か?:question::confused: シークエンス図とかアクティビティ図の方が歴史が新しいのか?:question::confused: ->UMLの歴史とシークエンス図とかアクティビティ図の歴史は一致するため参考を記載:A: [wikipedia](https://ja.wikipedia.org/wiki/%E7%B5%B1%E4%B8%80%E3%83%A2%E3%83%87%E3%83%AA%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)  *** ### 正式に証明できない P56 ダイクストラにはなぜか証明できなかった。:question::confused: *** ### 救済のための科学 P57 - 数学的証明: (証明可能)真であることを証明する - 科学的証明: (反証可能)真ではないことを証明する:+1: *** ### テスト P57 >**テストはバグが存在しないことではなく、バグが存在することを示すものである**と発言:+1: 想定しうる例外ケースをテストに盛り込むことがとにかく大事と解釈 例えばSQLでリストを取得する際に論理削除を無視する場合に論理削除ありなしの試験を行った試験を行うなどを想起した。 >**最善を尽くしても正しくないことを証明できないことによって、その正しさを明らかにしているのである。** :question:何言っているのかわからない。伝える努力をして。。。:cry::confused: 論理削除なしでもありでも全件とる。 **証明できるとは?** NGの場合->最善を尽くして正しくないことを証明できた。->つまり、正しくない。:cry: NGが無い場合->最善を尽くしても正しくないことを証明できなかった。->つまり、正しい。(暫定):+1::smile: P57 > **「正しくないことの証明」は証明可能なプログラムにしか適用できない。**:+1::question: -> go to 使っていたらテストができねー ->if文の羅列で多くのことができるコードに対してテストすることは実質的には困難とかいう話?しんどい、:cry: **解釈** 証明可能なプログラム->NGパターンがし得るTestコードを作れる状態->**「正しくないことの証明」は可能->証明が適用できる**:question: 証明不可能なプログラム->NGパターンがし得るTestコードを作れない状態>**「正しくないことの証明」は不可能->証明が適用できない**:question: *** ### まとめ P58 >構造化プログラミングの価値を高めるのは、 >反証可能なプログラミングの単位を作成する能力 上記は、 >アーキテクチャレベルにおいて、機能分割がベストプラクティスと考えられている理由:question: **解釈** 反証可能なプログラミングの単位を作成する能力 ->最善を尽くしたTestコードまで存在して、正しくないことを証明できない状態を作成する能力 ->または、最善を尽くしたTestコードまで存在して、正しくないことを証明できる状態を作成する能力 **解釈** >アーキテクチャレベルにおいて、機能分割がベストプラクティスと考えられている理由 ソフトウェアのアーキテクチャ(構造)を、機能分割して統治することがベストなんだなという雰囲気 statementレベルでの話が最初だと思っていたけど、実際はクラス、モジュール、コンポーネントあらゆるレベルで構造化プログラミングの制限を課している。 上記の制限についてと分割の根拠や基準が分かっていない:confused::smile::question: *** ## ふりかえり ### YWT #### Y: やったこと - 第II部 4章 構造化プログラミングまで完了 #### W: わかったこと - 「今日の我々は、好むと好まざるとにかかわらず、構造化プログラマである」ということらしい。 - 構造化プログラミングとTestには密接な関係があるわけではないが重要。 - 順次・選択・反復のみが構造化プログラミングでGOTOが悪という話だと思っていたけどそれ以外にも様々な適用箇所があったりすると知った。 - 私たちはみんな構造化プログラマだけど、構造化プログラムの価値を高めないプログラマと高めるプログラマがいる。その違いは反証可能なプログラムを書けるかどうかにかかっている。価値のない構造化プログラムは構造化されていないプログラムに毛が生えた程度の価値しかない。 #### T: 次にやること - 第II部 5章 オブジェクト指向プログラミングを読む *** ### KPT #### Keep - 事前に書いておくことは時短になり有効 - 事前準備パライムの導入 - 進行の秩序が生まれた。 - 分からないことは分からないので、文章から読み取れることの範囲で十分わかることを分かっていく姿勢 #### Probrem - アーキテクチャの**境界**などの概念を現状放置している状態。 - プログラムをダイクストラにはなぜか証明できなかったのか? - クラス、モジュール、コンポーネントあらゆるレベルで構造化プログラミングの制限しているがその制限のルールはどのようなものか? #### Try - 疑問点のリスト化をしてすぐにアクセスして解消できるような仕組み - KPTを次に持ち越すことで一旦対応 *** ### Fun-Done-Leanrn #### Fun: - a #### Done: - a #### Learn: - a 速度 満足度 進め方
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up