大きな書店のコンピュータコーナーにはプログラミングの書架が目につくようになりました。タイトルに「プログラミング」という用語を使った数多くの本が並んでいます。はじめてプログラミングを学ぼうとしている人たちにとって、どこから手をつけるのがよいのか迷うと思います。
そこで、本稿は、プログラミングで必要とされる技術を分類し、学習の道しるべとなるよう試みました。
はじめてプログラミングを学ぼうとしている人たちにとって当面関係ないかもしれませんが、習熟度が上がっても学習する方向を見極められるよう、少し高度な技術についても取り上げました。
下図は、大ざっぱではありますが、プログラミングで必要とされる技術の分類を示しています。
(注)ITプロジェクト管理は技術ではないが、Howに属するのでここに掲載した。
この図は左右2つの列に分かれ、右側の列にはプログラミングの目的、つまりプログラミングの対象が来ます。これがWhatになります。読者が想定する装置であったり、アプリケーションであったりします。
プログラミング学習に際し、初めから自分のプログラミング対象をもつことは困難です。学習過程では、学習テーマ毎に与えられる練習問題をプログラミング対象することになります。
図の左側の列は右側の列で想定したWhatを実現するための、一般的なプログラミング技術を羅列しています。これらがHowになります。
(1)VPL(Visual Programming Language)
Howの列の最左端にVPL(Visual Programming Language)があります。これは幼児向けのプログラミング言語で、ビジュアルな画面を見ながら、いくつかの意味が与えられた図形の組合せを使って、プログラミングについて学習することができます。幼児に限らず大人も遊び感覚でプログラミングの本質を理解するために使うことができます。
VPLにはいくつか種類がありますが、Hour of CodeやScratchが良く知られています。それぞれ次のURLのサイトを参考にしてください。
Hour of Code : https://code.org/
Scratch : https://scratch.mit.edu/
VPLはあくまでもプログラミングの学習用であり、実務的なプログラム(ソフトウェア)の開発には使われることはありません。
(2)一般のプログラミング言語
以前の投稿:「プログラミング学習の筋道」で紹介しましたが、現在広く使われているプログラミング言語は、COBOL、FORTRAN、C、C++ 、JAVA、Ruby、Python、PHP、JavaScriptなどです。
これらは基本的な言語機能とOSやDBなどの外部機能を利用可能とする拡張言語機能を持っています。言語を特徴づけているのは基本言語機能です。拡張言語機能はinclude文やimport文を使用してOS(オペレーティングシステム)やDB(データベース)などの外部機能をそれぞれの基本言語機能の文脈の中で使えるようにしています。
これらのプログラミング言語の説明では一般にコンピュータの動作原理やデータの2進表現、データ構造については殆ど触れていません。これらについては、本ブログ掲載の「ビットから始めるプログラミング」の第1章、2章で詳しく解説しているので参考にされると良いでしょう。また、第3章ではプログラミング言語の本質的な機能を解説しているので、各プログラミング言語の学習に先だって読まれると、理解を容易にすると思います。
(3)OS、NW、DB、Web
プログラミングでは、プログラミング言語の知識を出発点にするだけでは不十分です。プログラムが動作するOS(オペレーティングシステム)、NW(ネットワーク)、DB(データベース)、ユーザインターフェースとなるWebについても概要程度の知識はもっていた方が良いでしょう。
(4)ソフトウェア工学
ソフトウェア工学は、ソフトウェアの構造と開発プロセスを論じる学問です。
ソフトウェアの構造は「ソフトウェア・アーキテクチャ」のことを指しています。具体的には、プログラミング技法、アルゴリズム、プログラム構造、プログラミング言語、データベース、コンパイラ、オペレーティングシステム、ネットワーク、並列処理、オブジェクト指向、フレームワークなどの「技術」を論じます。
開発プロセスは要求分析、ソフトウェア設計、プログラミング、レビュー、テスト、計測、評価 などを指しています。具体的にはソフトウェアの開発方法について論じます。
(5)ITプロジェクト管理
「技術」を論じるソフトウェア工学に対して、ITプロジェクト管理は人の行動を論じます。ITプロジェクト管理考の「ITプロジェクト戦略」で述べたように、4つのレベルの戦略(戦術)を問題にします(下図参照)。
レベル | 課 題 |
経営戦略 | ・経営合理性の追求 ・複数プロジェクトに対する資源配分 |
プロジェクト戦略 | ・プロジェクト計画の立案と進捗管理 ・プロジェクト目標を達成するためのチーム編成 ・プロジェクト内チームの統括 |
戦術 | ・チーム内の結束/士気向上 ・チーム目標に照準を合わせたチーム内連携 ・方法論、技術、各種ツールの錬度向上 |
技術 | ・最適な方法論/開発ツール/技術の採用 |
上の表に「技術」とありますが、ここではITプロジェクトでどの技術を採用するかを問題にしています。あるプロジェクトで誰がどの方法論/開発ツール/技術を採用するかという問題です。ITプロジェクト管理ではあくまでも「人」がどのように行動するかが問題となります。