最もタメになる「初心者用言語」2008年02月05日 01時43分50秒

いくつかの視点があります。断定できるほど確からしい結論が出せていないのでとりあえず列挙してみます。

1. 言語というよりツールとして、何が出来るのかが見て取りやすいもの

多くの人は、プログラミングを学び始めるきっかけは、目的を伴うのではないかと思っています。そこで、その目的を達成するまでの道のりが明確であればあるほど、初心者を呼び込みやすいのではないかと思っています。

この場合、以下のような例が挙げられるのではないかと思います。

  • ブラウザの画面上で、Web ページに動きを加えたい。 -> JavaScript
  • CGI 的なもの (いわゆる Web アプリケーション) を作りたい。 -> PHP, RoR
  • ゲームを作りたい。 -> 時代によってさまざまだが、旧くは N-BASIC 的なものから、 VB, HSP, Flash (ActionScript) など。あるいは ASCII のツクールシリーズ的なゲーム作成ツール。
  • 家計簿っぽいものを作りたい。 -> Excel VBA
  • グループウェア上で掲示板的なものを作りたい。 -> LotusScript

ごめん、最後のほうはかなりヤケッパチw

よーするに、ただ漠然と「プログラミングやってみようかなぁ」で始めちゃうと持続しづらいので、何らかの「やりたいこと」あるいは「作りたいもの」を達成するために使うと便利な「ツール」として、これらのプログラミング言語を触れ始める、というのは、入り口としては最もポピュラーなんじゃないかと思う。

昔はそれこそ入り口が本当に BASIC か機械語 (ダンプモニタ) しかなかったものだから、いやでも「プログラミング」というものを意識せざるを得なかった。 HyperCard 的なものが出始めた辺りから、いつしかプログラミング言語は開発環境とセットで「ツール」としての存在感を増し、結果として、多くの初心者に「プログラミング」を意識させないようになっていった。 Microsoft が自社の開発環境に Visual *** なんて名前をつけているのも、そういうニーズを意識しているからこそなんじゃないかと思う。マウス操作で UI が簡単に作れて、ハンドラにロジックをちょこっと加えれば、ほ~ら、あっという間に業務アプリのできあがり~、みたいな。

で、そこから、「プログラミング」という概念そのものに興味を抱くようになるか否かは、その人次第としか言いようが無いと思う。個人的には、自分がやっていることがプログラミングなのかどうか、ということに自分で判別か付くようであれば、割と素質があるんじゃないかと思ってる。一方で、ググって見つけたサンプルを、ただワケも分からずにコピペして、動いたからこれでいいやで済ませちゃっている人は、頭では「俺ってプログラミングやってる、すげー」とか思っているつもりでも、実際にはプログラミングになっていないので、間違っても将来プログラマーになろうとか思わないで欲しい。

こういう気付きのきっかけを、プログラミング言語の仕様が手助けするということは、残念ながら無いと思う。優れた抽象化概念を備えた応用性の高いプログラミング言語は、大抵の場合、こうした気付きを超えた人たちが後から興味を示して入っていくものなので、そこに期待はしないほうがいいと思う。

2. お金がかからず、準備に手間もかからない環境

次に重要なのはこれじゃないかなぁ。今の時代で考えるなら、大抵の初心者の所持する PC には Windows が入っていて、 MS-Office が入っている。この状態で既に整っている開発環境といえば、 Javascript と VBA ぐらいじゃないかと思う。

一方、 Windows であっても、ただでダウンロードしてインストールできる開発環境というのは物凄くたくさんある。 VC++ でさえ、MFC を使わないのであれば、 Express 版の Visual Studio をインストールすれば、プログラミングからデバッグまで完全にこなせるようになった。ホントいい時代だよ。

そうした中で、初心者が食いつきやすくなる目安として重要なのは、開発環境自体のセットアップの容易さと、面倒見のよさと、メンテナンスの不要さ、なのではないかと思う。 HSP なんかが同人ゲーム作家に喜ばれる一番の理由はそこなんじゃないかと思う。とりあえず HSP をインストールしてしまえば、大抵のものはそれ一つで作れちゃうからだ (使ったこと無いので嘘かもしれませんが ^_^;)。Python なんかも実はそういう意味での魅力がある (らしい)。ブラウザがあればとりあえず動かせちゃう JavaScript なんて、目的が目的ならその極北なんじゃないかとも思う。

一方、Perl でも頑張れば Windows 上でゲーム作りに利用することも出来なくは無いんだけれども、それは ActivePerl を入れただけでは多分無理で、例えば DirectX を扱うためのモジュールは存在すらしない (いや、物凄く一生懸命探せばネットの片隅に転がってはいるかもしれないけど)。ウィンドウイングは Win32::GUI を入れれば可能だけど、そもそも Windows 上でモジュールを入れるためには ActivePerl に付属の ppm というツールを用いなければならないことを知っていなければならないし、最新版を使いたければ cpan を動かすために Visual Studio を導入しなければならず、しかも VC++ 2005 で cpan によるコンパイルを通過させるためには、既存のモジュールの一部を修正しなきゃならなかったりする。そしてそうやって頑張って Win32::GUI を使えるようになった、じゃあ使ってみようって弄ってみてから、実は GDI が使えないことに気がついてひっくり返るというオチ。。。初心者が「やりたい」と思えるようなことにたどり着くまでの道のりが、あまりにも遠すぎるのだ。

