ITつまりInformation Technologyこと情報技術という言葉が,日本で普及してからおよそ一年になるが,その定義は情報処理学会でも問題になっている。アメリカでは,経営や業務の流れをコンピュータの技術によって運用していくことを指しているようで,決してブロードバンドなどのハードウェアの技術を指すわけではないようだ。本稿でいうITはアメリカでいうITを指すことにする。
さて,使いやすいウィンドウズというOSとアプリケーションソフトを組み合わせてどのようなことができるのだろうか。また,この時代にどのようなプログラミングが必要なのであろうか。
ウォーターフォールモデルに基づくと,システム要求仕様,システム要求定義,外部設計,内部設計,プログラム設計,テスト,運用および保守の順に流れるとされている。この中で,従来,大切であったのはプログラム設計である。すなわち,実際にプログラムを書く(コーディング)部分である。ところが,IT時代の現在,状況がかなり異なる。骨格となるプログラムはアプリケーションソフトを利用するので,開発形態は少し前と大きく変化してきた。加えて,現在はグラフィカルな画面を売りにしているウィンドウズ全盛時代である。ユーザが使いやすいように画面設計をする必要がある。また,画面の遷移もよく考える必要がある(外部設計)。そして,プログラムのコーディングよりもプログラムのモジュールの組み合わせ(内部設計)も重要である。また,ウィンドウズプログラミングではモジュールは用意されており,重要なのは内部設計や外部設計である。(図)
ウィンドウズ全盛時代の今日,プログラミングの主流はC/C++またはVB(Visual Basic)を用いたスタイルとなる。ウィンドウズプログラミングはWin32API(ウィン32エーピーアイ)という関数を用いた方法である。APIの正体はDLL(Dynamic Linking Library)ファイルの中にあり,その中から関数(function)を呼び出す。したがってウィンドウズプログラミングには多少のOSに関する知識が必要となる。ところでマイクロソフト社はCOMというテクノロジー中心のプログラミングスタイルに移行したがっている。COMというのはオブジェクト指向中心の技術で,従来のCからC++へ移行するものである。
一方,VBはある程度完成したグラフィカルな部品(モジュール)が用意されていて,それを組み合わせてソフトウェアを作成していく。こちらもCOMへ移行しようとしており,次期バージョンのVBは本格的にオブジェクト指向に対応する。
プログラム開発は従来は初めからコーディングして作るものであったが,最近はアプリケーションソフトが大変発達してきたので,それを利用して別のシステムを構築するスタイルが一般化してきている。
ERP(エンタープライズ・リソース・プランニング)の分野では,オラクルやアクセスなどのデータベースソフトを利用してシステムを構築している。ここで要求される力は,どのように表を作って項目を追加するのかを考えていく力である。そのうえ,表を定義したり,操作したりする言語としてSQL(Structured Query Language)の知識が必要となる。データベースの構築関連では正規化やE‐R対応など紙の上での勉強も大変重要である。
その他には,表計算ソフト,エクセル(Excel)のマクロ言語,3次元CGソフト―シェード(Shade)のスクリプト言語,オーサリングソフト,ディレクタのスクリプト言語Lingoなどがある。
パソコン一台一台にソフトウェアをインストールして利用する形態は,頻繁に生じるバージョンアップやサービスパックなどの追加などが必要となる。最近はセキュリティホールの防止のためにちょっとしたパッチの配布は頻繁であり,これらの管理をユーザ個別に任せるのは大変であるうえに,システム管理者の負担は半端ではない。そこで,ウェブブラウザでサーバにアクセスしてサーバ側でプログラムを実行するスタイルが注目されている。こういうソフトを「ウェブアプリケーション」と呼ぶ。ウェブアプリケーションはサーバの負担が重くなるという欠点はあるものの,業務系ソフトウェアではデータ量が小さいため,それほど問題にはならない。
上記の通り,最近のプログラミングの需要の多くは,ウィンドウズプログラミング,アプリケーションソフト上のプログラミング,ウェブアプリケーションのプログラミングに分けられる。これらはソフトウェアのプラットホームの違いによる分類といえる。
最近の話題として最も注目されているのは,Javaである〔図(J)に対応〕。Javaはプラットホームに依存しないような形でソフトウェアを提供している。そのため,ウィンドウズ,マッキントッシュ,UNIXの違いを考える必要がないので,開発者の負担は軽くなる。また,携帯電話などにもJavaアプリケーションを搭載するところまで領域は広がっている。もっともプラットホームに非依存といいながら,現実には互換性に若干の問題があり,実行速度が遅くなるという欠点がある。
もう一つはオブジェクト指向によるプログラミングである。オブジェクト指向に関しては十年以上前から叫ばれていながら,最近ようやくその解説書の類も増加してきている。ウィンドウズプログラミング,Java,データベースなども幅広い分野でオブジェクト指向に移行しつつある。オブジェクト指向の勉強はクラスライブラリーの概念の把握などが難しいので,ここは紙の上で勉強する必要がある。情報処理技術者試験のソフトウェア開発技術者試験の問題で勉強するのがよい。
まずはC系統の言語で書くときは,マイクロソフトのVC++(Visual C++)やボーランドのC++ビルダを使用する。それぞれMFC(Microsoft Foundation Class)やVCL(Visual Component Library)といったライブラリを搭載しているが,ここはやはり,Win32APIで記述するのがよいだろう。
現在最もメジャーな言語はVBである。VBの人気は高いが,プログラミングの仕組みが理解しにくい上,複雑な処理を行おうとすると,Win32APIの利用が不可欠となる。
そのほか,オブジェクトパスカルとして有名なデルファイ(Delphi)もあり,マイナーではあるが人気がある。そのうえ,Javaによる開発も可能である。エディタで編集してコンパイルするよりは,Jビルダというコンパイラを使用するのがよい。
MacOS9までのソフト開発は現時点で参考書がないので素人は手がでない。一方,MacOSX(テン)ではJavaによる開発が可能である。
こちらは,開発環境はたくさんある。C,C++,Perl,Java,Fortranなど大抵の言語を使用することができる反面,実用的なソフト開発は期待できない。リナックスを試してみたい人は最新のターボリナックス7またはMLD5を使うとよい。これらはウィンドウズ環境との共存を考慮して作られている。
C言語はOSに密接に関わる言語であるため,汎用性は高い。表はC/C++言語の系統についてまとめたものである。
CUI(Character-based User Interface)環境では第1部と第2部がある。第1部はいわゆるANSI C(ANSIとは米国規格協会)と呼ばれるもので,DOS(ウィンドウズ2000,XPでは[アクセサリ]-[コマンドプロンプト])やUNIX(Linuxを含む)で使用される言語である。通常「C言語」といえば,この第1部を指し,情報処理技術者試験の基本情報技術者試験で出題範囲とされるC言語でもある。第2部はANSI/ISO C++である。通常「C++言語」といえば,この第2部を指し,こちらはクラスライブラリーを用いるオブジェクト指向の言語仕様が特徴である。
第3部以降はウィンドウズプログラミング言語である。第3部はウィンドウズC言語とでも呼ぶべき部分である。ウィンドウズでは「Win32API」と呼ばれる関数を使用してプログラミングを行う。これはAPI C言語と呼び換える方が把握しやすいかもしれない。UNIXのXウィンドウや,BeOSの上でプログラミングするときなどはそれぞれのAPIが存在し,各OSごとに,関数を勉強しなければならない。第4部はウィンドウズC++と呼ぶべき部分である。前述のCOMオブジェクトを用いたプログラミングスタイルである。VC++はMFC(Microsoft Foundation Class)というクラスライブリーを持ち,これを用いたプログラミングが第5部である。VC++によるプログラミングといえば,MFCを用いたプログラミングを指すことが一般的である。
このようにC言語と一言でいっても,その指す範囲は膨大である。即戦力かつ応用力のあるプログラマを目指すためにはC言語(第1部)とWin32API(第3部)から勉強するのがよい。Win32APIを学べば,C言語はもちろんのこと,VBへも応用が利くのである。学習するときは,興味のあるビジュアルな内容から行うのがよい。
参考書としては,ハーバート・シルト「独習C」(SHOEISHA),同「独習C++」(SHOEISHA)がお勧めである。高田美樹「C言語の総合研究」(技術評論社,一九九九)にはアルゴリズムのフローチャートがついており,特筆に値する。カーニハン&リッチ「プログラミング言語C」(共立出版,一九八九)は古典的名著である。ウィンドウズはハーバート・シルト「Windows2000プログラミング」(SHOEISHA)が唯一の本である。なお,ウィンドウズの構造などは「日経ソフトウェア」(日経BP)の特集号などを参考にしてほしい。
Javaという言語は混同されやすい次の言語と区別するべきである。
これがいわゆるJavaである。サンマイクロシステムズ社製。
ブラウザ上で実行するJava。2001年現在かなり衰退している。
HTML(Hyper Text Markup Language)文書に埋め込んでブラウザ上で実行可能な言語。クライアント側で実行するため,サーバに負担はかからない。
Javaアプリケーションと本質的に異なる。二〇〇一年現在完全に衰退している。
Javaは歴史が浅いため,解説書が不十分である。加えて,オブジェクト指向であるので,プログラミングは若干難しい。
マイクロソフト社のウィンドウズ上で開発する言語名であり,開発ツールの名前でもある。いわゆるBASICとは文法が少し似ているだけで本質的に異なる。また,マイクロソフトオフィス上で動くVBA(Visual Basic for Application)やIE(Internet Explorer)上で動くVBスクリプトなど,VBの親戚のような言語もある。
VC++とVBの違いについて認知しておかなければならない。VBというのは,言語の名前であり,開発環境を含めたものをも指すこともある。一方,VC++というのは前節で区分したあらゆるC言語で開発するためのツール,あるいは統合環境の名前であり,VC++という言語が存在するわけではない。
ご存じの通りウェブ記述言語である。説明不要であると思う。
ウェブにダイナミックな動きを加えるのに必要な言語である。Javaと区別する必要がある。クライアント側で実行するため,サーバには負担がかからない。
サーバ側で実行するための言語として最もよく使われる。前述のJavaスクリプトとPerlがあればインターネット上で何でもできてしまう。栗林彰「ホームページ 誰も書かなかったホントの裏技」(SHUWA SYSTEM)を参考にするとよい。
マクロメディア社のフラッシュは最近よく使用され,企業の面接でよく質問される。比較的楽にウェブページに動的な効果を追加することができる。
データベース分野は独特である。
かつては,COBOLを中心としたオフコンの時代があった。現在は,SQLで記述されるリレーショナルデータベースへ移行しつつある。データベースエンジンはオラクルが最もメジャーである。SQLを学ぶことは重要である。しかるに,最近はさらに進んで,オブジェクト指向のデータベースへ移行しようとしている。
とりあえず,SELECT文の使い方をアクセスで学ぶとよい。
エクセルのマクロ言語である。勉強する優先順位は低いが,企業では使用することも多い。
マクロメディア社のオーサリングソフトであるディレクタのマクロ言語。ディレクタは日本では普及していないが,アメリカでかなりメジャーである。例えばオラクルのトレーニング用CD教材などはディレクタで作られている。
3次元CGソフトシェードにもスクリプトが搭載されており,VBスクリプト,Jスクリプト,Tcl/Tk,アップルスクリプトに対応している。
変化の激しいコンピュータの世界では,一つの言語を身につけることでずっとプログラミングをやり続けることができるわけではない。進歩しつつある技術に飛び乗って走り続ける必要がある。走っているうちに,違う方向性の技術があれば乗り換える必要があり,それに適用できる能力が「力量」である。京都コンピュータ学院のスローガンである「卒業生が最先端」というのは,常に最先端を走り続ける柔軟性を教育しているという意味である。最近の日本の企業は「即戦力」を要求しすぎるあまりに,経験者を優遇しようとする。しかし,最先端はだれもが未経験者であり,経験者が存在しないことを理解している企業が大変少ない。最先端に適応していくだけの力がありそうな人物を採用する必要がある。
さて,学習者としてはやはり,CやVBでウィンドウズ上のプログラミングを身につけるべきである。そのうえでオブジェクト指向の考え方を身につけるのがよい。ネットワーク環境に接続するようなプログラミングも重要である。例えばネットワーク対戦型ゲームもその一例である。しかしネットワークに対応したプログラミングはレベルが一段上になるので,中級レベル以上の人が挑戦するとよい。
これ以外に,HTMLを中心としたウェブ系の記述方法も勉強する必要があり,勉強時間はいくらあっても足りないのが現状である。