43 プログラミング言語は複数習得すべき(Russel Winder) 『プログラマが知るべき97のこと 』

プログラミング言語の本

プログラマが知るべき97のこと

本記事は、株式会社オライリー・ジャパンより出版された『プログラマが知るべき97のこと』の中からひとつのエッセイを取り上げ、そのエッセイをクリエイティブ・コモンズ表示3.0の条件下で転載したものです。

本書の各々のエッセイは、オープンソースモデルに従い、ほぼ無制限で利用が可能です。クリエイティブ・コモンズ表示3.0の条件下で、自由に使用することができるのです。つまり、どのエッセイも、著者の名前を明記すれば、自由に転載、改変が可能であるということです。

『プログラマが知るべき97のこと』はじめに(p.XII)

なお、原書(英文)のエッセイは、下記のWebサイトで公開されています。 Contributions Appearing in the Book - Programmer 97-things

43 プログラミング言語は複数習得すべき
ラッセル・ワインダー (Russel Winder)

どれだけ多くのパラダイムに親しんでいるか

プログラミング技術の習熟度は、どれだけ多くのプログラミングパラダイムに親しんでいるかによって大きく変わることが知られています。「親しんでいる」とは、名前について知っている、ちょっとかじったことがある、という程度では駄目で、その言語を使って正しくプログラムを書けるということです。

1つの言語しか知らないプログラマ

はじめから複数の言語を知っているプログラマはいません。だれもが言語を一つずつ習得していくのですが、プログラマのソフトウェアに対する考え方は、どの言語を使用しているかによって大きく左右されます。

特に最初に覚えた言語の影響は大きくなります。何年プログラミングを経験しようとも、ずっと同じ言語だけを使い、1つの言語しか知らないプログラマは、その言語の枠の中でしかものを考えられなくなってしまいます。

新たに言語を学ぶのには困難が伴う

プログラマにとって、新たに言語を学ぶのは、かなり大変なことです。特に、最初に覚えた言語とはパラダイムの異なる言語を第二の言語として習得しようとすれば、そこには困難が伴います。

C、Pascal、Fortran などは同じパラダイムなので、たとえば、Fortranを最初に学んだ人が新たにCを学ぶ場合、さほど苦労はしないでしょう。

しかし、CやFortranを使っていた人がC++やAdaを学ぼうとすれば、おそらく苦労することになるはずです。プログラムの振る舞いに根本的な違いがあるからです。

同様に、C++を使っていた人がHaskellを学ぶことや、Cを使っていた人がPrologを学ぶことも、言語の性質が大きく違っているために困難を伴うでしょう。

プログラミング言語のパラダイム

プログラミング言語のパラダイムは大きく、手続き型、オブジェクト指向型、関数型、論理型、データフロー型などに分類することができます。2番目に学ぶ言語のパラダイムが最初の言語と同じであれば習得は楽ですが、パラダイムが違っていると、習得は困難になります。

第二の言語には最初の言語と違うパラダイムの言語を

しかし第二の言語には、是非とも、最初の言語とは違うパラダイムの言語を選ぶべきです。それはなぜかというと、パラダイムの違う言語を学ぶと、アルゴリズム、イディオム、パターンの実装について嫌でも考えるようになるからです。

同様のアルゴリズムを実装するにしても、色々なやりかたがあり得ることに気づきます。この体験が、プログラマの技術を大きく向上させます。

ある問題を解決するのに言語Aではこのイディオムを使用するが、言語Bで同じイディオムは使えないというような体験が重要なのです。イディオムを言語Bでも使えるものに移植しようとすれば、両方の言語について、解決する問題について、よく考え学ぶ必要が出てくるからです。

様々なパラダイムを取り入れる

パラダイムの違う言語を学ぶ効用は他にもたくさんあります。最も顕著な効用は、1つのパラダイムしか知らなければ思いつかないような表現を使用することができるということです。

たとえば、宣言型言語の経験を積んだユーザーなら、Cのような命令型言語においてもそのパラダイムを使用することができるでしょう。宣言型パラダイムを取り入れることにより、より簡潔で理解しやすいプログラムを書くことが可能になります。

C++などの言語は、初めから様々なパラダイムの語法を使用できるような作りになっています。それらの言語では、様々なパラダイムに関する知識は、むしろ必須のものになっていると言えるでしょう。

パラダイムの違う言語を学べば、普段使っている言語をよりうまく使いこなせるようになる

プログラマは少なくとも2つのパラダイムの言語を使いこなせるようになるべきです。もちろん、先に触れた5つのパラダイムすべての言語を使いこなせるというのが理想です。

プログラマは常に新しい言語、特に馴染みのないパラダイムの言語を学ぶ意欲を持つべきでしょう。たとえ日々の業務で使う言語が1つだけだったとしても、パラダイムの違う言語を学べば、普段使っている言語をよりうまく使いこなせるようになります。実際に試してみれば効果に驚くことになるはずです。

企業もそれを考慮し、社員が新たな言語を学ぶことを奨励すべきでしょう。できれば、そのための予算も確保しておくことが望ましいと言えます。

大事なのは言語のイディオムを身につけること

ただし、1周間のトレーニングコースを受ける、という程度の学習では不十分です。良いきっかけにはなるでしょうが、それだけで新たな言語を学んだとは言えません。言語を使いこなせるレベルになるためには、何ヶ月かの間、毎日少しずつでもその言語に触れる必要があるでしょう。

大事なのは、その言語の構文や計算モデルについて知るだけではなく、言語のイディオムを身につけることです。

プログラマが知るべき97のこと
オライリージャパン
売り上げランキング: 10,950