コンピュータサイエンスを学習できる記事をまとめました。このページから関連する記事にアクセスできます。
日本語では情報工学と言って、コンピュータに関する基礎知識です。たぶん、情報系の大学や専門学校で習います。
正直、現代のコンピュータはプログラミングを含めて難易度が下がってるので、この辺の知識が無くても普通に生きていけます。
では、なぜ学ぶのでしょうか。それは単に知ってることで有利な場面が多いからです。
理解できなくても1回学ぶと記憶に残ります。何も知らないゼロよりも価値があるとは思いませんか?
深く知らなくても知識は役に立つよね。
何事も広く浅く知る。そんな人間になりたい。
入門
デジタルとアナログの意味を考えたことはありますか? この2つはコンピュータを理解する上でとても大切です。ここでは両者の違いと、メリット・デメリットを解説します。 アナログ (analog) とは? 連続した量を他の連続した量で表示すること。 Wikipedia contributors. (2024, January 31). アナログ. In Wikipedia. Retrieved 15:32, March 18, 2024, from https://ja.wikipe...
日々お世話になるコンピュータ、搭載されてる装置の理解は大切です。ここではパソコンに限定して、知っておくべき主要な装置を学習しましょう。 スマホとかも同じ仕組みなの? うん。呼び方は違ったりするけど原理は同じだからね。ただ、利用されるメーカーとか部品は全然違うよ。 CPU (Central Processing Unit) 演算処理を司るコンピュータの頭脳的な装置で、全ての命令はここで実行されます。要はこの装置が無いとコンピュータとして機能しません。コンピュータの性能は...
コンピュータを構成するのはハードウェアだけではありません。ハードウェアとソフトウェアを組み合わせることでコンピュータとして機能します。 そしてソフトウェアも様々な種類に分類され、機能に応じて役割が存在します。ここではどんなソフトウェアがあるのか学習しましょう。 スマホとかも同じ? もちろん。ただし、今回はパソコンに限った内容で説明するね。 Firmware (ファームウェア) ハードウェアに最も近い位置に存在するプログラムで、どんなデバイスにも必ず存在します。デ...
アプリケーションには大きく2つのインターフェイスが使われます。そもそもインターフェイスとは何か。GUIやCUI/CLIって何か。これらについて学習しましょう。 Interface (インターフェイス) エンジニアになると頻繁に聞く単語です。これは、ある要素がお互いに情報をやり取りする仕組みを指します。例として、2人の人物にAさんとBさんが居ます。この時、AさんがBさんに何か依頼したいと思ったらどうしますか? 言葉とか文章で伝えます。 そう。その言葉とか文章がインターフェ...
基礎
ここではコンピュータでも利用される数値の表現方法を学習しましょう。 数値の表現方法に2進数と16進数と呼ばれる仕組みがあります。これは2進数なら0と1のみ、16進数なら0から15の数値で数を表現する方法です。 全く分かりません。 難しく考えなくて大丈夫だよ。まずn進数という仕組みを理解しようね。 n進数の概念 身近に使ってる表現に10進数があります。これは1, 2, 3 . . .と数えて10になったら桁が上がる仕組みです。 じゃあ、2進...
ここでは2進数と16進数と10進数の相互変換を学びます。n進数を理解できてない人は、こちらを参考にしてください。 2進数を10進数に変換する方法 これは全てのn進数に言える理論です。まずn進数の桁上りについて考えてみましょう。n進数において桁が上がると言うことは、小さい位で表現できなくなったので、次の位を+1して、元の位を再度0から始めることです。これは下位桁の数値が全て上位桁に加算されたことを意味します。 何も分かりませんでした。 10進数で考えると簡単だよ。...
ここでは小数点を含む数値を2進数で表現する方法を学びましょう。小数点以外はこちらの記事で解説してるので、不明な方はどうぞ。 小数を含む2進数を10進数に変換する方法 そもそも小数とは何でしょうか。まずは10進数で考えてみましょう。 0.25ってどんな数字? 桁の概念を使って考えてみよう。 (1 x 0) + (0.1 x 2) + (0.01 x 5)です。 その通り。0以下の桁はマイナスの乗数を使うんだ。2進数も同じだよ。 小数を...
2進数も10進数と同様に四則演算ができます。と言うより、数字に変わりないので16進数でも可能です。ここでは2進数の四則演算について学習しましょう。正直、ごく稀に使う足し算と引き算ができれば十分です。 2進数の足し算 10進数と変わらず桁上りが発生したら上位桁を加算します。 2進数の引き算 上位桁から借りるのが2になるだけで普通に引き算できます。 2進数の掛け算 10進数と同じです。 2進数の割り算 こ...
コンピュータの世界にも基礎単位が存在します。それがbit(ビット)とbyte(バイト)です。ここではコンピュータで使われる単位について理解しましょう。 bit (ビット) bitはコンピュータの世界の最小単位です。そしてbitは0か1の2種類の値しか表現しません。この時の1の状態をON、0の時をOFFと呼びます。他にもbitが立つまたは落ちる等の表現もあります。 POINTbitは0か1の値しか表現しない。 byte (バイト) byteはbitが8個集まった状態を...
コンピュータと2進数には深い関係があります。それはどんな関係なのでしょうか。 これまで2進数や単位の話をしたけど何か気が付くことない? bitの1桁が2進数で表現できます。 そう。2種類の状態しか表現できないbitは2進数と相性がいいんだ。実のところコンピュータは0か1でしか物事を扱えず、表示されてる文字や画像、再生してる音楽も全て0と1の集合だよ。 ちょっと信じられない。 最初は理解できないけど、実際には0と1があれば全て表現できるんだ。ここではコンピュータと2進数の関...
64bitや32bitという言葉を聞いたことがあるかもしれません。今回はこれが何を意味するのか、学習していきましょう。 64bitや32bitの意味 この数字は1回に扱える情報量を意味し、64bitなら2の64乗の情報が扱えます。具体的な数字を示すなら、次のようになりますね。 とんでもない大きさですね。本当に64bitも必要なんですか? 必要だよ。それをハードウェアとソフトウェアの両方から説明するから聞いてね。 ハードウェアとの関係 CPU...
コンピュータにはbit単位、つまり0と1だけで演算するbit演算が存在します。それがどんな演算なのか、今回は実用例も交えて学習しましょう。 ちなみにbit単位で演算すると言っても、実際にはbyte単位で処理されます。その場合は複数のbitを計算することになりますが、常に同じ桁同士をbit演算すると覚えれば大丈夫です。 よく分からないけど分かりました。 後に説明するANDとかORの時にこの話を思い出して欲しいな。 論理演算とbitシフト bit演算は、bit単位で...
前回の説明でbit演算を解説しました。その中のシフト演算について、伝えるべき特性があるので番外編として紹介します。別枠の理由は記事が長くなるのと、知っておくべき知識だけど使う必要はないからです。なお、前回の記事は以下です。 シフト演算すると何が起きる? ある数値をシフト演算すると何が起きるのでしょうか。論理シフトを例に考えてみましょう。ただし、この時に1のbitがはみ出る場合はシフト自体が不可能とルール決めします。 1の場所に注目しよう。何が気が付かな...
ファイルやフォルダを当たり前に使ってると思いますが、プログラミングする場合はもう少し知識が必要になります。OSの努力により、ほぼ隠されて存在が見えませんが、それらは必要な知識です。ここで隠されてる知識を学びましょう。 階層型ファイル構造 意識したことがあるかは分かりませんが、ファイルやフォルダは階層構造で管理されます。簡単な画像を用意したのでどうぞ。そして、このような構造は木構造(tree)と言います。 ディレクトリ (directory) ファイルまたは...
ファイルとは何でしょうか。エンジニアになるならファイルへの理解は必須です。ここでは何気なく使ってるファイルについて、より知識を深めましょう。 ファイルの概念 そもそもファイルとは何でしょうか。以前から話してる通りコンピュータは0と1しか扱えません。がっ、そんな0と1の集合を人間が理解するのは不可能です。そうなると対策が必要ですよね。これを解決してくれるのがファイルの概念です。このおかげで我々はデータを簡単に扱えます。 画像とか音楽もファイルですよね。これも0と1の集合ですか?...
ディレクトリとファイルには必ずパスが存在します。今回はそんなパスについて理解を深めましょう。 パス (Path) の概念 ディレクトリまたはファイルの存在する場所を指し示す文字列です。全てのディレクトリとファイルは必ず1つのパスを所有し、同一のパスを共有することはありません。 ここでは解説しませんが、リンクという仕組みを使うとパスを増やせます。興味ある人はシンボリックリンクとか調べてみてください。 区切り文字 ディレクトリやファイルの区切り文字はバッ...
初級
コンピュータは0と1しか理解できません。では、どうやって様々なデータを表現するのでしょうか。それを理解する前にコンピュータが数値を扱う仕組みを知っておきましょう。 と本題に入る前にひとつ。ここでの話題は初心者には難しいと思います。特に後半の話は理解が難しく、それが挫折に繋がるかもしれません。 でも大丈夫! これを知らなくてもエンジニアになれます。良いか悪いか現代のプログラムはこの辺を知らなくても作れます。実際に僕も専門学校で学んだ時は1ミリも理解できませんでした。難しかったら先に進み、また学...
0と1しか理解できないコンピュータ。では、どうやって文字や画像を表現するのでしょうか。ここでは最も簡単な文字の表現を学びましょう。 文字の表現方法 理論の話となるので、ここでは色々と簡略化して説明します。こんな文字は存在しませんが、大文字のAからZのみ、合計26文字だけで構成された文字を例にしましょう。 この文字を使って"LISA"を表現したい場合はどうしたらいいと思う? ヒントとか無いんですか? コンピュータは0と1しか分からないって常に考えることかな。 ...
コンピュータが複数個のbyteを扱う場合、そのbyteを並べる順番にルールがあります。これはバイトオーダ(byte order)とも呼ばれていて、大切な知識になります。 エンディアン (endian) の概念 2byte以上から構成される数値を並べる時、そのbyteを最上位から並べるか最下位から並べるかのルールです。よくメモリにデータを配置する場合を例に説明されてますが、あくまでルールなので、メモリに限った話ではありません。また、1byteのデータを扱ってる分には関係なく、2byte...
プログラムで絶対に利用する変数、これをコンピュータサイエンスの視点から理解しましょう。汎用的な知識を得ることで、どのプログラミング言語を学ぶ時でも役に立ちますよ。 変数 (variable) の概念 その名前の通りで変化する数です。プログラムを作る時、全ての値が最初から決まってる訳ではないですよね?例えばユーザーが何かしらの入力をしたとして、それを保存する場所がなければ利用できません。そういった願いを叶えてくれるのが変数です。 変数とメモリの関係 最初にメモリの仕組みを理...
プログラムで利用する便利な配列、これをコンピュータサイエンスの視点から理解しましょう。汎用的な知識を得ることで、効率のいいコードが書けたり、別のプログラミング言語を学ぶ時の役に立ちます。 配列 (array) の概念 配列は変数の集合です。例えばユーザー4人の年齢を管理する場合、変数を4つ用意しても実現できますが、それでは使い勝手が悪いです。なので1つだけ変数を作ってアドレス値を管理、そのアドレス値を起点に複数個のデータを管理するのが配列です。 配列とメモリの関係 変数と...
プログラムで利用するリスト構造、これをコンピュータサイエンスの視点から理解しましょう。汎用的な知識を得ることで、効率のいいコードが書けたり、別のプログラミング言語を学ぶ時の役に立ちます。 リスト (list) の概念 リストも配列と同じく複数個のデータを扱えますが実体は大きく異なります。根本的に違うのはメモリ上に連続して確保されないことでしょう。これがリストの大きな特徴になり、配列と比べてメリットもあればデメリットも存在します。では、それらについて順番に理解しましょう。 リスト...
プログラムで利用するスタックとキュー、これをコンピュータサイエンスの視点から理解しましょう。汎用的な知識を得ることで、効率のいいコードが書けたり、別のプログラミング言語を学ぶ時の役に立ちます。 スタック (stack) データ構造の1つで、リストと同じく要素数が可変するコレクションです。そしてスタックの特徴は要素の格納と取り出しにあります。 具体的には、要素を順番に格納するけど、取り出す時は最後に格納した要素から取り出します。この仕組みをLIFO(Last-In First-O...