限りなき知の探訪

45年間、『知の探訪』を続けてきた。いま座っている『人類四千年の特等席』からの見晴らしをつづる。

百論簇出:(第161回目)『IT時代の知的生産の方法(その9)』

2015-03-15 20:53:05 | 日記
前回

○職場でプログラムを使おう

前回も述べたように、プログラムを組むというのは、一人でできる仕事ではあるが、一人だけでしていると非常に効率が悪い。つまりプログラミング技術があまり上達しないのだ。職場全体でプログラミングを学ぶことで、誰かが作ったプログラムの処理内容を理解し、共用して使い回しすることで、全体のプログラミング技術が向上する。つまり職場全体の学習曲線が急峻に向上する。

このための環境整備には導入と維持コストが全くかからない、フリーソフトを使うことが望ましい。その意味で以下に述べるように、無料のawk とWeb上のフリーソフトは好都合だ。

さらに、一社だけでなく、他社もまきこむことを提案したい。オフィスワークは現在の社会に共通であるので、一社だけでなく他社をも巻き込み、ユーザーグループを結成して、情報蓄積、情報交換をするのが望ましい。この点で、awk はプログラムの実態はテキストファイルなので、セキュリティの心配もなければ、変更も自由にでき、実行環境も選ばない。

awk(オーク)とは

ここまで 『awk を使おう』と言ってきたが、ここで、awk とは何かと利点について説明しよう。

awk とは、『文字列の検索・パターンマッチングに強い汎用的なシェル言語』と定義できる。awk は1970年代にATT でUNIX 上のシェル言語(コンパイルしないでも実行できる言語)として開発された。 1995年ごろまでのコンピュータ環境ではプログラムをコンパイルすることはかなり時間もとり、面倒な作業であった。その点でコンパイルせずにプログラムコードをすぐ実行できるシェル言語は非常に便利であった。ただ、当時の awk はプログラムソースコード数や扱えるデータ量に限度があり、本格的に使おうとすると実行スピードの点でも問題があった。

しかし、当時、データマイニング事業を推進していた私は awk はマイナス面よりプラス面の方が大きいと判断し、積極的に使うように部下に奨励した。その後、数年間、実際に何人かの部下に awk を使ってデータマイニングの業務を遂行してもらい、さらに自分自身のちょっとしたプログラムを awk で書くことを積み重ねるに従い、この言語の便利さと活用のポイントを理解することができた。残念ながら、現在(2015年)世の中では、awk は完全に忘れ去られた存在で、大型書店のプログラミング言語コーナーでも awk 関連の書籍を見ることはできない。

そうだからと言って、awk が使い物にならないのではなく、単に使えるような環境を整備しないからだと私は思っている。使える環境を整備するには、まず awk を正しく理解しないといけない。私の awk に対する見方は必ずしも世間の見方とは一致しない。以下に awk の利点について私の見解を述べよう。
 1.awk は簡易C言語である。
 2.awk は強力な文字列のパターンマッチング機能をもつ。
 3.awk は現在の仕様で固定化されて、今後大幅なバージョンアップはない。


1.awk は簡易C言語である。

以前も述べたように、私は長らくC言語を使って幾つかの大型プロジェクトをこなしてきた。それで、C言語の文法やプログラム開発に関して、長所と短所はどちらも良く理解している。その視点から現在のいろいろなプログラミング言語を見るに、いづれもオブジェクト指向を謳うことであたかも先進的な印象を与えようとしているが、素人にとっては実際的なメリットは全くなく、不要にプログラム学習の敷居を高めているに過ぎない。その点 awk は C言語の一番の鬼門であるポインター演算(つまりメモリーアクセス)をカットすることで素人の学習を容易にしている。その一方で、 C言語の利点である制御フローの見やすさ(readability)はそのまま残している。このお蔭で awk で書いたプログラムはほんの少しの変更で C言語のプログラムとして使うことも可能である。実際、私は何度か、相互に変換して使ったことがある。

