本について
Amazon: https://www.amazon.co.jp/dp/4822284654
題材として選択したのは、「オブジェクト指向でなぜつくるのか-第2版-」という本です。13章で構成されており、今回は第3章について、まとめました。
ゴール
オブジェクト指向プログラミング以前のプログラミング技術で「実現できること」と「実現が難しいこと」がわかる
プログラミング言語の進化
下図はプログラミング言語が機械語からアセンブリ言語、高水準言語、構造化言語へと進化していく歴史を図式化したものです。
以降はそれぞれの言語の特徴や改善された点、課題点という切り口でまとめています。
machine language(機械語)
特徴
- コンピュータが解釈できる2進数もしくは16進数での記述
課題
- 数字の羅列を理解できる極少数のエンジニアしか書けなかった
- 人間にとってわかりづらいため、修正することも非常に困難だった
assembly language(アセンブリ言語)
特徴
- 機械語を人間にも理解できそうな記号で記述する
- アセンブラを使って機械語にコンパイルする
改善された点
- 数字の羅列ではなく、人間にも理解できそうな記号に置き換わったので可読性が向上した
- 間違いが減り、修正も非常に簡単になった
課題
- 専門家でないと読めないレベルの可読性
- コンピュータへの命令をひとつひとつ記述する必要があった
- 命令を少し間違っただけでもコンピュータが暴走した
high-level programming language(高水準言語)
特徴
- より人間が理解しやすい表現形式で記述できる
改善された点
- コンピュータへの命令をひとつひとつ記述する必要がなくなった
- プログラミング言語を知らない学生でも、なんとなく理解できるまで可動性が向上した
課題
- コンピュータの需要がさらに増え、さらなる生産性の向上が求められた(ソフトウェア危機)
- プログラムの可読性を追求するだけでは、生産性を向上することが難しくなってきた
structured programming language(構造化言語)
特徴
- 基本三構造が明示的に記述できる
- GOTO文が使用できない(一部残っている言語もある)
- ローカル変数や引数の値渡しの機能をもつ
改善された点
- 基本三構造が明示的(if文・case文, while文, for文)に記述できるようになり、シンプルな構造でプログラムを実装できる環境が整った
- GOTO文が使用できなくなったことで、プログラムのシンプルな構造を保てるようになった
- ローカル変数や引数の値渡しによりサブルーチンの独立性が強化され、コードを再利用して重複をなくせるようになった
課題点
- 影響範囲が広く、修正が困難にある原因のグローバル変数を完全になくすことはできなかった
- サブルーチンしか再利用できず、その効果は複雑化するアプリケーションの前では微々たるものだった
まとめ
下記がオブジェクト指向プログラミング以前のプログラミング技術でもできることだと思います。
- 基本三構造の明示的な記述できる
- ローカル変数を使用できる
- 引数の値渡しができる
下記がオブジェクト指向プログラミング以前のプログラミング技術では実現が難しいことだと思います。
- グローバル変数をなくすこと
- サブルーチンよりも広い範囲でコードの再利用をすること
所感
私はときどき業務をしていて、うっかり重複するコードを書いてしまうことがあります。プログラミングの生産性を向上するために、コードを再利用して重複をなくす技術ができたにも関わらず、そういった時代背景を逆行することをしてしまっていたのだなと今更ながらに気づかされました。
こういった時代背景や先人の考えを知ったからこそ、「コードの重複をなくすこと」や「人間がわかりやすいコードを書くこと」といった基本的なことに対して、より意識的に取り組めるようになるのかなと感じました。
備考
「基本三構造」や「GOTO文」、「ローカル変数」、「引数の値渡し」などの文言については、別の記事でまとめようと思います。