文系高卒エンジニアのコンピュータサイエンス独学備忘録
文系高卒の駆け出しひよっこエンジニアがコンピュータサイエンスを独学し, その備忘録として記事を書いていく.
アルゴリズム
アルゴリズムって単語を聞いて, 頭の中で何となくのイメージを持つこはできるが, 言語化できない人は意外と多いと思う. 自分もそうだった.
アルゴリズムとは, 何か物事をするときの手順を示したもの, というざっくりとした認識でOKだと個人的には思っている.
料理のレシピや目的地への行き方などが, 非エンジニアの方でもわかりやすい例えになるのかな.
古代ギリシャの数学者, ユークリッドによって発見された2つの正の整数の最大公約数を求めるアルゴリズムは有名だろう.
Javaで書くと以下のようになる.
public class EuclideanAlgorithm {
public static int gcd(int a, int b) {
while (b != 0) {
int t = b;
b = a % b;
a = t;
}
return a;
}
public static void main(String[] args) {
int result = gcd(48, 18);
System.out.println("GCD is: " + result); // GCD is: 6
}
}
上記は, ループを使ったユークリッドのアルゴリズムの実装である.
このアルゴリズムは, aをbで割って, 余りをrとする. rが0になるまでaとbの徐算を繰り返す…というものである.
一応, コードの説明としては, 仮にaが10でbが8として, tに8が入り, a÷bの余りがbに入り, aにはt(8)が入る. このwhile文はbが0になるまで続くので, もう一度, 今度はbに2が入る(10÷8の余り). tに2が入り, aは10のままで再びa÷bをする(10÷2). aにはt(2)が入り, a÷bの余りが0になったので, return処理としてa(2)を返して終了となる.
つまり, 10と8の最大公約数は2となる.
エイダ・ラブレス
プログラマーは技術職の中でもギークなメンズが多い印象で, 今でも男性比率は高いが, 世界初のプログラマーがエイダ・ラブレスという女性数学者だったということには少しびっくり.
エイダのコンピュータ科学への貢献の始まりは, チャールズ・バベッジの階差機関の設計に関して議論したフランス語の論文を英語に翻訳したことだそうだ.
詳しくはこの記事を読んでほしい.
抽象化
抽象化という概念は, コンピュータサイエンスとシステム設計の隅々にまで及んでいるので, ぜひ知っておいてほしい. これからプログラミングを学ぶ予定の人は, オブジェクト指向(OOP)について理解することになるだろう. OOPを知る上でも, 抽象化の理解は役に立つ.
抽象化とは, 情報やオブジェクト(モノ)の複雑な内部構造は外から隠し, 必要でわかりやすい部分のみを露出させるプロセスのことである.
これによって利用者が簡単にそれを理解して使用することが可能になる.
わかりやすい例が, 車だろう. エンジンの内部構造を知らずとも, アクセルを踏めば車は走るしブレーキを踏めば止まる. ここでいうアクセルやブレーキをインターフェースとして, 何をどうすれば車が走って止まるのかを直感的にわかりやすくしており, それがどういう理屈でそうなっているのかを, 利用者が知る必要は, 一部の車オタクを除いてほとんど無いだろう.
今回はここまで.
この記事が気に入ったらサポートをしてみませんか?