第1回
プログラミングの極意 〜 C言語編
このメールマガジンは、趣味でプログラミングしている方から、プロでプロ グラミングしている方まで、プログラミングのポイントを、理論的背景から 実践的手順まで慎重かつ厳格に伝授するメールマガジンである...。


  極意其の一  『簡単なサンプルを検索せよ』  
 


「プログラミングの極意」とは。

早速だが、プログラミングの極意を伝授するには、それは並大抵のことではない。 しかし、極意を会得すれば、半分眠りながらでもデバッグすることができる。 Visual BASIC や Java Script を使えば簡単にプログラミングができる というのは、特定の用途に使えるライブラリがそろっているだけの話で、 文法的特長の優位点は無いということも分かる。 システム・コンサルタント が、ハッタリをかましているところと、事実を語っているところの区別がつく。 オープンソースにすることの有利な点と不利な点も見えてくる。 当然、 このメールマガジンのハッタリの部分も見えてくる。

プログラミングを極めるには、物事の真理を追究しなければならない。 人間の思考の性質、概念の認識の仕方、数学的な法則などを扱って編み出された 仮定を検証し、事実に基づいて完成された方法を、具体的な形に書き下ろした ソースコードを使って伝授するということだ。 それは、真理という言葉を使って 人をだますための極悪宗教団体の手法とは大きく異なる。

このメールマガジンは、単なるプログラミングの解説ではなく『極意を伝授』 することが目的なので、多少大げさで断定的な表現でいく。「こうすれば、 やや便利なので参考にしていただけたらうまくいくでしょう。」という表現は、 製品の説明書や、ビジネスの会話の中で使えばいい。 職人なら師匠から ガチンコ勝負で盗み取ったものを持っているものだ。 そうでも言わないと、 なめられてしまう。



弟子入りしたいとな。

プログラミングは簡単だ。 興味がわいた人なら必ずプログラミングできて しまうからだ。 オブジェクト指向を駆使した職人技を使わなくても、0.1μm の凸凹を見極めて磨かなくとも、作れてしまうからだ。

プログラミングができる人は比較的少ない。そのため、プログラミングは 特殊技能だと思われているふしがある。 断言しよう。特殊技能を持っている からプログラミングできるのではなく、不親切で意味不明な解説書に書かれた ソースコードを扱う面倒さより、コンピュータを操りたいという気持ちが強い という、特殊な人種「でも」プログラミングができるだけのことだ。 もちろん、 私は後者である。

しかし、プログラミングは特殊技能だとは考えていない。 特殊な人種は、 コンピュータを操る欲望さえ満たせば、他のことには興味が無い。 だから、 それまで自分が解決してきたことを説明するときは手を抜く。 この人種は、 仕事だから仕方なくプログラミングしている人の中にもいる。 目の前の仕事 を解決すれば他のことに興味が無い人だ。 だから、不親切な説明書が身の 回りに多いのだ。

あまり冴えないような人でも、プログラミングだけはできるという人が 周りにいるだろう。 プログラミングの本質は簡単だということだ。 単に、 難しい殻をかぶっているだけなのだ。



誰でもできる見真似の技術。

あなたは、Windows でメッセージボックスを表示するプログラムを作成する ことになった。 あなたはその方法を知らない。 どうしようか。

メッセージボックスを表示する API 関数(Application Interface 関数)の 説明を、インターネットや解説書から探すだろう。 プログラミングの達人なら 知っていて当然なので探す必要は無いが、たまたま知らないことであれば、 達人であってもAPI関数の説明を探す。 その結果、次のような説明が見つかった。


int MessageBox(       // メッセージボックスを表示する
    HWND   hWnd,      // 親ウィンドウのハンドル
    LPCSTR lpText,    // 表示文字列
    LPCSTR lpCaption, // キャプションバーの表示文字列
    UINT   uType      // メッセージボックスのタイプ
);

なるほど、このAPI関数を使えばいいことが分かった。 それで、プログラミング ができるかというと、そうはいかない。 パラメータに何を指定すればよいかを、 理解しなければならない。 第1パラメータは HWND 型であることはわかるが、 HWND とは何だろうか。 プログラミングの達人なら分かるかもしれないが、 同じプログラミングの達人でも、Linux 使いなら達人でも分からないのだ。

