作者: 機械伯爵
日時: 2002/2/18(22:48)
 PはPythonのP
   〜まいぺーすScripting〜

◆前置き◆

 FORTRANしかなかったアポロの時代とは異なり、コンピュータと対話する
言語、いわゆる「プログラミング言語」はすさまじい数存在するのが現在で
す。
 そのマイナー、メジャー群雄割拠の中で、ひときわのんびりゆうゆうとあ
るのがPythonです。
 Pythonは、他の言語の領土侵略など、全く考えていません。
 もしその気になったなら、世の中のプログラミング言語の8割以上を
Pythonに置き換えても通用する(のではないかな、と、私が勝手に夢想でき
る)くらい、すさまじい潜在力を秘めていても、です。
 これは、適用範囲を広げることによって課せられる「責任」と、現在の
「自由」な環境とを考えた場合、「自由」を選んだ結果のように思われます。
 反面、Pythonに完全に置き換わる言語は、当分現れないでしょう。
 Pythonに秘められた潜在力を理解するには、まず数々の「不可解」な
「常識」の「呪縛」をぶち壊す必要があります。
 私はあえて、「Pythonは全てのプログラミング言語の中で唯一無二の最高
の言語である」とはいいません(たとえ心の中でそう思っていても、です)
 そう宣言することは、とりもなおさずPythonの魅力の一つである「他の
言語と共存する」という特徴を損なってしまう、と思うからです。
 しかしPythonのことを知り、上手に活用することは、「新しい言語を習得
するてまひま」を差し引いてもありあまるものがあると思います(実際、
Pythonを習得するのにかかる時間は、他の言語に比べると格段に短いはず
ですから・・・)
 というわけで、今回から不定期で(できるだけ一ヶ月に一回くらいは書き
たいですが)Pythonの魅力について、冗談を交えながら色々話していきたい
と思いますので、肩の力を抜いてお楽しみください。


P-0 誰がためにキーを打つ・・・
   〜プログラマって何者?〜

 さて、質問です。
 プログラマとは、一体どのような人々を指すのでしょうか?
 ・・・・・簡単すぎましたか?
 プログラマを定義するなら、もちろん「プログラムを書く人」でしょう。
 運動会とか卒業式とか、そういう「人間を動かすプログラム」を書く方も、
もしかしたらプログラマの一種なのでしょうが、そのような高尚な作業(我々
の同胞たる人類を導く作業)に携わる方々と、「いわゆるプログラマ(我々人
類の下僕たるシリコンチップに命令を下すだけの存在)」を一緒にしてはあま
りにも失礼ですから、前者の方々はご遠慮いただきましょう。
 また、コンピュータをリアルタイムで操作する、いわゆるオペレータも、プ
ログラマではありませんね。
 プログラマとは、コンピュータに与える一連の命令の手順書である「コン
ピュータプログラム」を書く人を指します・・・これでよろしいですね?
 無論、いまどきハンドアセンブル(機械語を一つ一つダイレクトに書き込む
作業)される方は少ない(居ますよ、居ることは)と思いますので、通常は
アセンブル言語やそれ以上の高級言語を使用し、一括/逐次翻訳して間接的に
命令内容を伝えることになるでしょう。
 コンピュータの黎明期には、オペレータとプログラマは完全分業されて
いました。
 やがて、オフコン・パソコンと、コンピュータが身近になるにつれて、
コンピュータオペレーションの大部分(専門分野は無論除きます)が簡素化、
具象化され、プログラマが気軽にコンピュータに直接触って操作できるように
なりました。
 ところが、さらに時代が進み、オペレーションシステムやアプリケーション
が充実してくると、もはやコンピュータに通常の作業をさせるのに、
一々プログラムする必要が無くなりました。
 コンピュータの一種であるパソコンが「事務用品化」「家電化」すると、
プログラムの大部分が「ソフトウェア技術者」という専門家の領域となり、
オペレータならぬ「ユーザ」が圧倒的多数を占めるようになり、
 ・・・流れとしてはかなり大雑把かつ不正確ですが、プログラマというものを
定義するにはこれで十分だと思われます。
 つまり、現在のプログラマは2種類に分類できると思われます。
・ソフトウェア技術者
・それ以外(セルフプログラマ)
 ソフトウェア技術者は、プロフェッショナルのプログラマのことですが、
ここでは「自分以外の他人が使うためのプログラムを書く人」という点を
注目したいと思います。
 それに対して、自分の作ったソフトウェアを自分が使う人を、
セルフプログラマとして私は分けてみたいと思います。
 両者はもちろん重複する部分が大いにあります。
 ソフトウェア技術者は、まず例外なく、自分用のツールとしてプログラムを
