コンピュータ、プログラムとは

in  CS, Algorithm, Python

独学でコンピュータサイエンスの勉強をしたくてPythonプログラミングイントロダクション第二版を購入しました。全24章、学んだことをBlogにまとめていきながら読み進めていきます。

この本はMIT(マサチューセッツ工科大学)の講義に基づいているもので、プログラミング、アルゴリズムの基礎、さらに流行りのデータサイエンスにも触れられるようです。

まずは1章からみていきます。

第1章 さあ、始めよう

コンピュータが何をするものかから簡単に説明しつつ、コンピュータ上で動作するプログラミング言語がどういったものなのかを簡単に説明しています。

試行錯誤法(guess-and-check algorithm)

アルゴリズムの説明を料理のレシピにたとえつつ、アルゴリズムの一例として試行錯誤法が挙げられていました。 例として挙げていたのは25の平方根を求めるプログラムです。 ポイントは、推定値を実際に二乗した値との差を評価しながら、推定値を (g + x / g) / 2 で更新し試行錯誤していく点です。 実際に二乗した値との誤差がある程度縮まればその値を採用するアルゴリズムです。

下記はPythonの例で、推定値の二乗との誤差が1より小さくなった際にその値を採用するようにしました。

1
2
3
4
5
6
7
x = 25
g = 3

while abs(x - g * g) > 1:
    g = (g + x / g) / 2

return g

プログラミング言語における意味論

意味論についても簡単に触れています。論理学でも学んだことがありますが、Pythonの例と対比されていて非常にわかりやすかったです。 プログラミング言語の構成要素からそれぞれの構成要素の説明がされている箇所です。

プログラミング言語は下記で構成されます。

  • 基本構成要素
  • 文法
  • 静的意味論(static semantics)
  • 意味論(semantics)

上記の構成要素について、リテラルや簡単な式を例に説明されています。

名称説明
基本構成要素3.2, ‘abc’ のようなリテラルや + / のような2項演算子
文法基本構成要素の並び 3.2 + 3.1
静的意味論(static semantics)文法的には正しい並びが意味を持つかどうか。 2.2 / ‘abc’ は並びは正しいが数字を文字列で割っても意味をなさない。Pythonでは実行時エラー。
意味論(semantics)文法的、静的意味論として正しい時に「意味」を関連づける

プログラムが実行でき意味を持っても、プログラマの意図通りかはまた別の話ですね。

まとめ

第1章ではコンピューターとプログラム、簡単なアルゴリズムの紹介がされていました。 上記の意味論の他に停止問題やチューリング完全にも軽く触れていましたが、本当に軽くです。これについては別の書籍で勉強していこうと思います。


Share