Linux の達人は、この説明と格闘している間に、プログラミング暦1年の Aさんは、別の説明を見つけた。


(ソース)

#include <windows.h>

int WINAPI WinMain( HINSTANCE p_hInstance, HINSTANCE p_hPreInst,
 LPSTR p_pchCmdLine, int p_iCmdShow )
{
  MessageBox( NULL, "Hello, World!!", "タイトル", MB_OK );
}


(実行結果)以下のようなウィンドウが表示されます。



これは、説明と言うよりサンプルだろう、というツッコミは却下して、 サンプルを見つけた Aさんは、使い方をすんなり理解して無事、任務を 完了したのである。

論理的にパラメータの説明がされた資料を見つけたか、サンプルを 見つけたかの違いが勝負の分われ目だった。 とはいえ、この勝負は 運の差で決まったものであって、実力の差ではない。

しかし、この勝負の行方を分析して、今後のプログラミングに生かすことが できないだろうか。

今回の勝負の決め手は、運の差なので、何も勉強になるようなことは 無いと思うかもしれない。 しかし、Linuxの達人が、例の分かりにくい 説明と格闘せずに、サンプルがある別の説明を探したら勝負の行方は 微妙だっただろう。 つまり、やみくもにわかりやすい説明を探すの ではなく、簡単なサンプルを探せばいいということである。

サンプルを参考にするということは、人間の本能に身についた最も 基本的な学習能力である、「見真似」を活用することである。 赤ちゃんは、母親が笑顔で除いてくる様子を見て、自分も笑顔で 応える。 知り合いと別れるときに手を振っているのを見て、 別れるときに手を振って挨拶するものだと知る。 見るのではなく、 手を降らされて理解するかもしれないが、言葉で説明しても 赤ちゃんは理解できない。 一度体験しない限り。 難しい言葉で言えば、というより、抽象的にいえば、同じメタレベル で説明を受けたほうが理解が早いということである。

一応付け加えておくと、いろいろな機能を持った大きなサンプル・ アプリケーションは、あまり良い資料ではない。 Visual C++などの サンプルを見れば分かるだろう。 どこを見ればいいか分からない。 説明を受けるときのサンプルは簡単なほど良い。


  極意其の一  『簡単なサンプルを検索せよ』  
 


気になる今後の展開は。

今回は初回と言うこともあって眠くなる内容であったが、今後は 筆者が公開しているオープンソース・ライブラリを使って、具体的な ソースコードを元に、どのように機能を実現しているかを見ていく。 具体的な例をたくさん見ていくことで、様々なプログラミングの テクニックを身に付け、やがてはパターンが見えてくるようになり、 極意を会得できるのだ。

ただ、次回だけは、無料で使えるコンパイラの使い方を説明する。 実際にプログラムを動かすことで、見真似をするためだ。 これは、気がめいる演習とは根本的に異なる。なぜなら、自発的に 考え出す必要が無く、ただ単に真似すればいいからだ。 プログラ ミングとは、その程度のものだ。


このメールマガジンの図は、 SVGCats を使って作成しました。
表示するには、 Adboe の SVG のページ からプラグインをダウンロードしてください。


______________________________
▼ Sage Plaisir 21 commercial message       www.sage-p.com
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
このメールマガジンは、「まぐまぐ」より配布する予定です。
今回は、まぐまぐに登録するためのサンプル・マガジンです。
メールマガジンの登録方法は、Sage Plaisir 21 のホームページ
www.sage-p.com および「週刊ITニュース&コラム」に
来週掲載します。
______________________________



□∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞□
 最後までお読みいただきありがとうございます。
 バックナンバーの参照または購読の解除は、こちらへ。

 All Text composed by T's-Neko 2002
         ご意見、ご要望は neko@manbow.com まで。
     ソフトウェア・デザイン館 Sage Plaisir 21
         http://www.sage-p.com/
□∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞□