かってにインパクトファクター

子育てサラリーマンが日々の雑多なことをつらつらと綴ってます。時々政治ネタ経済ネタコンピュータネタなどをはさみます。

プログラミングと研究

先日、計算機シミュレーションにおいて計算機の速度は無尽蔵に欲しくなる的な事をつらつらと書きました。
今回は、研究に使われるプログラムについてちょっとばかし。
皆さん普通プログラムというとどの言語を思い浮かべるでしょうか?

研究目的というと、計算がメインに思われがちですが、制御系も結構作られています。その辺も踏まえてしまうと、研究目的でどの言語が適しているということは言えなくなってしまいます。
ということで、ちょっと言語の特徴を簡単に説明してみましょう。

C or C++
汎用的言語。OSなどもこの言語で作られている。文法が若干難解で初心者を悩ませる。
JAVA
C++の欠点を補う言語として作られた。コンパイル*1?してもそれ単体では動かせず、JAVA仮想マシンを走らせてその上で動かすことになる。メリットは一度コンパイルしてもどのOS上でも仮想マシンが動けば実行できること。欠点は処理速度が遅くなること。
Basic
最近はVisualBasicが流行っています。窓のあるプログラムの開発効率に関しては断トツに高いですが複雑な処理には向いていません。
Pascal,Delphi
Pascalは教育目的に作られたもので、習得のしやすい言語です。DelphiPascalの窓を作れるようにしたものです。Borlandが提供していますが、OSを選ばずコンパイルでき、開発効率も高い言語です。いろんな意味で、CとBasicの中間くらい。
Fortran
もっとも古くからある言語だったと思われる。規格によってあとに66,77,90,95,2000が付く。文法が簡単なため覚えるのが楽。また77までは構造体を持たなかったため、処理速度が最速。そのため計算用途ではいまだに現役だが、一般にはほとんど見掛けない。90以降近代的な思想も採り入れられたため、このあたりから使い始めた人は幸せ者。
COBOL
予約語(その言語が使用する文字列。例:if)がもっとも多い。内部的に10進数で計算されているため、特に経理処理での誤差が無い。そのため今でも銀行系のシステム(ATM等)で使われている。最近はobjectCOBOLなどと呼ばれるものでがんばっているが、一般にはお目にかからない。
Ada
言語としてもっとも厳密に作られている。アメリカが推進したため、一部では良く使われているという噂。特に軍事とか。
VC++
マイクロソフトが提供するコンパイラがセットになった総合環境。最近は非常に使い勝手も良く、開発効率も高まりそうだが、周りから見てる人には”どっとねっと(.NET)”とか”しーしゃーぷ(C#)”とか分け分かりません。ものとしてはC++等のコンパイラです。
各種スクリプト
Webでの動的処理ではperl,php,rubyなどが良く使われている。これらはコンパイル必要無いため、比較的気軽に作ることができる。処理速度が遅く、大規模なプログラムには向かない。

という感じです。かなり個人的な感想が入ってますが。
また、最近流行りの言葉としてオブジェクト思考というものがあります。オブジェクト=物な分けですが、プログラム内で定義した変数も物として考えるとある程度分かりやすい思想です。要するに関連する機能や特徴(メソッドとプロパティー)をまとめて一つにしましょうよという思想です。例えばアシモなどの歩くロボットを作るとき、歩くだけでも多くの命令を順序良く出さないと行けないわけ。そのときに、”あるく”というオブジェクトを作ってその中に、右にそれるとか左にそれるとか言う変数をセットで持たせておくと、使う側として頭の中を整理しやすいわけです。で、このオブジェクト思考を持った言語がC++JAVAなわけです。オブジェクト〜と呼ばれる言語もオブジェクト思考です。最近はアスペクト指向とか呼ばれるものもあります。JAVAのみ対応ですが。


結局いろいろ書きましたが、研究で使われる言語は結構限られています。

数式の計算用
Fortran,C,C++
制御系
C,C++,JAVA

という感じです。最近では複数のパソコンを使って計算負荷を分散させることも個人でもできるようになって来ました。そうなるとMPIに対応しているとかいろいろ必要になって来ます。そうすると一つのPCでの処理能力より複数のPCでの分散処理を行いやすい言語の方が良く見えて来ます。そうなればC++がよろしいような話になって来るわけです。


ここまで説明して初心者は疑問に思うわけです。結局一体どの言語を習得すれば良いのだろうか?
良く言われることですが、一つの言語を覚えてしまえば、他の言語の習得にはそれほど苦労しません。なのでどれでもいいですから一つ言語を覚えてみましょうと言うことになるのですが、だったらどれが一番良いのでしょうか?ということで分かりやすい選択肢を示してみましょう。

社会人でもプログラミングする可能性がある
断然VisualC++です。余力があればですが、JAVASQLに手を出してみると、明るい未来が待っています。
将来理論系の研究職につくかも知れない
C言語習得後Fortran90あたりに進むことがお勧め。
なんでもいいからさわってみたい
delphiVisualBasicお勧め。Cプログラマーから見ると癖はありますが、開発はしやすいらしいです。
めずらしいものがいい
断然ひまわりでしょう。


多くの人はC言語のポインタと呼ばれる概念に悩まされて挫折するわけですが、その辺の細かいことは避けてもプログラムは書けますので、ぜひ試しになんかやってほしいものです。

*1:人間が分かるテキストの命令をコンピュータが分かる言葉に変換すること