| Top Page | プログラミング |

私が使ったプログラミング言語

初出 1999-07-16
Updated on 2008-03-21

最初にプログラムというものを書いて以来,はや30年ほどにもなりました. その間に使った言語を振り返ってみます。 教科書の例題や動作試験プログラムでなくて,自分がほんとに使うプログラムを 1つ以上書いた言語を「使った言語」と呼ぶことにします. 各言語名のうしろに私の使用年代を書いてありますが、 記憶はきわめてあやふやです。 自分の思い出を記録に残すために書いたような文書です. 人が読んでもほとんど参考にはならないでしょう.

| FORTRAN | N88-BASIC | アセンブリ言語 | Quick BASIC | C | awk | Perl | C++ | Python | VBA | Java | Ruby | Delphi | R | 番外 | かじらなかった言語 |

FORTRAN (学生時代,1970年代末)

学生のころ、「生物統計学」という講義をとりました。FORTRANの実習もやる ということでしたが、実際は大型計算機のアカウントをくれるだけで、 あとは自分で勝手に勉強しなさい、ということでした。勝手に本を買って来て勉強して、 統計計算用のプログラムを書いてみたりしました。統計の本を読んでも, なんとなく分かったような分からないようなという状態になりがちですが, そういう理解ではプログラムを書けません.とにかくプログラミングしてみる ことで理解が深まることがあるのだな,と思いました.

FORTRANの文法を勉強して、あとはその知識を自己流に組み合わせてプログラムを 書いていただけで、今にして思えば、「プログラミングの勉強」はまったく できていなかったように思います。それでも、プログラミングというのは なかなかおもしろいものであるなあ、という印象を持ちました。

科学技術計算分野の定番中の定番であったFORTRANですが、その影はしだいに 薄くなりつつあります。私も、このとき以来、約20年間にわたって自分で FORTRANのコードを書いたことはありません。見ればなんとか読めるけど、 もはや自分では使えない言語です。

...というつもりだったのですが,2001年になって,多量のFORTRANの コードを読み,自分でもあちこちに書き足す,という作業をしてしまいました. 20年も前に作りはじめられたワタの成長モデルです.オーストラリアの 研究者と共同で,その拡張作業にかかわりました.今後とも,この プログラムはFORTRANで実装し続けるのだそうです.FORTRANは死なず.

BASIC (N88-BASIC) (大学院時代,1980年代前半)

大学院のころ、研究室にぼちぼちパソコン(当時はマイコンと呼ばれていた) が入りはじめました。ほとんどアプリケーションソフトがなかった当時、 パソコンを使うには自分でプログラムを書くことが必須でした。 そのころいちばんメジャーだったパソコンはNECの製品です. ちょうど88シリーズから98シリーズに移り変わるころでした。この機械にはN88-BASIC というものが搭載されていました。これはなんと呼んだらいいのでしょうか。 プログラミング開発+実行環境であり、いちおうOSでもある、といった ところでしょうか。

FORTRAN の知識が助けとなって、比較的すぐに使えるようになった記憶があります。 FORTRANから面倒な宣言文や制限をなくしてお気楽にした言語、というの がBASICの印象でした。

変数は全部グローバルだし制御構文もおそろしく貧弱だし、 典型的なスパゲッティプログラム(処理の流れがこんがらがって、 あとから読んでもなにがなにやら分からないプログラム) 生産環境でした。 おかげで、ずいぶん無駄な時間を使ってしまったようです。 それでも、N88-BASICにはたいへんお世話になりました。

ただ、FORTRAN時代と同様、BASICの文法を勉強して、あとはその知識を自己流 に組み合わせてプログラムを書いていただけでした。「プログラミングの勉強」 はあいかわらずできていませんでした。

アセンブリ言語 (1988年ごろ?)

N88-BASICは実行にめちゃくちゃ時間がかかる環境でした。複雑な図形の面積 を測定するために、画面上のドットの数を数えようとしたのですが、BASICの 命令だけでプログラムを書くと、一画面(それも当時の 640 x 400 ドット) を調べるのに10分以上もかかりました。 どうやら機械語のプログラムを書けばスピードアップが可能らしいということを知り、 アセンブラの本を買ってきて勉強しました。

