あなたがカッコの多いプログラミング言語でプログラムすべきでない8つの理由

先日Twitter上でこのような画像を目撃してしまいました。
f:id:Hoo:20130401175226j:plain

新年度にあたってプログラミングを始める方々、特に新入生、新社会人におかれましてはこのような宗教勧誘ビラに騙されず、幸せなプログラミングライフを送っていただきたいと切に願い、この記事を書こうと思い立った所存です。

カッコのやたらに多いプログラミング言語でプログラムすべきでない8つの理由

1. あまりに簡単に書けてしまう

Hello Worldを書いた時の比較

Lisp(Common Lisp)

(format t "Hello, World!\n")

C言語

#include <stdio.h>

int main(void){
    printf("Hello, World!\n");
    return 0;
}

C言語はこれを保存、コンパイルして実行しなければいけませんが、LispならREPL上ですぐ実行出来ます。
必要なステップや記述量が、CやJavaに比べ明らかに少ない、この事実が端的にLispが簡単にプログラムを書ける言語だということを示しています。
初心者があまりに簡単にプログラムを書けてしまうせいで、Cでは考えられないほど早くに再帰や関数定義について学ぶことになります。
Cの文字列やポインタでうんうん悩む友達に嫉妬されたくなければLispを学ぶのはやめるべきです。

2. プログラミング環境がぬるすぎる

Common Lispを例に取ると、SLIMEという強力な開発環境が用意されています。
これを使うだけで、エディタ上でコンパイル、関数のテスト、デバッグまでなんでもできてしまいます。
f:id:Hoo:20130401213027p:plain
慣れてしまうと開発環境のない言語でプログラミングするのが苦痛になってしまいます。気をつけましょう。ただし、プログラミング環境をメモ帳とコマンドプロンプト縛りにすることでこの問題は解決するかもしれません。

3. 処理系を作りたくなる

Lispはその単純な構文ゆえ、処理系を作るのが容易です。Lispの魅力に取り憑かれた人が自分でインタプリタコンパイラを作ってみる、というのは珍しいことではありません。
自分の時間をプログラミングに奪われ、見たいアニメを見れなくなってしまう、Twitterで面白いpostをふぁぼる時間がなくなってしまうなどの恐れがあります。注意しましょう。

ニコスクリプトでLispインタプリタを作ってしまった方

4. ぬるいプログラマになってしまう

普通のLispにはGC(ガベージコレクション)がついています。これはプログラムから参照されなくなったメモリを自動で開放するもので、プログラミングの手間を大幅に省いてくれます。またLispの変数は型を持ちません(値には型がある)。これもプログラミングの手間を省きます。
一旦こういった(楽な)言語に慣れると、型をいちいち書かなければならなかったりメモリを手で開放する必要がある言語を使うのが億劫になってしまいます。危険です。

5. 生産性があがってしまう

上の理由により、同じ処理をするプログラムを実装する効率は一般に静的型付けでGCのない言語よりもLispやその影響を受けた言語であるRuby,Python,Perlのほうが高くなります。これは同じ時間で何倍もの仕事を片付けられることを意味します。
自分の仕事量を少なく抑えたい、働きたくないでござる!という人にはLispはオススメ出来ません。

6. 関数型言語とは呼べない

Lisp関数型言語とよく紹介されますが、副作用を持つ手続きを容易にプログラムの中に混入できる点で純粋な関数型言語とは呼べないという指摘があります。
しかしながらこちらについて当方は批判できるほどの知識を持ち合わせていないので批判はHaskellerの皆様に任せようと思います。

7. ((((カッコが多くてキモい))))

括弧がいっぱいあるのをみていると精神が不安定になってきますからね。
すごいHaskell たのしく学ぼう!』P214

8. 信者が怖い

Lispの愛好家たちは一種独特な空気をまとったコミュニティを形成しています。
詳しくは以下の禍々しい表紙の本を読めばわかると思います。

Land of Lisp

Land of Lisp

どうか、これからプログラミングを始めようと思っている、または新しい言語を学ぼうと思っている新入生、新社会人の皆様はこのような危険なプログラミング言語、並びにこの言語の影響を強く受けているJavaScript,Python,Ruby,Perlなどの言語には近寄らないようお願いいたします。


初めての人のためのLISP[増補改訂版]

初めての人のためのLISP[増補改訂版]

入門Common Lisp―関数型4つの特徴とλ(ラムダ)計算

入門Common Lisp―関数型4つの特徴とλ(ラムダ)計算