KENスクールブログ | パソコン教室・パソコン講座なら個別指導のKENスクール

BLOGKENスクールブログ

  1. KENスクール TOP >
  2. KENスクールブログ > プログラム > 良いプログラムの基礎にある考え方について

プログラム

良いプログラムの基礎にある考え方について

プログラミングの世界は非常に裾野が広く、勉強する内容も膨大です。さらに流行り廃りも多く、何を学習すれば効率が良いのかということは常にプログラミング学習者の悩みのタネでしょう。
そこで今回はどの時代であっても、どんな言語を使うにしても、知っておけばプログラムの品質を向上させられるポイントについて紹介いたします。

ここで紹介するポイントは、プログラミングに留まらず多くの問題解決手法とも関係の深い内容ですので、身の回りの様々な問題の発見および問題解決にも応用ができるでしょう。
システムの設計をしたりExcelで帳票を作ったりといった、プログラミング以外の業務にも役立つかと思います。なお、記事の最後にここで紹介するポイントと特に関連の深い情報処理分野における関連書籍を紹介しています。
プログラミングをする際の指針がわからない、システム設計などがなかなかうまくいかない、開発手法の理解が進まないといった方は是非読んでみてください。

ポイント紹介

1.小さく作る、分割する

プログラムを書くときはできるだけ小さく作って、それを小さいままに保っておくようにしましょう。また、複雑で大きなものは小さな単位に分割して考えるようにしましょう。大きく複雑なものをそのまま作ろうとすると、多大な労力がかかりますし時間もかかります。
さらに後でそのプログラムを見直す時も大変です。小さく作ればメンテナンス時に内容を把握するのも簡単ですし、そのプログラムを別のプログラムの部品として再利用するのも簡単です。実のところ、小さく作る・物事を小さく分割して考えるということはこの後に述べるポイント全てに通用する考え方であるといえます。

2.役割を一つにしぼる、シンプルにする

モジュールを作るときは、一つの機能だけに限定して作るようにしましょう。一つのモジュールでなんでもこなすような多機能なものにしてしまうことは一見便利そうですが往々にして良くない結果につながります。例えばプログラムが複雑になってしまい、内容の把握が大変になることが挙げられます。
結果としてメンテナンス性が低下するばかりか、部品としての汎用性が低下して再利用がしにくくなり、開発効率が下がります。多機能なものを作るときは一つのモジュールでそれを実現しようとするのではなく、単機能を提供するシンプルなモジュールを複数組み合わせて実現するようにしましょう。

3.早めに試作する

新しいソフトウェアを作り出すにあたっては、設計にこだわりすぎず早め早めに試作しましょう。実際、ソフトウェアにおける完璧な設計というものは原則として存在しません。潜在的なバグや仕様の変更等、ソフトウェアの変更を余儀なくさせる物事はたくさんあります。
リリースした形のままずっと使い続けることはなかなか難しいのです。それはWindows10におけるWindowsUpdateなどからもわかるでしょう。本質的にソフトウェアは複雑なもので、人間が神のように全てを見通せない以上、ある時点での完成(リリース)はあっても真の意味での完成はないわけです。

よって試作を繰り返して生じる問題を少しずつ解決させながら作ることが結果として早く効率的に作ることにつながります。こうした考え方は古くはUNIXで、近年ではアジャイル開発やテスト駆動開発などに活かされています。

4.完成された部品を再利用する、メンテナンス性(または移植性)を意識する

ソースコードを書くときはロジックがわかりやすく、読みやすく書くことを心がけましょう。同じ動作をするのであれば、独自に作ったコードで処理は早いが複雑で理解が難しいものより、公開されているシンプルで簡単に理解ができるコードの方が一部の例外を除いて望ましいです。
これはデータ保存の形式などにも言えます。わざわざ独自に作ったバイナリなどで保存せず、一般的によく使われているJSONなどを使う方がメンテナンス性の向上につながります。なんでもかんでも一からつくってしまうようなこと、いわゆる「車輪の再発明」をすることがないようにしましょう。

5.抽象に依存させる

何かのモジュールに依存するプログラムを書くときは直接その機能を利用するのではなく、使いたい機能をインターフェース(ある機能の操作方法と生じる結果だけを処理の実装なしにまとめたもの)として抽象化し、利用するようにしましょう。
複雑で巨大なシステムは多くのモジュールで構成され、互いに依存しあいます。そうした中、各モジュールが密接に結びついてしまっている(実行するインスタンスの中で直接別クラスのインスタンス化をする等)とバグの発見や仕様変更への対応がとても大変なものとなります。
例え、各モジュールを前述のポイントに基づいて役割を限定して小さく作っていたとしても、依存しているモジュール全てをチェックする等、大変なことに変わりはありません。よってこのような「各モジュールの結合度が高い」状況はできるだけ避ける必要があります。
依存先が具体的なモジュールではなく抽象化されたものであれば、依存する側のプログラム変更は必要なくなります。この考え方が腑に落ちれば、各種フレームワークにおけるDIといった概念の重要性も理解でき、より効率的なプログラムができるようになるでしょう。

以上、簡単にプログラミングする際に知っておくとよいポイントについて紹介をいたしました。ここで紹介したものはどれもごく基本的な内容ですので、興味のある方は下に述べるような参考文献を読んでみると良いでしょう。

書籍紹介

・UNIXという考え方 -その設計思想と哲学-

LinuxやmacOSなどにも繋がる、非常に堅固なそれでいて使いやすいUNIXというシステムがどのような思想で作られているかを紹介した書籍です。複雑で堅固なシステムも構成する一つ一つの要素を見ればとてもシンプルな哲学に基づいて作られているということが実感できます。

・オブジェクト指向でなぜ作るのか

プログラミングの効率化のために生まれたオブジェクト指向プログラミングの意義や、オブジェクトの作り方などを基礎から説明した書籍です。オブジェクト指向を説明するうえで安易に動物などに例えることなく、実際のプログラム設計や実装という観点で説明している所が実践的です。

・テスト駆動開発

プログラムを作るにあたり、まず実現したいものをテストという形で書いて、それを少しずつ実装していくことでプログラムを構築していく方法について解説した書籍です。試作の重要性や、具体から抽象へ実装が変わっていく過程を多くの実例で説明しています。いきなり難しいプログラムなんて書けないと悩んでいる初心者の方は、こんなレベルで作り出してもいいんだ!と勇気をもらえるかもしれません。

KENスクールでは専門的な技術と併せて、上記記事のような学習している知識の背景にある概念や周辺知識などもわかりやすく紹介・説明しています。独学でもこうした体系的な学習はできますが、専門のスクールで学習すればより学習時間を短縮できるでしょう。自分が学習したい分野が明確になりましたら、是非当社ホームページをご覧ください。