Lisp Vision

概要

このページではCommon Lisp及び「独学 Common Lisp」のビジョンについて記述します。

独学 Common Lisp の目的

このサイトの目的は「Common Lispユーザーの裾野を広げること」です。

解説

健全なプログラミング言語には健全なユーザーが存在します。トップハッカーから初心者まで、幅広い層のユーザーがおり、知識を共有しあって言語を維持・発展させていきます。

しかし、MITのようなアカデミックな領域で開発されてきたCommon Lispには、他の言語に見られるようなユーザーの幅広い裾野が存在しません。Lispの文化を知ろうともしない多くの普通のプログラマと、Lispの魅力に取り憑かれてしまったごく少数のハッカーが存在します。プログラムやライブラリはごく少数のハッカーだけでも生産できますが、健全なユーザーコミュニティや知識の共有は一定のユーザーが存在しなければ育まれないのです。

私は特に、趣味プログラマを重視しています。自分自身が中学生からプログラミングを始め、様々な言語を学んできましたが、私と同じように「愛用の言語」としてLispを選ぶのは、様々な言語の習得を通じて言語の多様性を学び、結果的にLispにたどり着いた、という人になるのではないかと考えているからです。仕事でプログラミングをするならC, Java, Pythonを身につけるでしょうが、それでは満足できない一部のプログラマがLispを求めるのではないかと考えます。しかし、そのようなプログラマも、必ずしもLisp自体のスキルについてトップレベルにまで引き上げていくということは少なく、単にLispを知りたい、学んでみたいという動機で学ぶことも多いのではないかと思うのです。

このサイトでは、知的好奇心を満たすためにLispを学ぶ方を主な読者として想定しますが、数学的・研究的にはならないように心がけます。なぜなら、プログラマの問題関心は非常に多様であり、文字列処理が好きな人もいれば画像処理が得意な人もおり、データベースを使いたい衝動に駆られている人もいるだろうと考えるからです。そのため、特定の領域の知識・技術を深く紹介することよりも、様々な領域の知識を浅く広く紹介することを重視しています。

以上の背景を踏まえ、当サイトでは「Common Lispユーザーの裾野を広げること」を目的としてコンテンツを構築していきます。

Common Lispの過去・現在・未来

このサイトではCommon Lispユーザーの裾野を広げることを目的とする一方で、Common Lispが産業界で広く使われるようになることを目指すものではありません。Common Lispがミドルスキルプログラマ以上にとっての「教養(リベラルアーツ)」となることを目指します。

解説

Lispは過去において、普及という面では成功と失敗を共に経験してきました。しかし、私はLispの過去の栄光を紹介して復権を試みるのではなく、プログラミング言語としてのLispそのものに価値を見出しています。

ANSI Common Lispは純粋に完成された言語仕様であり、時代が移り変わっても更新が必要であるとは考えていません。私はLispに対して工学ではなく数学・哲学であることを望みます。(Lisp自体は数学的な美しさがあるものと考えますが、このサイトを数学的にしたいとは考えていません。)

プログラミングは2020年度から小学生でも学ぶようになり、特にPythonのようなシンプルな言語はこれからも普及していくでしょう。しかし、優秀なビジネスマンが母国語・英語・会計・経営・法務・税務・ITなど多様なスキルを身につけるように、これからは多くの優秀なプログラマが多様な問題領域に多様な方法でアプローチする必要が出てくると予想します。全ての自然言語が英語に集約せず多様性が維持されているように、プログラミング言語の多様性もまた増えていくと考えます。

このような将来的なプログラミング動向を見据えた時に、知的思考・知的生産の一助になる言語がLispであると考えます。

Lispの最大の特徴で、他の言語が模倣できない点が「コードをデータで表すこと」です。言語には固有の歴史的出自があり、どの言語も長所と短所を併せ持っていますが、「コードを処理するコード」をLispほど簡単に扱える言語は存在しません。Lispはそれ自体が「メタ」、すなわち形而上学的な特質を持っています。

この特徴はLispの理解を難しくしている一方で、Lispに多大なる自由を与えています。多様な問題領域に直面する将来のプログラマに求められるのは自然言語の設計図をプログラミング言語に置換する処理ではなく、プログラミング言語の論理で設計を考える能力であり、俯瞰する力(メタ認知)であると考えます。

