プログラミング言語初学者に適しているのはIDEかコマンドラインか?
世間から1テンポ遅れて話題にのるのはいつものことですが、今回は「プログラミング言語初学者に適しているのはIDE(統合開発環境)かコマンドラインか?」ということについて、少し書いてみたいと思います。
結論からいえば、状況次第だと思います。対象としているプログラミング言語初学者というのが一体どんな人物で、どんなプログラミング言語をどんな環境で学習しようとしているのか、当面の目標は何か、最終的には何を目指すのかによって、話はまったく変わってきます。
これからプログラミング言語を学ぼうという人の中には、プログラミングは未経験でもPCには十分精通していることもあれば、(Windowsでいえば)それこそコマンドプロンプトはおろか、エクスプローラさえ使ったことがないという人もいるでしょう。環境変数が分かっている人はさらに少ないでしょうし、レジストリなんかは絶望的かもしれません。
しかし、それらの知識はプログラミング以前のものです。PCを使いこなせないような者がプログラミングをやろうなど10年早いといってしまうのは簡単ですが、そうした人たちをも対象にするのであれば、必要なPCの知識を同時に学ばせる必要があります(どこまでやるかは、やはり状況次第です)。
別の方向からも見ていきましょう。IDEを使った場合、エディタで編集して即実行することができてしまいます。もしエラーが出た場合、それがコンパイル時に発生したのか、リンク時に発生したのか、実行時に発生したのかが区別しにくいのも事実です。しかし、スクリプト言語や、コンパイル言語であってもリンクの概念が表にほぼ出てこないものであれば、この問題はあまり気にしなくてもよいのかもしれません。その意味では言語依存だといえます。
IDEの入力補完機能が初学者の強い味方になるという主張もあるようです。しかし、入力補完機能はエディタの機能であり、IDEを使うかコマンドラインを使うかの問題とは別です。コマンドライン派であっても、エディタもコマンドラインのエディタを使えという人は少数派でしょう。まあ、vi を使えという人ぐらいはいますが、WindowsでEDLINやECHOコマンドを使えという人がいれば、頭がおかしいといわざるを得ません。
入力補完機能については言語依存でもあります。JavaやC#、VBなどは、入力補完機能も優れており、それなりに頼りになるかと思います。しかし、CやC++に関していえば、入力補完機能はそれほど頼りにならず、ときどきミスリードもありますし、それ以前に(とくに非力なマシンにおいて)フリーズを引き起こす原因にさえなります。これでは本質ではないことに初学者が悩まされることになり、便利なのかどうか怪しいものです。
原理主義的にコマンドラインを勧めるのも問題があります。先ほど出てきたエディタについてもそうですが、ファイルのコピーやディレクトリの作成など、エクスプローラでできることはエクスプローラでやっても十分です。もっとも、コマンドプロンプトの操作に慣れていて、いちいちマウスに持ち替えるよりキーボードで操作した方が早いという人は、そうすればよいと思います。
スクリプト言語の場合は、IDEでもコマンドラインでも大差ないような気がします。ただ、コマンドラインを使い慣れている場合には、エディタで最初のサンプルプログラムを入力して、1行コマンドを打つだけで済むところを、わざわざ時間をかけてEclipse等をインストールし、数Gバイトのディスクを浪費し、プロジェクトを作成し、ソースファイルをプロジェクトに追加し、複雑なメニューと格闘した末にやっと実行できるIDEを最初から使いたいとは思わないでしょう。
Cでも似たようなことがいえます。とりあえず Hello, World! を動かしてみるのに、Visual C++をインストールし、ソリューションって何? プロジェクトとは? 「error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。」とわけの分からないエラーが出ます。実行はできたようですが、一瞬黒い画面が出てすぐに閉じてしまいます。と、パニックに陥ります。
ここまで書くと、私は純粋なコマンドライン派のように見えるかもしれません。確かに、CやC++は最初はコマンドラインを勧めています。これは、コマンドラインの方がコンパイル、リンク、実行という手順が理解しやすいからであり、翻訳単位の概念も理解しやすいからです。リンクや翻訳単位のことをあまり気にしなくてもよい言語であれば、IDEから始めてよいと思います。
仮にコマンドラインで始めたとしても、デバッガを使う段階、あるいはMakefileが必要になる段階では、やはりIDEに切り替えることを勧めています。その段階になれば、IDEのたくさんあるメニューやオプション設定も、ある程度は理解できるようになっているはずですから。もっとも、IDEがない、または実質的に使えない状況では、引き続きコマンドラインを使うことを勧めます。実際に使うわけではないのに、IDEがあるというだけで別の環境を使って遠回りさせるのはナンセンスだからです。
あと、IDEとコマンドラインの話とは直接関係ないのかもしれませんが、厳密な話はできるだけ後回しにして、どんどん先に進むのがよいという意見もあれば、できるだけ着実に理解を深めながら先に進む方がよいという意見もあるようです。私は、これらのうちどちらがよいかは、その人が最終的に何を目指すかによるのではないかと考えています。
例えていうなら、いくつかのファーストフード店でアルバイトを行っているA君と、老舗の料亭で修行しているB君がいたとします。1年経ってみて、A君はハンバーガーも牛丼も立ち食いそばも作れるようになったけれども、B君はまだ野菜の皮むきと皿洗い中心の仕事をしていました。A君はB君より優れた料理人だといえるのでしょうか? 目先のことだけを考えればA君の方ができることは多いわけですが、だからといって、A君の経験の積み方がB君より優れているというわけではありません。
同様に、"何とかウィザード"に指示されたとおり、フレームワークの該当部分にどこかから拾ってきたサンプルコードを貼り合わせて、とにかく動くものを作ることを優先するというやりかたもありでしょう。一方で、確実に一歩ずつ下積みを重ねていくというやりかたもありでしょう。結局は、最終的に何を目指すかによります。