勉強には1、2週間ぐらいかかったでしょうか。どうにか画面上のドットの数 を数えるプログラムが書けました。実行してみると、BASICでは10分以上かか った計算が、わずか1秒程度でできてしまいました。数百倍のスピートアップ です。いたく感動しました。

その後、アセンブラを使うことはありませんでしたが、このときの勉強の成果は、 のちにC言語を勉強するときに ポインタ という概念の理解に役立ったようです。

BASIC (Quick BASIC) (1990年ごろ?)

どうしてQuick BASICを使ったのか、今となっては忘れました。どんなプログラムを 書いたのかもよく覚えていません。データロガーから計算機へのデータの転送 プログラムなどを書いたような記憶がかすかにあります。ともかく処理系を買って 勉強しました。ここではじめて、 構造化プログラミング という概念に触れました。

C (1992年ごろから数年)

Cというものの存在をどうして知ったのか、よく覚えていません。どこからか、 CのほうがBASICよりも早く動作するプログラムが作れるらしいという知識を 仕入れてきて(※)、処理系を購入し、 カーニハンとリッチーの本 (K&Rと呼ばれる古典)をはじめ,いろいろ本を買って勉強を 始めました。 C Magazine という雑誌(創刊から17年後,2006年に休刊)も毎号買って読んだし, パソコン通信のNiftyServeのC言語のフォーラム(電子会議室)にも 毎日アクセスして、知識の習得につとめました。

勉強するうちに、BASICよりははるかに奥が深い世界があることが見えてきま した。多くのハッカー(悪意のシステム侵入者=クラッカーじゃなくて、プロ グラミングの達人の意味でのハッカー)たちが積み上げてきた歴史と遺産のう えになりたつひとつの世界があるようだ、という印象を持ちました。

このころ、ようやくほんとにプログラミングの勉強をしたように思います。 「 プログラム書法」、「 ソフトウエア作法 」といった古典も含め、ずいぶんい ろいろ本を読みました。プログラム設計上の心得、構想のたてかた、さまざま な要素のバランスのとりかた、アルゴリズムの定石など、特定の言語に依存し ない重要なことがらを勉強しました。

※「CはBASICより速い」というのは,言語仕様と処理系の実装とが こんがらがった意味不明の言い方ではあります.多くのBASICの処理系は 実行時逐次翻訳タイプなのに対して,多くのCの処理系はコンパイラであって, はじめに機械語の実行ファイルを生成してしまうタイプである, ということが速度差を生じる一番大きな要素です.

Awk (1992年ごろ?)

テキスト処理に便利な機能を持った言語です。いわゆるスクリプト言語と呼ば れるものです。たしか、C Magazineという雑誌の記事でその存在を知ったのだ と思います。本を買ってきて勉強してみました。いろんなデータをとりあえず テキストファイルとしてしまっておいて、これをいろいろ加工するときにAwk を活用しました。

そのAwkですが、いまやまったくの死語(単語として使われなくなったという意味ではなく,, 言語自体が使われなくなったという意味) となってしまったようです。Awkがはや ったころは、sedやgrepといったUNIX起源の小さいツールたちの上位互換の高機能 ツールとして利用され、さらにそれ以上にプログラミング言語としての可能性が 追求されていたようですが、Perlの登場により、その存在意義はなくなってしまいました。

FORTRANやCOBOLは、今もしつこく生き残っているがゆえに、古語だと揶揄され たりもするようですが、Awkは古語だと言ってももらえません。

Perl (1993/4年ごろ〜)

Perl 公式 Home Page

これもC Magazineという雑誌で知ったのだと思います。たぶん、Awkを越える スクリプト言語として紹介されていたのでしょう。なぜか、勉強してみよう という気になって、本を買ってきました。

たしかに便利で高機能なのですが、便利なようにいろいろな略記法が用意され ていることもあってか、可読性が低いプログラムが簡単に書けてしまいます。 たまにしか使わなかったので十分に身についていなかったこともあって、以前 に書いたものを見ても何をやっているのかさっぱり分からぬ、ということがし ばしばありました。

その後,2000年頃になって、基礎的な部分はひととおり理解して使えるようになりました。 ひとつには、Perlを人に教えるということをしたのが大きかったようです。 試行錯誤してとにかく動けばいい間に合わせのプログラムを作る、というレベルでは 人には説明できません。理詰めで説明できるようにあらためて本を読んで 勉強することで、ずいぶん理解が深まりました。