Common LispはANSIによって標準化された唯一のLispであり、一度学んだことはそう簡単に失われません。小学生が常用漢字を学ぶように、高校生が様々な数学の公式を覚えるように、大学生が哲学を学ぶように、ミドルスキル以上を目指すプログラマは(たとえよく使う言語がJavaであっても)一度はCommon Lispに触れるべきであると考えます。

これが、私の考えるCommon Lispの未来です。

私たちにできること

私よりプログラミング能力が高い人はたくさんいるので、私はCommon Lispに関する日本語の情報を蓄積することでCommon Lispユーザーの裾野を広げ、将来の「独学者」の糧になるように備えたいと考えています。

教育機関・教員にできること

LispはMITを中心とする大学で成長してきたので、我が国でもLispを扱う教育機関・教員は相応に存在すると考えています。

しかし、Lispの教育界隈はあまりにも「アルゴリズムとデータ構造」を重視しすぎており、オブジェクト指向や例外処理などプログラミングの「現場」を軽視しすぎてきました。結果として末尾再帰と継続を習得することだけに専念してしまい、学習者はLispを非力で非現実的な言語として認識することが多かったのではないかと思います。

このサイトでは「Common Lisp 仕様入門」を通じてANSI標準のLispを学ぶことができるようにしています。Lispには多次元がネイティブにサポートされる配列や動的な性格をもつクラス、多重ディスパッチをサポートする総称関数など、末尾再帰と継続以外にも学ぶべき項目はたくさんあります。Common Lispの言語仕様を俯瞰して見た上で、学習者が何を身につけるべきかを再検討してみてはいかがでしょうか。

産業界にできること

Quicklispの登場以後、Common Lispは格段に実用的に(使いやすく)なりました。サードパーティ製ライブラリの充実は言語の健全な発展に必要不可欠であり、このサイトでも「Common Lisp ライブラリ入門」を通じて様々なライブラリを紹介していきたいですし、産業界のリアルプログラマ・ハッカーにはさらなる充実を期待しています。

しかし、ライブラリはいくら充実させていっても、PerlやPythonに勝つことはないでしょう。既存のライブラリが豊富に存在することはPythonにとっては生命線ですが、Common Lispにとっては必ずしも生命線ではありません。

産業界がCommon Lispユーザーの裾野を広げるための最大の貢献は、ユースケースを紹介することだと考えます。

私はiRobot社のルンバや量子コンピュータメーカーD-WaveのOSでCommon Lispが使われていると知り、Common Lispを使っていこうという決意をしました。Common Lispの知識は多くのプログラマの教養として広く浸透すべきですが、実際に使われる場面は「要所」であることが望ましいのではないかと思います。つまり、Webアプリケーションのような領域はPerlでもPythonでもRubyでも実装できますが、いくつかの領域は「あえてCommon Lispを選んだ」というポイントがあるのではないかと思うのです。

(参考)
Yahoo! ショッピング(旧Viaweb)を立ち上げたPaul GrahamがViawebを売却するまでCommon Lispを使っているということを公表しなかったように、技術情報を公表することは難しいかもしれません。しかし、技術的背景が特異であるということは、差別化の観点からも有効であるはずです。もちろん、ここでいう差別化とは顧客に対するサービスの差別化ではなく、従業員であるプログラマを募集する際の差別化です。

Common Lispを実際に使っている企業はプログラマの募集の際に実際のユースケースを紹介するなどして、Common Lispが固有の特徴を持つ言語であることを産業界から認めることが重要なのではないかと考えます。

まとめ

  1. 「独学Common Lisp」はCommon Lispユーザーの裾野を広げることを目的として日本語のドキュメントを蓄積していきます。
  2. Common Lispは工学・ツールではなく哲学・教養、すなわちプログラマのリベラルアーツとして広く認知されることを将来的に期待しています。
なお、このサイトでは日本語の情報を蓄積していきますが、参照先は英語の一次情報を優先して使います(ANSI標準やライブラリのマニュアル、ドキュメント文字列などを参考に記述していきます)。

また、ブログのシステムを利用して更新していきますが、情報はストックされなければ意味がないと考えているので、時とともに後ろに流れるのではなく、適切なガイドページを用意して時間的に普遍な価値を持つ情報を「蓄積」したいと考えています。

=====平成30年1月18日 第1版=====

0 件のコメント :

コメントを投稿