C言語が作られたのは40数年前であるが、簡潔で機能的な言語仕様のおかげで、これからも何十年と使われていく言語であると私は予想している。その意味で、awk を使うことはC言語の前段階として有意義だと考える。

また逆にC言語に慣れた人がちょっとした計算をするにも便利である。というのは、2.で述べるように awk には確かに強力な文字列のパターンマッチング機能をもっているが、普通のプログラミング言語と同等の数値演算機能も備わっている。その意味で、文字列だけでなく数値演算を対象とした普通のプログラムも十分書くことができる。


【出典】

2.awk は強力な文字列のパターンマッチング機能をもつ。

世間では awk や Perl に心酔している人がいるが、その人達が口をそろえて言うのが『強力な文字列のパターンマッチング機能』である。私はこれは awk にとって両刃の剣であると考える。『強力な文字列のパターンマッチング機能』とは一般的に『正規表現』と言われている文字パターンの形式を使えることをいう。

例えば、ある文字列が浮動小数点かどうかをチェックすることを考えてみよう。浮動小数点の例をいくつか挙げると:
 1.23
 -987.654
 +45.67e-4 (= 0.004567)


など、いろいろな形式が思いつく。これらをまとめてチェックしようとすると、パターンを分けないといけない。上の例でいうと、先頭の文字の場合、数字、あるいは + あるいは - の3パターンが存在するということだ。そして、数字の長さも限定がない。また、大きな、あるいは、小さな数字は、e あるいは E を使って表現することも可能だ。

これら全てのパターンをチェックしようとすると、普通のプログラムではかなりの行数のコードになる。こういった場合、awk の正規表現をつかうと、次のような簡単な表現でチェックできる。
 if($f ~ /^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)([eE][+-]?[0-9]+)?$/)
 ここで、$f はチェックしようとする文字列を表わす。

確かに、非常に簡潔なコードとなるが、一般的なプログラムしか知らない人にとっては、(ましてや素人には)呪文のようなコードに見えるであろう。

私の経験から言えば、このようなケースは極めてまれだし、もし必要なら、サブルーチンとしてこのコードを呼ぶことで処理できる。つまり、実用的観点からすれば、awk の特徴でもあり利点でもある正規表現はわざと使わないようにするのが、本論が対象とする素人にはお勧めである。その結果、本来であれば簡潔なコードで書けるものでも、ダサく書くことで、プログラムの初級者であれば誰でも使うことができる。

3.awk は現在の仕様で固定化されて、今後大幅なバージョンアップはない。

世間から見捨てられた awk であるので、今後、大幅なバージョンアップは期待できない。これは一見、マイナス要因と思えるかもしれないが、素人集団にとっては非常なプラス要因なのだ。

比較の為に、マイクロソフトのWindows システムやワード、エクセルなどのアプリケーションソフトを考えてみよう。今これらのソフトを使っている人の中で、バージョンアップによって多大な恩恵を受けている人は極めて少ないであろうと私は予測する。ほとんどの人にとっては、2010年当時の XP や オフィス2010で十分だったはずだ。それなのに、マイクロソフトの利潤追求のためにバージョンアップを余儀なくされ、使い方やメニューが変わってしまった。そのつど、新しいソフトになれないといけないが、それは仕事の効率の向上に全く寄与していない。つまり、マイクロソフトの製品はもうこれ以上何もしなくてもよい完成品なのだ。

awk もそれと同様、完成品なのでバージョンアップは不要であるので今後も安心して同じプログラムを使い続けることが約束されている。マイクロソフトの不必要に頻繁なバージョンアップに付き合わされてイラついている多くの人にとって awk にバージョンアップがないことは、どれほどありがたいことか納得して頂けることだろう。

続く。。。
コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 想溢筆翔:(第196回目)『資... | トップ | 想溢筆翔:(第197回目)『資... »
最新の画像もっと見る

コメントを投稿

日記」カテゴリの最新記事