Perlの利用価値は非常に高いです。データの加工や、いろんな作業の自動化 (Perlから他のプログラムを呼び出す)などに重宝しています。もはや、私は Perlなしでは暮らせない体になってしまいました。

Perlは,Ver4のころに勉強しましたが,やがてVer5の時代となりました. いろいろな拡張がされてますが,リファレンス変数というものが導入されて, 込み入ったデータ構造が容易に表現できるようになったことが特に大きな変化でした. 表記法がやや分かりにくいこともあって,使えるようになるのにちょっと 時間がかかりましたが,古い知識にしがみついて 「これで用が足りるからいいんだ」と言い張るようにだけはなるものか, と思って勉強しました.

その後,Perl の基礎を勉強しつつデータ処理だの簡単なシミュレーションだのを やってみるという集中講義をとある大学で担当することになりました. その時の資料に手をいれてウェブに載せようと思い立ったのですが,手を入れる どころではなくほぼ完全な書き下ろし,それも全25章という大作になってしまいました ( 研究に使うプログラムを Perl で書こう). 時々「このページでPerl を勉強して使えるようになりました」という声を いただきます.うれしいことです.

C++ (1993年ごろ〜)

計算機科学の研究者と同席したときに、これからのプログラミング技術の発展 の方向はオブジェクト指向にある、と吹き込まれました。プログラミング言語 は、機械語の時代から、人間が読める高級言語へ、そして構造化へ、と発展し てきた。つぎはオブジェクト指向だといういうのです。

オブジェクト指向とはなんなのかよく分からないままに、すっかりその気にな ってしまいました(なぜ分からないのにその気になったのかは謎です)。 少し調べてみたところ、世の中で手に入りやすいオブジェクト指向向きの プログラミング言語というと、Smalltalkの系統のものと、C++があるということが 分かりました。計算速度を重視するならあきらかにC++に軍配が上がるようです。 多量の数値計算をともなうシミュレーションをやりたかったので、 C++を勉強することにしました。

複雑な文法を理解し、さらにそれを生かしてオブジェクト指向のプログラムを 書けるようになるまでは、かなり時間がかかりました。いろいろ本を読んだり、 自作のプログラムも何度も設計しなおしたりしつつ、2年ぐらいかかって、ま あ使えているのかなあ、という状態になりました。

オブジェクト指向プログラミング言語の元祖はSimulaと呼ばれるもので、 その名前からも分かるようにシミュレーション用言語です。 オブジェクト指向の思想は、シミュレーションと相性がよいものです。 今になって考えてみると、シミュレーションモデルを 作ることが研究手法の重要な一部となっている私にとって、オブジェクト指向 は必修科目だったようです。

オブジェクト指向正統派からは、Cとの上位互換性や実行性能を考慮した結果 としての設計の不徹底さ、汚さを指弾されがちなC++ですが、私にとっては、 今のところこれが第一言語になってます。

一般にできあがった実行ファイルのスピードはCよりも遅くなるようです. でも,数千行程度の数値シミュレーションプログラムを書く場合,実行速度 の多少の違い(せいぜい2倍)よりも,オブジェクト指向しやすい言語を使う ことで開発がやりやすくなることのほうがの私にとってはありがたいです. というわけで,わざわざ C でプログラムを書くことはまったくなくなりました.

Python (1998年〜)

Python Japan User's Group

年を重ねるとともに、新しいことを勉強するのがおっくうになるのではないか、 という危惧を常に持っています。いやいやまだまだできるぞ、と自分に証明し てみせたい気もあって、久しぶりに新しい言語をかじってみようと思い立ちました. 選んだのがPythonです。

これもPerlやAwkと同じくスクリプト言語とよばれるものです(ではスクリプト 言語とは何かと問われると、うまく答えられません。一種の簡易言語、などと も言われますが、どこがどう簡易なんだと聞かれると困ります。ご容赦を)。

Perlも Ver.5 からはオブジェクト指向を標榜してるけどどこか無理がある、 Python はよりきれいにオブジェクト指向してるし、Perlよりも可読性が高い プログラムが書ける、という売り込みです。ともかくフリーのソフトなので、 公式web siteに行って取ってきて、本も買ってきて勉強してみました。