書くでしょう。
 その時彼らは、紛れも無くセルフプログラマです。
 上にあげた分類は、実際はプログラマの分類というよりは、
「プログラミングの目的」と言ったほうがいいかもしれません。
 それぞれの目的に応じてプログラミングしているとき、その人は
ソフトウェア技術者となったりセルフプログラマとなったりするわけです。
 「スクリプト言語」と呼ばれるプログラミング言語の一派は、
ソフトウェア開発用言語としてはやや心許無いものの、セルフプログラミングに
おいては、その簡素な文法や豊富なツール(ライブラリ)が、絶大な威力を
発揮します。
 スクリプト言語にもさまざまですが
・「ルールは比較的多いが、簡潔に記述できる」
というタイプと、
・「ルールは少ないが、やや記述が長くなる」
というタイプが存在します。
 ところで、ソフトウェア技術者は、勿論「専門家」ですから、ツールである
スクリプト言語も「通好み」のものを選択することが多いようです。
 すなわち「ルールは比較的多いが、簡潔に記述できる」タイプを選ぶわけです。
 なぜなら、彼らの最大の興味は「簡潔に記述できる(コードの量が少ない)」
であって、その際、多少ルールが多くとも、他の本格的な開発言語にくらべれば
「微々たるもの」であると思えるからでしょう。
 ところで・・・「ソフトウェア技術者」でない「セルフプログラマ」
はどうでしょうか?
 そもそも、セルフプログラマだけの存在なんて、いるのでしょうか?
 各種アナリストや科学技術者といった方々は、たしかにその部類でしょう。
 しかしそれ以外となると、意外に思いつきません。
 これはパソコンの普及とともに、自分でプログラムするより、
既存のアプリケーションを利用するやりかたが主流となったためでしょう。
 今やパソコンは、プログラミング知識皆無でも全く問題なく利用できます。
 ところで私は、アナリストでも科学技術者でもありませんが、
セルフプログラマのはしくれだと自認しています。
 しかし・・・周囲からは、ははっきりと「変人」扱いされています(泣)
 彼らがプログラムを書かない理由は明白です。
 曰く「意味が無い」
 正確に言うなら「苦労して覚えても、そんなに見返りが大きいとは思えない」
「既存のアプリケーションで十分」「大体、素人が書いた程度でできることは
知れている」といったところでしょうか(特殊な機材が無いと、
プログラムを書けないと誤解している人もいますが・・・)。
 御説ごもっとも。
 ただ、コンピュータというのは高度な情報処理機器であり、
その機能を使わないで眠らせておくのは、いかにも勿体無いような気がします。
 特に、統計計算を頻繁に行うなら、表計算ソフトのテンプレートを
作っておくのも結構ですが、もっと簡単に「データはCSVのテキストデータで、
処理はスクリプトで」としたほうが、応用力もあり、修正も簡単にできる、
と思うのは私だけでしょうか(残念ながら、実際に表計算のシートにばりばりに
マクロを埋め込んだテンプレートを作って活用されている方には、
特殊な場でしかお目にかかったことはありません…居るんでしょうけどね)
 市販アプリケーションか、高価な特注アプリケーションしか使ったことの
無い方々は多いと思いますが、よく考えてみてください。
 ソフトウェア技術者はソフトウェア開発のプロであり、その方たちの仕事の
プロではないのです。
 無論、複雑なソフトウェアに関してはプロの手にゆだねるしかありませんが、
比較的単純なものであれば、「その道のプロ」であるその方たち自身が作った方が、
使い勝手の良いものになるのではないでしょうか?
 また、プロに特注する場合でも、プログラムの基礎を知っていると
知っていないとでは、注文するポイントもかなりかわってくるのではないか、
と私は思います。
 コンピュータが他のツールと異なる最大の特徴は「究極のカスタマイズ機能」
にあると私は思います。
 セルフプログラミングは、そのために欠かせないスキルではないでしょうか。
 私は、プログラミング経験の無い、あるいはやってみたけど挫折した
という方々に特に、この「ルールが少ない」即ち「1からでも学びやすく、
すぐ実践で使える」タイプの言語であるPythonを、お勧めしたいと思います。
 ・・・えらく前置きの長い話だ・・・

※余談
 Pythonの日本のコミュニティーを覗くと、なんだか凄く専門家っぽくて
難しそうな雰囲気があり、とても素人(私を含む)が気軽に参加できる気が
しない・・・もっとプログラミングにあまり馴染みの無い人をまきこむ
Pythonの素人向けコミュニティーがあればなぁ、と思います。ここ(TSNET)
がそうなればいいなぁ・・・

<<2002.02.18 機械伯爵>>