レベル別言語学習指南

Jan. 22, 2003


学生からよく「言語を学びたいのですが,何から始めるのがいいでしょうか?」と聞かれる. この質問はコンピュータサイエンスのFAQ中のFAQであろう. 当然言語とはC言語やFORTRANなどのプログラム言語のことである. 間違っても英語などと答えてしまっては折角の向学心の芽を摘み取ることになるだろう.

最近では,小学生からお年よりに至るまでパソコンが一般化し, ありとあらゆる用途向けのソフトウエアが市販されるようになってしまった. 敢えて小難しいプログラム言語なぞ使わずともたいていのことはできる. 工学部の大学院生でさえ,自分から進んでプログラム言語を学ぼうとする者は少ない. 学生に「工学部の大学院にいるんだから, せめて一つくらい言語をマスターして卒業しろ」と言うと,

計算ならエクセルでやればいいじゃないですか

と平然と反論されてしまう. 少々嘆かわしい状況である. 反論されて怯んでしまう筆者はもっと嘆かわしいが...

コンピュータとは元来プログラマブルな機械であるから,自分の書いたプログラムを実行させてこそ その真価を発揮するものである. 何でもできるコンピュータなのに,出来合いのソフトウエアばかり走らせておくのは非常に勿体無い. しかし,ヘッドホンでMP3を聞きながら,3Dゲームでガンガン遊んでいる彼らに対して, コンソールに "Hello World!" と表示させることができる喜びを説いてもなかなか理解してもらえないのが現状である. 学生に言語を学ぶ気にさせるにはどうすればよいか? というのは コンピュータサイエンスを教える側のFAQであろう.

自発的に学習を始めようとする学生は大歓迎であるが,話をよく聞いてみるとかなり勘違いしている. 特に,

これから始めるんだったらやっぱりC++でしょうか?

のようなC/C++に関する誤認や勘違いが横行している. C言語 => 難しい => 何でもできる => カッコいいというC言語至上主義が罷り通っているからだろう. 大方の学生はこれを信じており,FORTRANから始めよという筆者の忠告を 無視しやっぱCっすよ!と意気込んで勉強を始めるが99%挫折する. 巷にはC言語の入門書が溢れているが,WordやExcelが使える程度のスキルで修得できる ほどCは甘くない.いわんやC++をや,である.

Cを学ぶのはFORTRANやPascalなどの手続き型言語を完璧にマスターした後でも遅くない. これらの言語でプログラムが書けるようになれば,Cを学ぶ上での最大の関門と呼ばれるポインタの 理解もスンナリとこなせるだろう.

さて,冒頭の質問に対する答えであるが,最初に修得すべきプログラム言語はその人のスキルに応じて自ずと決まる. プログラミング言語は他人から教わるのではなく独学すべきものである. 自分でたくさんのコードを書き,コンパイル,実行,デバッグを繰り返して初めて修得できるものである. 独学する以上,自らの知的好奇心を最終段階まで持続できなければならないから, 学ぼうとする言語のレベルが難しすぎても簡単すぎてもダメなのである. ある程度理解に労力は要するが理解できたときの 喜びが大きい,という状態を維持しながら徐々にステップアップしていかなければならないのである. 当然,個々人のコンピュータサイエンスに対する知識レベルには差があるから, 学ぶべき言語も人によって自ずと変わってくる.

B級マック種パソコン医局員のナゾ に 習い,コンピュータスキルのレベルに応じた最適学習言語をまとめてみる. 各レベルに共通していることは,言語の学習においては最初のカベが最も高い ということである. 学習を初めて最初に困難さを感じたときが正念場である. それを乗り越えれば,次に遭遇する困難はもっと楽に克服できるだろう.

初級レベル

最近ワープロや表計算ソフトを使って普通に仕事ができるようになったので,言語を覚えて 他人との差別化を図ろうとしている人たちである. この階層に属するほとんどの人が上で述べたCの迷信を盲目的に信じている. 概ねプログラム実行の概念すら理解できておらず,Cの入門書を意気込んで買うが, 最も早い場合で数時間,粘ったとしても1週間で挫折する.

こういう人たちはまず,慣れ親しんだExcelやWordのマクロ言語(VBA)から始めてみてはいかがだろう. マクロ言語ですか? などとバカにしてはいけない. VBAはVisual Basic(VB)のサブセットであり,文法や機能は基本的には全く同じだ. ワークシートにボタンを貼り付けたり,特定のイベントでダイアログを表示させたり, その気になればWindows APIを呼び出すことも可能だ. ただし,同じBasicだからといっていきなりVBから始めるとプロシージャやイベントの概念を理解するところで躓きやすい.

VBAでコーディングの体験学習を行った後は,VBにステップアップしてウィンドウアプリケーションを作るもよし, Perlなどのスクリプト言語を使ってテキスト処理などに挑戦してみるもよしである. ただ,間違ってもCに移行しようなどと目論んではいけない. 今のあなたのレベルは言語が全く理解できなかったレベルから一歩踏み出しただけで, Cを学ぶには依然大きな障害が残されている.

