誠ブログは2015年4月6日に「オルタナティブ・ブログ」になりました。
各ブロガーの新規エントリーは「オルタナティブ・ブログ」でご覧ください。
プログラム言語を確実に習得する4つのステップ
仕事と生活と私――ITエンジニアの人生
プログラム言語を確実に習得する4つのステップ
グローバル ナレッジ ネットワーク株式会社で、Windows ServerなどのIT技術者向けトレーニングを担当。Windows Serverのすべてのバージョンを経験。趣味は写真(猫とライブ)。
当ブログ「仕事と生活と私――ITエンジニアの人生」は、2015年4月6日から新しいURL「http://blogs.itmedia.co.jp/yokoyamat/」 に移動しました。引き続きご愛読ください。
今回は、前々回「プログラム言語を学ぼう」の続きとして、C#とVisual Basic、その他の言語について比較するとともに、プログラム言語の習得方法について触れてみたい。
●C#とVisual Basic
マイクロソフトの創業ビジネスは、PCベンダーにBasic言語のインタプリタを供給することだった。日本ではNECや日立、富士通などが採用した。ただし、Basic言語は大規模なプログラム作成に必要な機能が欠けていたし、全行に行番号が必要なのも面倒だった。なぜ行番号が必要だったのかは、とても深い理由があるのだが今回は省略する。
Basicの欠点を補うため、マイクロソフトはVisual Basicを開発した。Visual Basicは、BASIC言語の基本的な概念を残しているが「BASICに似た別言語」である。Visual Basicはアマチュアによる簡易ツールから企業内の業務アプリケーションまで広く利用された。
ただし、大規模なシステムや速度を重視するプログラムには、Visual BasicよりもC言語やC++言語が使われることが多かった。歴史的にはCが最初に発明され、C++はCを改良したものである。いずれも実行効率は良いのだが、文法が複雑で使いにくいのが欠点だ。
C++の複雑さを解消するために開発されたのがJava言語である(Javaは言語だけではなく、その実行環境も定義しているのだがここでは触れない)。Javaは当時サンマイクロシステムズ社の社員だったジェームズ・ゴスリンが設計・開発した言語で、多くのOSで動作する。
一方、マイクロソフトはJavaと同様のアイデアに基づいて、やはりC++を改良した別の言語を開発した。それがC#であり、C#の実行環境がMicrosoft .NETである(.NETはC#以外の言語でも利用できる)。C#は国際標準規格となっているがマイクロソフト以外の実装はあまりなく、事実上Windowsでしか利用できない。
C#の設計はアンダース・ヘルスバーグが行なった。彼は8ビットパソコン後期から16ビットパソコン初期の時代に人気があったTurbo Pascalの作者であり、後にDelphi(デルファイ)という言語設計に関わる。口の悪い人は「C♯はD♭だ」という。Cシャープ(ドの半音上)とDフラット(レの半音下)が同じ音階になることを揶揄して「C#の本質はDelphi(D)より格下だ」と言うわけだ。
言語には好みがあるので、一概に良い悪いは論じられないが、言語設計者としてはアンダース・ヘルスバーグの方を評価する人の方が多い。業績を見る限り、ジェームズ・ゴスリンは言語設計の専門家ではないようなので、当然のことだろう。
●どの言語を学習するか
Visual BasicもC#も、事実上マイクロソフトのOSでしか動作しない。だから、LinuxやUNIXで動作するプログラムを作りたいのであれば、Javaを学んだ方がいいだろう。
もっとも、前述の通りC#とJavaはC++という共通の祖先を持つため、一方が理解できれば他方の習得は難しくないので、あまり神経質になることはない。どちらもclassという概念があり、セミコロンや{}などの複雑な記号を駆使する。
PerlやPythonといったスクリプト言語(最近はLightweight Languageと呼ぶ)も悪くない。Lightweight Language(LL)は、大規模なプログラムに向かない代わりに簡単に利用できる。ちょうど、かつてのBASICと同じような地位にある言語だ(もちろん当時のBASICよりもずっと進化しているため、昔よりは大きなプログラムが組める)。
多くのLLはWindows上でも動作するため、手持ちのクライアントPCで動作させることもできる。ただし、プログラム実行前に「ランタイムライブラリ」と呼ばれるファイルをインストールする必要があるかも知れない。現在のWindowsはC#のランタイムライブラリを含むため、C#なら余計な手間はかからない。
●どうやって学習するか
私が短いコードを書けるプログラム言語はFortran、Basic、C、C++、Lisp、Prologなどである (C#はいまだに勉強中)。たぶん、最近の平均的なプログラマよりは多いと思う(もちろん、総合的なコーディング能力ではプロのプログラマにはまったく太刀打ちできないだろうが)。プログラム言語の学習にはさまざまな流儀があるが、私は以下のやり方で学習してきた。
- 参考書を1冊購入するか講習会を受講する
- 例題をキーボードから手入力して確認する
- 演習問題をやる
- 人に教える
参考書の選択は重要であるが好みの問題も大きい。必要なことは、言語仕様の全容が理解できることと、演習問題が多いことである。書籍の方が読みやすいと思うが、これは慣れの問題なのでWeb上のドキュメントでも良い。ただし、なるべく定評のある参考書を選びたい。私は職権を生かして、勤務先の講習会テキストを使っている。
最も大事なところは「例題を手入力する」というところだ。これを俗に「写経」と呼ぶ。「写経」が有益であることは、私の同僚たちを含め多くの人が認めている。私の先輩たちはペンで書き写したそうだが、そこまでする必要はないだろう。重要なことは、思考の速度で入力を行なうことだ。コピー&ペーストでは速すぎて思考が付いてこない。
最近の講習会は、受講者の要望に応えるためにサンプルアプリケーションのファイルを用意していることが多い。しかし、本当に理解するには手入力をおすすめする。
ちなみに、私の指導教授は当時既に結構なお年だったのにタイピングが大変早かった。聞けば「わしらの頃(学生時代)はコピー機がなかった(から文献はコピーではなくタイプ打ちした)」と言われた。
サンプルが理解できれば、演習問題を行なったり、自分で問題を考えてみたりする。理想的には、自分や同僚が抱えている問題を解決するプログラムを作成することだ。そういえば、私の元同僚は頼まれもしないのに、趣味で業務アプリケーションをたくさん作っていた。
独学で理解が難しい部分もあるかも知れない。その場合は人に聞くのが一番の近道だ。私は学生時代「再帰呼び出し」を使ったプログラムに苦労したが、ゼミの先輩に聞いたら30分で解決した。何冊も本を読むよりずっと効果的だ。質問できる人を捜すのが難しいかも知れないが、勉強会を主催するなどして頑張って欲しい。
最後の仕上げが「人に教える」である。正直に言うと、人に教える機会がなかった言語は勉強を始めても習得できなかった。たとえばPascalはそれほど難しい言語ではないのだが、講習会を担当する機会がなかったので、結局ものになっていない。逆に、講習会を担当していたLispやPrologは、非常に変わった言語であるにもかかわらず、かなり自由にプログラムを作れる。
どんなことでも深く理解する手順はすべて同じで、「理解する(本を読む)」「やってみる(例題を解く)」「成果を得る(問題を解決する)」「人に教える」ということである。最後は生身の人間に説明するのが最も効果的だが、無理ならブログでも何でもいいから解説記事を書いてみて欲しい。理解度が格段に上がる。
これから、クラウド時代になり、プログラムを作る機会が以前より増えると予測している。どんな言語でもいいから1つマスターしていると、きっと役に立つはずだ。