| Top Page | プログラミング | PIY 目次 | 前へ | 次へ |
何百というプログラミング言語のなかなら何を選ぶか?
プログラミング言語とは,コンピュータにやらせたいことを 表現するための言語です. たとえば,Xという名前をつけた変数(あるいは記憶領域)に 10という数値をしまいたいときに, X = 10; と書くとか X := 10; と書くとか, assign 10 to X と書くとか, そういった決まりです. もうちょっと丁寧な説明は, e-Word の プログラミング言語の項 などを見てください.
※以下,e-Wordのページへの参照は (eW→ことば)という形式で書きます.
表現のルールを決めればプログラミング言語を設計したことになります. でも,それだけでは実用にはなりません.その文法にしたがって書いた プログラム(プログラムのソースコードとも呼びます)をコンピュータ上 で実行するには,プログラムをコンピュータが理解できる機械語に変換することが 必要です. その翻訳作業には,専用の翻訳ソフトを使います. このソフトはしばしば処理系とも呼ばれます.
たとえば,C++はプログラミング言語の名前です.C++の文法にしたがって 書かれたソースコードから実行ファイルを生成する処理系には, UNIX の世界では gcc というものがありますし, MS Windows 上で動作するものとしては MicroSoft社が販売している Visual C/C++や,Borland 社のC++ Builder,gcc を MS Windows へ 移植したものなどがあります.
世の中にはさまざまなプログラミング言語と,その処理系が存在します. 翻訳機能だけでなく,さまざまな便利ツールのたぐいやライブラリ (自分で書くプログラムから呼び出して使えるプログラム群) などが合わさった開発環境と呼ばれるシステムもいろいろあります. 機能がいろいろありすぎて, 言語そのものよりも開発環境の使い方を覚えるのに一苦労, という場合もままあります.
となると,研究者がこれから自分用に書くプログラムは当然 GUI かというと, そんなことはありません. やりたいことの内容によっては,CUI の世界のほうが 効率よく作業できることもしばしばあります. 定型的な作業の繰り返しなどは特にそうです. マウスであちこちをクリックするのを延々と繰り返すのはバカバカしいことです.
また,一般に,GUI のプログラムを書くのは CUI に比べてかなり面倒です. GUI に必須の概念(イベント駆動型プログラムなど)や, GUI 用のライブラリの使い方など,理解しないといけないことがだいぶ増えます.
目で確かめながら画像処理をしたいなど,GUI でないと どうしようもない場合もあるでしょうが, 研究者が自分用に書くプログラムの多くは CUI でじゅうぶんだと思います. ボタンをクリックするとメッセージウインドウが出てきて "Hello!"と表示されるのはたしかに嬉しいですが, 研究用のプログラムとしてはあまり重要ではありません. GUI プログラムを使う特段の理由がないならば,まずは CUI プログラムから 始めるのがよいでしょう.
これも e-Word にゆずります(eW→ プログラミング言語 ). また, Dictionary of Programming Languages には膨大な数のプログラミング言語が載っています. あと, 私がこれまでに触れた言語を紹介したページ も参考になるかもしれません.
※「車輪を2回発明するな」というのは,プログラマーの重要な心得のひとつです. せっかく人が(ないしは昔の自分が)努力して残してくれた成果はありがたく 享受させていただくのがよい,特に必要もないのにもう一度やり直すのは時間と 労力の無駄だし,あらたなバグ(間違い)の混入のもとでもある,ということです.
特定のライブラリ(測定機器の制御用ドライバや,研究室で受け継がれてきた 資産など)を利用したい場合には,それが可能が言語を選ぶしかありませんが, ある程度の自由度がある場合には迷います.どんな基準で選んだらよいか, 思いつくままにチェックポイントをあげてみます.
どのような処理系があるかがまず最初のチェックポイントです. 自分が使っているOS上で動作する処理系がなければ始まりません.
次に,自分がやりたいことがその言語で表現しやすいかが重要です. 言語によって得意,不得意があります. 書籍やネットを見る,人に聞くなどして,言語の特徴を調べてみましょう.
さらに,学習に必要な情報がどれだけ提供されているかも重要です. すでになんらかの言語をマスターしている人にとって, 2番目,3番目,あるいは10番めの言語を学習することはかなり容易です. プログラミングの基本概念をすでに習得しているからです. たとえば「Java入門」という本があったとして,プログラミングの経験は あるが Java ははじめてという人向けの本かもしれないし, そもそもプログラミングははじめてという人向けの入門書かもしれません. 対象読者がどちらかによって,中身はぜんぜん違ってくるはずです. 新しい言語や,マイナーな言語の場合,プログラミング経験者向けの本しか ないこともあります. ほんとの初心者向けの入門書が手に入る言語を選ぶのが賢明でしょう.
困ったときに相談できる人が近所にいるか,というのもけっこう大きなポイントです. まったくの独学よりは,人に相談できたほうが効率はよいでしょう.近所に Perlの達人がいるから Perlを勉強してみよう,という選択のしかたもありです. ただし,いつも人に頼りっぱなしではなかなか自立できませんが.
ふだん使っている OS は MS Windows あるいはLinuxなどのUNIX系OSで, まずは金銭的な投資はなるべくせずに始めてみたいという人に薦めるとしたら,
※ 従来,Mac OS では CUI の環境を提供しておらず, はじめて研究用プログラムを書こうという人にはあまり適していないような 印象がありました. Perl は移植されているようですが,動作環境の制約のために,ほかのOS の CUI 環境で簡単にできることがやりにくいというともあるようです. 新しいMac OS Xではだいぶ状況が違って,Unix的環境が用意されているようです. Perlもインストールされているとか (>参考: Mac OS 9 / OS X で Perl を使ってみる ). でも,Mac についてはほとんど知識がないのでこれ以上の情報提供はできません. ご容赦を.
Perl や Ruby はどちらもスクリプト言語とよばれるものです (eW→ スクリプト言語). スクリプト言語は,ちょこっと書いて,すぐ試して,うまくいかなかったら 直してまた試すということがやりやすいので,勉強しやすい言語です. Perl も Ruby も文字列データの処理が得意で, ごく簡単なデータ処理プログラムなら数行から10行程度で書けます. また,C++などに比べれば実行速度は遅くなりますが, 現在の高速なコンピュータを持ってすれば, かなりのシミュレーション計算も十分できます.
世の中への普及度からするとPerlが圧倒的に勝っていますが,Rubyもしだいに 支持者を広げているようです.ほかにもスクリプト言語はいろいろあり, そのなかの Python という言語は,日本での浸透度はいまひとつですが海外では かなり人気があるようです.ただし,文字列処理の記述のしやすさでは PerlやRubyに一歩及ばず,データ処理プログラムを書くにはやや不向きかな, という印象があります.
ところで,ある程度おおがかりなプログラムを書くときには, オブジェクト指向的な設計が有効になります (eW→ オブジェクト指向プログラミング). Ruby は最初からオブジェクト指向プログラミングを前提に設計された言語, Perl は途中から少々無理してオブジェクト指向にした言語です.
要するに Perl か Ruby かどっちから始めたらいいんだと聞かれて 私見を答えるとしたら,
スクリプト言語のうちどれかを一通り習得したうえで,どうしても計算速度が不足だ という場合には,C++ に挑戦することになります.複雑な文法を持つ C++ ですが, Perl や Ruby と比べると数倍から数十倍のスピードで動作する実行ファイルを 作れます.また,コンピュータができることはほぼなんでも表現できます.
ただし,計算速度を速めることががほんとに必要なのかはよく考えないといけません. 一回だけ計算すれば済む作業なら,それに1時間かかるか1日かかるかは あまり重要ではありませんし,何回も繰り返し使うプログラムでも,1分かかる 作業が10秒でできるようになってもあまりありがたくありません. C++の習得にはけっこう時間がかかるので, そのコストと利得をじゅうぶん吟味する必要があります.
MicroSoft社の Excel を使ってデータ処理をしていて,マウスでつついたり 引っ張ったりにやたらと時間を使ってる場合には, Excelについてる VBA (Visual Basic for Applications)の処理系を 利用する手もあります.でも,多くの場合はテキストファイル出力したものを Perl や Ruby で処理するほうが容易だし効率もよいように思います.
Perl, Ruby, Delphiの関連情報へは,私のページのリンク集の プログラミングの道具など のセクションからリンクを張ってありますのでご覧ください.