あまり多量の数値計算をしないようなシミュレーションにはよさそうだ、 という印象です。ぼちぼち使ってみましたが,Ruby (あとで出てきます)が 世に出てからは,オブジェクト指向スクリプト言語が使いたいときは Ruby を使うことになり,Python の出番はなくなりました.

VBA (Visual BASIC for Application) (1999年〜)

長いこと、BASICには近寄らないのが通(つう)であるという思いこみのもと、 BASICと名のつくものは避けて通ってきました。2000年頃、MS-Wordの文書の整形の ために、一夜漬けでVisual Basic for Application というものを勉強してみま した。Quick BASICの経験と、オブジェクト指向プログラミングの経験が助けと なって、一夜漬けでなんとか動くプログラムが書けました。簡単にダイアログ ボックスなども作れます。

以前はMS-WordはWord独自,MS-ExcelはExcel独自のマクロ言語をサポートして いたのが、その後,みんな統一してVBA というものをサポートするようになりました.

BASICはめちゃくちゃ遅いとの思いこみがずっとあったのですが、VBAで簡単な 数値計算をさせてみたところ、C++で書いたものと比べてせいぜい数倍程度し か違わない(もちろんVBAのほうが遅いのですが)ことを発見して、おどろきました。

Excel 上でパラメータを入力し,これをつかってPerlやC++のプログラムが シミュレーションだのデータ処理だのをし,これをExcelに再び読み込んで 図化する,といったことを自動化してみたりしました. Excel のワークシートの一括テキスト保存・テキストファイルの一括読み込みの プログラムを 2005 年から公開しています( MS Excelでテキストファイルの一括保存・読み込み).

Java (2001年〜)

Wikipedia

Rubyのようにすべてのものがオブジェクトというわけではありません (整数型や浮動小数点型などの基本データ型の変数はオブジェクトではない)が, すべての処理がクラスのメソッドとして書かれるという点ではオブジェクト 指向度が高い言語です.

以前,本をざっと読んだことはあったのですが,実際に使ったことはありません でした.最近(2001年2月),人前で簡単なシミュレーションプログラムを動かし て見せるために,あわててGUIのあたりを勉強して,プログラムを書いてみました. そしたら,にわか勉強にもかかわらず, 一応は動くものができてしまいました . これからも,簡単なGUIプログラムを書きたい時に使ってみようかなと考えて います.

開発キットも実行環境も無料で入手可能であるという点, 一度コンパイルしたものはどのOS上の実行環境でも動作するという点も魅力です.

異様に充実した(肥大した)クラスライブラリが提供されていますが, これらを使いこなすのは大変そう.あまり凝ったことをやろうと思わなければ, 基本的なライブラリだけで十分のようです.

Ruby (2001年〜)

Ruby 公式 Home Pageへ

まつもとひろゆきさんが作った純国産スクリプト言語です. 完全にフリーで,unix系OSとWindows上で動作するものがあります. 整数だの文字列だのも含めて,すべてのものがオブジェクトという, 純粋なオブジェクト指向言語です.

当然,C++やJavaのようにクラス(オブジェクトの種類)を定義する ことができます.簡単なシミュレーションや,やや複雑な構造をもった データを処理するのにとても有効です.

Perl5のような無理にオブジェクト指向してる感じはまったくありません. それでいて,Perlで書けることはほぼなんでも書けます(正規表現も). また,イテレータという仕組みがたいへん気がきいていて好きです.

これまで勉強した言語のなかで,いちばん言語仕様が「気がきいている」 と思えるのがRubyです.もちろんCやC++で書いてコンパイルしたものと 比べれば実行速度はずっと遅くなりますので,なんでもかんでもRubyで 書くというわけにはいきませんが,まず Ruby で書いてみて,うまく動作 するようにして,なお速さが必要なら C++に移植する,という使い方も しています.

…などと書きましたが,2005年頃以降,ほとんど使っていません.

Delphi (2003年〜)

Borland 社が開発した,GUI プログラムを手軽に開発するための環境です. もともと Windows 環境用のものでしたが,ほぼ互換性のある Linux用の開発環境も 作られました.

「開発環境」には,コード書きの支援ツール,コンパイル用ツール,さまざまな ライブラリなどが含まれます.コード書きのための言語は Pascal を拡張した object Pascal です.Pascal はもともと教育用に開発されたストイックな言語ですが, object Pascal ではオブジェクト指向的なプログラムが書きやすいように拡張されています.