中級レベル

初級レベルで数年間過ごし,ワープロや表計算以外にもドローツールやプレゼン用アプリを 使いこなせるようになった人たちである. 市販ソフトの使い方には精通しており,初級レベルの人たちにアドバイスしたりもするが,言語や ハードウエアの話になると急に及び腰になる. 研究室に在籍する学生のほとんどはこのレベルに属する.

もしこのレベルの人が初級レベルの時に抱いていた言語に対する知的好奇心を維持し続けているならば, 一旦言語の学習を始めると上達も早い. 言語を知らないことが一種のコンプレックスのようになっているからである. ただし,ネットサーフィンや新作ソフトの追っかけばかりに 執心しエンドユーザコンピューティングの申し子のようになってしまっては, もはや言語知識の修得は望めない.

理系中級レベルに最適な言語はFORTRANだろう. 筆者も言語を始めたときはこのレベルに属しており,まずFORTRANから始めた. FORTRANは古臭いと揶揄される傾向にあるが,科学技術分野では未だ現役である. 数値計算のコードなら,何か特別の事情でもない限り普通はFORTRANで書く. とりあえず最古の規格であるFORTRAN77でコードを書いておけば, PCからスパコンまでのあらゆるマシンで実行することが可能だ. また,FORTRANのコンパイラは最適化技術が最も進歩しており,かなりのスパゲティコードでも それなりの速度で動いてくれる. 構造化や分割コンパイルも当然サポートされており,大規模なコード開発にも向いている.

もしあなたが仕事の道具としてではなく,もっと本格的にプログラミングを勉強したいと 思うのなら,FORTRANよりもPascalから始めるのがよかろう. すでにFORTRANやBasicを修得しており,もっと高度な言語にステップアップしようとしている人も, いきなりCなどに行かずにPascalでお茶を濁してみてはいかがだろう. Pascalは元々教育用言語として開発された経緯があるため文法が簡潔で覚えやすい. ポインタも明示的に使えるため,後にCに移行する場合も違和感はほとんど無い. CにあってPascalに無い概念はマクロぐらいで,これとて関数で代用すれば何ら不自由はない. ある本には "Pascalはタイプ量が多いので タイピングの練習になる" と書かれていた.

Windowsでの標準的なPascalの処理系であるDelphiの 素晴らしさについては,このサイトでしつこく書いてきた通りである.

一方,文系中級レベルに最適な言語はやはりVBであろうか. これについては賛否両論あるかも知れないが, 筆者自身はVBの取っ付きやすさはやはり一番だと思っている. 見栄えの良いウィンドウアプリケーションを簡単に作るという点でVBの右に出るものはなかろう. Windows APIも呼び出せないことはないし,以前に比べると出来ないことは減ってきている. 特に処理速度を要するプログラムでない限り,VBですべて事足りるだろう. ただし,後にCにステップアップしようとするときにある程度の苦難が伴うことは覚悟しておくべきだ. ポインタ,厳密な型の区別,マクロなど,VBに無い概念がCにはたくさんある.

すでにFORTRANやCを修得している人が,ウィンドウアプリケーションを作りたいという 理由でVBを使い始めると数日で限界が来て欲求不満が爆発するだろう. そういう人にはDelphiをお勧めする. DelphiにはVBのような限界が無い.

Javaはいかがでしょうか? とよく聞かれる.確かにJavaにはポインタの概念が無いので,Cよりは 幾分簡単かもしれない. しかしながら,Javaを使いこなすためには言語文法もさることながらオブジェクト指向の理解を 避けて通ることはできない.オブジェクト指向の考え方は一朝一夕に修得できるものではなく, 数多くのアプリケーションを作る中でだんだんと見えてくるものである. 巷に溢れている情報には,Javaがさも簡単にネットアプリが作れるように書かれているが, 筆者自身はJavaを使いこなすにはそれ相当の訓練が必要であると見ている.

いずれにせよ,早く上達するためには複雑なコードにじっくりと取り組むよりも, 入門書の例題レベルのコードを数多く書くことが大切だ.

上級レベル

PCの機種選択,OSのインストール,ハードウエア設定,ネットワークの管理など言語以外は何でもできるという 人たちである. こういう人たちに向いているのは必然的にCということになるが, それはCを学ぶのに必要な素養が備わっているからではなく,Cでなければ彼らのプライドが傷つくからである. 周囲からシステム管理者を任されているのにいまさらFORTRANやBasicを始めるのはカッコ悪い,ということである.

ただ,システム管理能力と言語の知識は別物である. ハードウエアのことを知っていれば言語を学ぶ際に多少役立つかもしれないといった程度である. したがって,ここは人知れずFORTRANやPascalなどの手続き型言語から始めることをお勧めする. 地力のあるあなたなら中級の人よりも短期間にこれらの言語をマスターできるだろう. その後はCにステップアップしてシステムプログラミングの勉強をするもよし, Javaを使ってネットプログラミングに挑戦するもよし,である.


お問い合わせはメールにて: akasaka@klc.ac.jp

戻る
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送