2011-11-07

最初に覚えるべきプログラミング言語って?

どのプログラミング言語を最初に覚えるべきかとたまに聞かれる。聞き手はさまざまだ。アカデミアの人や営業をやっている同僚、トレーダー時代の元同僚など。まあ、こんなエセプログラマーに聞いている時点で既に間違っているのだが、今まではテキトーなことを言ってきた。

やっぱプログラムを始めるならC言語で基礎からじゃないっすかねー

JavaScriptだったらブラウザで走りますし、お手軽ですよ!

Pythonいいっすよー読みやすいし

日本人ならMatzに敬意を表してRubyじゃないっすか

数学者なら意外とHaskellがとっつきやすいかも...

我ながら無責任なものである。RubyとHaskellにいたっては書いたことすらない。なんでこんないい加減な受け答えをしてきたかといえば、どの言語でプログラミングを覚えるかは、さほど重要ではないと考えているからだ。例えば世界的にウンコ言語とされているPHP1でも優秀なプログラマーというのはいるものである。(筆者が訳しました)

最近、この考え方を改めることにした。これからは「プログラミングを覚えたいんですが、どの言語がいいですかね」と聞かれたら、「まずUnixの基本的な使い方を覚えましょう」ということにする。

Unixは、未だGoogleで現役のKen Thompsonと最近亡くなったDennis Ritchieによって30年以上前に発明されたオペレーティングシステムだ。いや、オペレーティングシステムの哲学といったほうが正確かもしれない。LinuxやFreeBSDといったUnix的なシステムが世界中で日夜稼働し、情報のインフラを支えている。Linuxにもいろいろ種類があったり、他にもOpenBSDなるものもあるのだが、ここでは語弊を承知で、Unix的なOSをまとめてUnixと呼ぶ2

Unixには様々な小さなプログラムが備わっている。grepやfind、sortにtrなどのシンプルだけど便利なプログラムや、awkやsedといったミニプログラミング言語を組み合わせることで、かなり便利なことができてしまう。これは偶然でもなんでもなく、こうなるようにUnixはデザインされているのだ。先ほど「Unixの基本的な使い方」と言ったが、Unixを覚えるということは、これらの小さなプログラムの使い方を覚えることだと言ってもいい。

Unixを最初に覚えるメリットは、ぼく的には3つある。

  1. 多くの場合、手元の問題を解決するのに最短の方法であること。ファイルをソートしたり、ウェブページを10分ごとにダウンロードするといった作業なら、ほんの2、3行Unixのコマンドを書くだけでできてしまう。わざわざプログラミング言語を覚えるまでもないのだ。
  2. 大体どのプログラミング言語を勉強するにしても最終的にはUnixの知識が必要になる。Windows上で開発をしたり、iOSにどっぶり浸かっているなら別だが、遠かれ近かれどのプログラミング言語を使っていても、ある時点でUnixに関わることになる。どうせ必要になる知識だったら最初から少し覚えてしまいましょってわけだ。
  3. 体系的に覚える必要があまりない。Unixは自然言語と似ていて、初心者からエキスパートまで、経験に見合った使い方ができる。そして、仕事の場で教えてもらったりググったりして徐々に知識を増やしていける。そんなのプログラミング言語も一緒だと思うかもしれないが、Unixは特にその傾向が強いと思う。

長々と書いてきたが、これは一応書評なので、「Unixを使って何ができるか知りたいならこの一冊!」という本を紹介したい。

この本は、ぼくがまだ学生だった時に、Bioinformaticsのポスドクをしていた知り合いに勧められたものである。そう彼はプログラマーではないのだ。プログラマーではない彼が、Bioinformaticsの研究をやるうえでUnixの基礎知識は欠かせないといっていたが、今はそれがよくわかる。手軽にファイルを解析したりするにはUnixのツール群はとても便利なのだ。

この本の良いところは、「◯◯をするにはこうしよう」という風に、目的別で構成されているところである。一つ一つのセクションも短いので、便所に置いておいて、ウンコの時に面白そうなセクションを一つ読むみたいな使い方もできる。一つ注意をしておくと、これはプログラミングを覚える本ではない。タイトルにもあるように、「Unixパワーツール」をいかに使いこなして手元の問題を解決するためのものだ。でも正直、90%のプログラミングを覚えたい人たちにとって大事なのはプログラミングそのものではなく、プログラミングを駆使して作業を自動化したり、時間を節約することだ。そういう意味でも、どんなプログラミング言語を覚えるよりも先に、この本でUnixの便利さをまず体感してほしい3



  1. こんなことを書いているけれど、ぼくは別にPHPが嫌いではない。仕事で毎日使っていることもあるが、ウェブサイトを書くには便利だと思う。

  2. Unix的OSの発展にはGNU(GNU is Not Unix)の貢献も大きいのだが、これらに関して全部説明しているとキリがないし、ぼくよりも遥かに明瞭に説明できる人たちが沢山いるので、彼らに委ねることにする。

  3. ちなみにWindowsでプログラミングを覚えようという方もいるだろうが、はっきり言ってオススメしない。Windowsはやたらいろんなことがめんどくさい。そんぐらいだったらFreeBSDが原型になっているOSX(Mac)をオススメする。

Creative Commons License