![見出し画像](https://assets.st-note.com/production/uploads/images/22028899/rectangle_large_type_2_c1bf8f853f30d696f5f5f2a888fb933b.jpg?width=1200)
【3章~4章】プログラムは証明するために小さく分割する!@Clean Architectureを読んで学んだことメモ
どうも、たかふみです。
前回に続き、今日は「第3章〜第4章」です。
※注:僕は初めてアーキテクチャの本を読んでいます。そのため、記載内容には間違いがある可能性があります。「これは違うのでは?」などあるとコメントで頂けるとすごく助かります!
3章:パラダイムの概要
![画像1](https://assets.st-note.com/production/uploads/images/22028611/picture_pc_a39532ef77298303111ce6ccc281447f.png?width=1200)
プログラミングをする際には3つの縛りがあり、これらによって我々がプログラミングをする際に"何をすべきではないか"ということが表現されています。(*1)
この後の章でそれぞれの縛りについて説明されています。
*1:本書では「パラダイムはプログラミングで何をすべきではないかを伝えている」と言う考えから、本記事ではパラダイムを縛りと表現しています。
4章:構造化プログラミング
![画像2](https://assets.st-note.com/production/uploads/images/22028626/picture_pc_c85beeb841409f22e3862e8d7b14c31f.png?width=1200)
まず、テストはバグを見つけるために実行するものです。
そのため、テストによってプログラムが正しく動くということは証明できませんが「テストが問題無い=プログラムは正しく動作していないということを証明できない」ということになり、プログラムには問題が無いとみなすことができる、ということになります。
ここで、この証明をするにはプログラム自体が証明可能なプログラムであるという前提が必要になります。そのためにプログラムを分割する必要があります。
■ソフトウェア開発は数学ではなく、科学である
本章では、数学と科学について書かれています。
数学は証明可能な主張を真であると証明する学問であり、
科学は証明可能な主張を偽であると証明する学問であると言えるだろう。
引用:Clean Architecture P57
つまり、数学は真であることの証明を目指し、科学は偽であることの証明を目指すということです。
実験を繰り返すことで同じ現象を見ることができる、偽であることが証明できないのであれば十分に真とみなすことができる、という科学。テストも同じで、不具合を見つけることを目指して行うが、不具合があるということを証明できないのであれば、十分に問題なく動作するとみなすことができる。
■おわり
「プログラム=数学」という印象が強かったため、科学が出てきたのは驚きでした。「偽でないことを証明できなければ真とみなす」という考え方は覚えておきたいです。
それでは!
いいなと思ったら応援しよう!
![たかふみ | Webエンジニア](https://assets.st-note.com/production/uploads/images/128369411/profile_a3c853c9135f56b75d4c1df8ae5ffefe.png?width=600&crop=1:1,smart)