こんにちは。社会人2年目、株式会社ROBOT PAYMENTの小林です。
取り組んでいる開発のレベルが1年目と比べて非常に上がっており、自分自身の成長を実感しています。
新しい技術や複雑なシステムにも挑戦できるようになり、エンジニアとしてのスキルが着実に向上していると感じます。
今回は、「システム開発と数学の関わり」について深く考えてみたいと思います。
普段の生活の中で「数学が役に立っている!」と明確に感じる場面はそれほど多くないかもしれません。
しかし、日々の開発業務においては、数学の知識や考え方が非常に役立っていると実感しています。
数学は抽象的で難解だと思われがちですが、その中にはシステム開発に直接応用できる概念や法則が数多く存在します。 そこで、システム開発を通じて実際に役立った数学の概念について、 具体的な例を交えながら振り返ってみたいと思います。
1. 集合
集合とは、特定の条件を満たす要素(オブジェクト、数、記号など)の集まりのことを指します。
たとえば、1, 2, 3 からなる集合は {1, 2, 3}と表現できます。
集合論の中でも、システム開発で非常に役に立つものが、「ド・モルガンの法則」です。
この法則は、論理演算における否定の分配に関する重要な法則で、条件式の変形や最適化に活用できます。
例えば、既存のコードを読むときに「ド・モルガンの法則」が非常に役に立ちます。
以下のようなコードがあったとします。
int number = 2; int key = 2; if (!(number == 1 | key == 2)) { Console.WriteLine("Check passed"); } else { Console.WriteLine("Check failed"); }
このコードは、一見すると理解しにくいかもしれません。
しかし、ド・モルガンの法則を適用すると、以下のように書き換えられます。
int number = 2; int key = 2; if (number != 1 & key != 2) { Console.WriteLine("Check passed"); } else { Console.WriteLine("Check failed"); }
※条件付き論理演算子の場合には「短絡評価」があるため注意が必要です。
「適用前」と「適用後」では、条件式の見た目が大きく変わります。
Not (A∪B)
がNot(A) ∩ Not(B)
になったことで、
AとBそれぞれの値がどうなるかに絞って考えやすくなりました。
これにより、条件式の可読性が向上したと思います。
このように「ド・モルガンの法則」を理解することで、
コードの意味を正確かつ効率的に把握することができるようになります。
また、条件式の最適化やリファクタリングにも応用できるため、開発効率の向上にもつながります。
2. 場合の数
場合の数とは、ある事象が起こる全ての可能な組み合わせやパターンを数えるための数学的な概念です。
特に「順列・組み合わせ」は、システム開発やテスト設計において非常に役立ちます。
テスト手順を考えるとき、全てのパターンを網羅することは品質保証の観点から重要です。
例えば、以下のような設定ができる画面の見た目をテストするとします。
1. ダークモード(ON / OFF)
2. フォントサイズ(普通 / 大きめ)
3. アニメーション(有り / 無し)
つまり、以下の8つのパターンをテストする必要があります。
- ダークモードON、フォントサイズ普通、アニメーション有り
- ダークモードON、フォントサイズ普通、アニメーション無し
- ダークモードON、フォントサイズ大きめ、アニメーション有り
- ダークモードON、フォントサイズ大きめ、アニメーション無し
- ダークモードOFF、フォントサイズ普通、アニメーション有り
- ダークモードOFF、フォントサイズ普通、アニメーション無し
- ダークモードOFF、フォントサイズ大きめ、アニメーション有り
- ダークモードOFF、フォントサイズ大きめ、アニメーション無し
テストケースをすべて網羅するためには、これらの組み合わせを漏れなく列挙することが必要です。
場合の数の概念を理解していると、効率的にテストケースを作成でき、テスト漏れを防ぐことができます。
場合の数の理解によって、テスト設計の質と効率を向上させることができ、 結果としてシステムの品質向上に貢献できます。
最後に
システム開発では、意外と数学が役立つことが多いです。 数学を学んだからといって、すぐに業務に直結するわけではないかもしれませんが、 それでも数学の考え方は非常に役に立ちます。
これからもできる範囲で数学をキャッチアップしていきたいと思います。
個人的には、もう少し微積分の理解を深めて、より高度なアルゴリズムや解析にも挑戦してみたいです。
また、確率論や統計学などもデータ分析の分野で重要になるため、学んでいきたいと思います。
これからも学びを続け、エンジニアとしてさらに成長していきたいと思います。
We are hiring!!
ROBOT PAYMENTでは一緒に働く仲間を募集しています!!!