3. 「プログラミング」そのものに興味を持ち始めたら…

そんなわけで、個人的には入り口は低くて単純でツールとしての使い勝手に長けているもの、というような、計算機科学者や言語マニアがあんまり重視しない部分を特徴とした環境でもいいのではないかと思う。まぁ、時代が時代だし。

ただ、一方で、そうした活動を通じて、「プログラミング」という概念そのものに、あるいは更には「コンピュータ」とか、「通信」とか、情報学的により広い、よりメタな概念に対して興味を抱くようになった人に対して、そういう人が高みを目指すまでの「道」としての役割を担う存在っていうのは、絶対に必要だと思う。

これは情報学全般という意味では実はプログラミング言語に限ったことではなくて、他の多くの技術的知識に通じるものだとも思う。セキュリティなんてのもその一つだわね。後はネットワークだとか、並列処理だとか、アルゴリズムや数学的なものだとか。

で、プログラミング言語に関して言えば、おいらはここで重要なものはやっぱり「古典」だと思う。そういう意味では、構造化言語でありコンパイル言語であり、「ポインタ」なんていう、いまどきの「参照」なんかよりずっと原始的な概念を用いている言語ということで C 言語、それから C よりも不自由な Pascal 、関数型言語の始祖 LISP、コンピュータがどう動いているのか、っていう部分のリアリズムを見せてくれるアセンブリ or 機械語、といった辺りから、性に合ってそうなものを幾つかかいつまんでみるといいんじゃないかな。

オブジェクト指向を理解するための言語ってのがイマイチ思いつかないんだけど、それこそ Ruby が良かったりするのかな? Java 通はオブジェクト指向ってよりも、デザインパターンドリブンでシステムを組み上げたい人向け、って感じがする。この辺は、古典とは言いがたい「次のステップ」と言うべき存在で、初心者が目的無しに使うべきものかどうかは微妙な気がする。

4. まとめ

結局「この言語がいいよ!」みたいな形でまとめることは、おいらには出来ない、ってのが結論なんだけど、一方でプログラマーを育てるためには、まず未経験者を初心者にしなきゃいけないってこと、それから初心者がレベルアップするための道筋が必要ってこと、この 2点がかなり重要なんじゃないかと思う。逆に、この 2つさえ乗り越えちゃえば、プロの現場に送り込まれても自分で経験を能力へと精進できるようになるんじゃないかと思う。

だから、処方箋としてはこんな感じかなぁ。

  • 餌は必要だよ。VB や HSP や Flash や PHP みたいに、「○○をやりたい (or 作りたい) ならこれ!!」っていうのはあってもいい。
  • 餌は手に届きやすいところに置いた方がいいよ。自分で料理しないと食えない餌に食いつく未経験者はあんまりいないよ。
  • 上級者は初心者と積極的にコンタクトをとるべきだと思うよ。その為には初心者に喜ばれやすそうな技術についてもある程度知識を持っておいたほうがいいかもしれないよ。
  • 分からないところがあると表明する初心者は徹底的に歓迎しよう!! 疑問を抱くということは興味があるということ。こういう子をほったらかしにしちゃいけない!!!
  • より深く学びたい人が、その道筋を見つけられるような環境があるといいと思うよ。掲示板や ML は殺伐となりがち (職人気質の恐いお兄さんがきつい言葉を乱発する場になりがち) だからあんまりオススメできない。ブログもいいけど、本当は地域にサークル的なものがあって、リアルな交流があるほうがいいのかもしれないね。あとは、より良い情報へのアクセスをより容易にしていくこと。これはもう、Web 上での発信に尽きると思う。

蛇足

ところで、PHP のような、言語仕様がイマイチな環境に慣れてしまうと、プログラミングに悪い癖が付く、という話が流布されているけれども、これって真実なんだろうか? おいらは単に、世界観の狭い人が、より良い方法に気付くことができないまま、良くない方法をとり続けているだけのことなんじゃないかと思っているんだけど、どうだろう?

8bits マイコン時代の BASIC だって、今からすれば決して褒められたような言語ではないけど、 Nxx-BASIC から入ったっていう人はこの業界に決して少なくない。でも、そういう人たちでも、今ではずっとずっと抽象的な概念を理解し、うまく活用してプログラムを書くことができている人がほとんどだと思う (おいらも僭越ながらそういう一人に数えられる程度には自信がある)。結局重要なのは入り口の質ではなくて、その後の経験と、当人自身の向上心なんじゃないかな。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
おいらがやっている会社の名前をひらがな4文字で。

コメント:

トラックバック

このエントリのトラックバックURL: http://harapeko.asablo.jp/blog/2008/02/05/2602601/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。

_ りるでい@みすぴー - 2008/02/05 22:41:11

[言語] 初心者向けの言語(Matzにっき) http://www.rubyist.net/~matz/20080204.html#p01 まとめはこちら。 最もタメになる「初心者用言語」まとめ(UK is not Britonish) http://generation1986.g.hatena.ne.jp/ukstudio/20080204/1202113687 あれ、HTMLがないな。とかは