GUI である必要がないものをわざわざ GUI にするのは作業の効率化の観点からもマイナス ですが,作業によっては GUI にせざるをえないものもあります. 私は以前に Borland 社の C++ コンパイラを使って全天写真解析プログラム CanopOn を 書きましたが,この新しい版 CanopOn 2 はフリーで提供されていた Delphi 6 Personal を使って書いてみました.C や C++ を知っていれば,object Pascal 自体の習得は 簡単です.あとはいろいろ本を買い集めてライブラリやツールの使い方を勉強しました.

R (2003年〜)

The R Project for Statistical Computing | RjpWiki

R は,統計処理用のツール・言語である S と(ある程度)互換性のあるフリーのツール・言語です. さまざまな統計解析機能を持っていて,さらに寄ってたかって組み込みパッケージが 作られています. そうした機能自体たいしたものなのですが, プログラムを書いてさまざまな処理を自動化できるのがありがたい. データを格納する高レベルのデータ構造が用意されていて,その扱いに慣れれば, めんどうなことも簡単に書け(ることもあり)ます.

作図まで自動化できるので,マウスであちこちつつく作業を繰り返しながら 同じフォーマットの絵を多量に作るなぞという「コンピュータにだってできそうな」 単純作業をコンピュータにまかせることができて嬉しいです. 元データのファイルが規則的な名前を付けられているなら, それらの名前をプログラム中で生成してどんどんファイルを読み込んでは処理し, 絵も描いて画像ファイルにしまっていくこともできます.

一般化線形モデルだの, AIC によるモデル選択だの, さまざまなノンパラメトリックな解析方法だのが使いたくて導入してみましたが, プログラミング言語を勉強していろいろ自動化してこそ活用してると言えそうです. 書籍やネット上の情報をたよりに独習してます. いろいろなクセを飲み込んで使いこなすまではもう少しかかりそうですが, 楽をするための苦労を惜しむようになってはおしまいだと思って努力してます.

R の統計解析関数の使い方の情報はいろいろあるのですが, プログラムによる作図についての情報を体系立って整理したものが見当たりません そんななかで試行錯誤しつつ努力した成果をまとめて残しておこうと思い, R でプログラミング:データの一括処理とグラフ描き というページを作成しました.このページが一番役に立っているのは, おそらく私自身です.個々の部分もちゃんと理解しないと書けないし, 全体の構成を考えるにも,体系だった理解が必要です. 書きながらほんとうに勉強になりましたし,今もときどき調べ物に使います.

(番外)マクロ言語

いろんなソフトで、マクロ言語と呼ばれるものが用意されています。そのソフ トの機能をいちいちメニューから選んだりして呼び出すのではなく、簡単なプ ログラムを書いて自動的に実行させるためのものです。ごくごく限られた機能 を組み合わせてこちらがやりたいことを表現するのは、一種の快感でもありま す。俳句や短歌にも通じるような....

遠い昔には、WTerm(パソコン通信用にひろく使われたフリーのソフト)のマ クロで、NiftyServeの各所を自動巡回するためのプログラムを書いたっけ。最 近では 秀丸(Windows上での定番エディタのひとつ.シェアウエア)のマクロで、 ちょっとした自動化のための小さいマクロを書いたりします。

かじらなかった言語

世の中には何百というプログラミング言語があるので,かじらなかった言語は 「ほとんどすべての言語」と言ってもよいのですが,そのなかでも特に これは知りませんと言っておきたい言語をあげました.

Lisp

知らないことをもっとも恥ずかしく思っているのがLispです。独特のパラダイ ムの上に構築されていて、教養として身につけておくべきものと思ってます。 じゃあ勉強すればいいようなもんだけど、とりあえず役に立てたい場面がない もので,そのまんまです.

Smalltalk

オブジェクト指向の正統派言語と言われています。 オブジェクト指向を語る以上は勉強したほうがよいのでしょうが, まったく知りません。

Mathematica

Mathematicaを言語と呼ぶのは変ですね。Mathematicaがサポートするプログラ ミング言語、と言えばよいのかな. 私が専門にしている生態学の中で,数式をいじっている人はかなりの比率で 持っているんではないでしょうか. 私も少し使いかけましたが、「汚い」数値計算ばっかりやってる私にとっては、 このシステムの数式処理機能は宝の持ち腐れでした。


| Top Page |