Hatena::Groupbugrammer

蟲!虫!蟲!

Esehara Profile Site (by Heroku) / Github / bookable.jp (My Service)
過去の記事一覧はこちら

なにかあったら「えせはら あっと Gmail」まで送って頂ければ幸いです。
株式会社マリーチでは、Pythonやdjango、また自然言語処理を使ったお仕事を探しています

 | 

2013-05-05

[]『コーディングを支える技術』は一年間プログラミングをしたあとに読むと丁度いいかもしれない。 01:51


 『コーディングを支える技術』は、僕が読む限り名著だし、同じ職場で働いている人にも薦めたら、「これは絶対買います」といって、翌日に書いたりしていた。だから、この本は間違いなく、僕からしても良書だったし、たぶん僕以外にも「とてもいい本だ」と判断してくれる人はたくさんいるだろう。そういう意味では、凄く良い本だと思う。

 だけれども、いくら良書と言えども、その良書というのは、たぶん読むタイミングみたいなものがあって、その読むタイミングよって力を発揮する本というのは確実にある。で、この本を一読した限りだと、僕みたいな「一年間、二年間くらいプログラミングをなんとなくやってきたけれども、実際にこのコードってどういう風に機械上では処理されているんだろう」という疑問を持ったり、あるいは「なんでこんな面倒くさいシンタックスが、この言語にあるのだろう」といういった疑問を覚え始めた時に、読むと、頭がクリアになる。そういう地図的な本なのかな、という気がしています。あるいは、ちょっと余裕が出てきて、他の言語を勉強しようか、と思ったときにもいいのではないかと。

 で、漠然と「この本はいいですよ」と述べた所で、「じゃあ実際にどんなところがいいところなの」というのを説明しないのも滑稽な話ではあるので、自分が良かったと思うところについて書き残しておきます。

 ちなみに、公式の著者の告知ページはこちらとなっています。

いいところ: シンタックスには理由があることを説明してくれるところ

 僕がメインに使っているPythonにしろ、Rubyにしろ、なぜこれらの言語がこのシンタックスを利用しているのか、というのは、それこそ「言語実装者の思想」というのが反映されているわけだけれども、しかしその「言語実装者の思想」というのは、当然のことながら「過去の資産」から、「こういう風になっているのは面倒くさいから、こうしたほうがいいのではないか」という蓄積の結果でもある。

 例えば、以前の言語、例えばBASICだったりする場合、GOTO文が実装されている。このGOTO文は、任意のコードへと「飛ぶ」という命令になっている。C言語でも、エラー処理を行なうときに、goto文を使ったりする。しかし、自分がPythonを使っている時は、GOTO文っぽいものを使うことは殆ど無いし、あったとしても、「あまり良くないかなあ」と思ったりしまう。

 そう思う人は昔の人にもいたようで、「GOTOで飛ばすくらいだったらエラーが起きそうなところを構文で『ここはエラーが起きるかも知れませんよ』と囲っておいて、『エラーが起きた時はどういう処理をするのか』と書いた方が便利かもしれないね」というような発想が生まれてくる。これが、Javaとかで言う所のtry-catch構文になったりする。

 上記のように、「この構文が使われるようになったのはなぜなのか」ということは、とても歴史的な、いわば蓄積された英知であることは間違いない。そういう歴史的な部分が抜けている自分の場合は、「なるほど、そうだったのか」という風に、目から鱗が落ちる記述が多くある。

いいところ: 言語による比較が存在している

 多くの場合、メインにしている言語というのがなにかしら一つあり、そこから他の言語も覚えると言う流れがあると思う。上にも書いたように、プログラミング言語というのは、「言語実装者の思想」というのが反映されているわけなんだけど、しかし実際のところ、「言語実装者の思想」というのは、一枚岩ではない。例えばPerlならば「there's more than one way to do it - あることをするのにいくつものやり方がある」という考え方を発想しているところがあり、そしてPythonなら「"There should be one―and preferably only one―obvious way to do it"(誰もが正しいと考える、たった一つの方法がある筈だ)」という考え方をしています。

 これはどっちが正しいというわけではないとは思います。僕自身はあまりRubyに関しては馴染めない感じを覚えるのですが(Rubyistの人達には失礼!)、しかしだからといってRubyRubyとしてどうしてそのように考えているのか、ということについて知ることは有益だと思います。なぜなら、そのように考えるのは何かの理由があるからです。そして、その理由を理解することによって、「自分の言語で使えるアイデアというものはないものなのか」という風に刺激を受けることがあります。

 よく思うことの一つに、「自分が使っているプログラミング言語のことを知ろうとしたときに、他の言語のことを知るということは、とても重要だな」というところです。ですので、プログラミング言語同士の比較が載っているこの本はとても面白いなと思いながら読んでいます。

いいところ: 実際にどんな処理が機械的にどういう処理をしているかの概説がある

 例えば、次のような疑問を思い浮かんだりしませんか。

  • そもそもプログラミング言語ってどういう処理をしたりしているの?
  • 「スコープ」って言われるけど、スコープってどういうことなの?
  • リストとかハッシュテーブルってどういうことをしてるのさ?
  • 「型」ってどういう風に処理しているの?

 上記のことというのは、ちゃんと書き記せば、膨大な話になるとは思うのですが、この本の場合は、「とりあえずこういう風になっているようだよ」といったように、だいたいの概説を紹介してくれています。もちろん、本書に具体的に突っ込んだ話は、紙面の都合上できない部分もあるのかな、と思うのですが、それは興味が湧いた分野に、さらに突っ込んでいくのがいいのかなと思います。

いいところ: 「じゃあどうやって勉強するの」というロードマップ、そしてそのTips

 面白いのは、この本が「こういう技術があるんだよ」というのを紹介しているわけですが、それ自体がロードマップになっている。つまり、どういう領域が「勉強できるのか」といったロードマップになっている側面があると思います。それと同時に、ところどころに出てくる「こういう風に勉強するといいよ」という話がのってあり、それを読むと、より本書の立ち位置みたいなのと同時に、どう勉強していくかというのがわかりやすくていいと思います。

 例えば、134pには「おおまかにつかんで徐々に詳細化する」といったようなコラムがのっています。本書も、まずは「おおまかにつかむ」ということを重要にしているかと思います。そういう意味では、本書から「おおまかにつかみ」、自分の興味のある領域に進んでいくというのはとてもいいアプローチなのかなと思ったりします。

少し気になった所: さらに深く学ぶための書籍紹介があったら嬉しかった

 ちょっと気になったところで、瑣末な点ではありますが、本書は註があり、興味があるトピックスに関しては註に紹介されている文献を読むのもいいとは思うのですが、もしかしたら章の最後辺りに「こういう本や論文を読めば、このトピックスについてよくわかると思うよ」みたいな本が薦められていると、学習として、次のステップになるのかな、と思いました。もしかしたら公式の告知ページでフォローアップしてくれるかもしれないので、そのあたりを少し期待したいところであります。

まとめ: プログラミングには歴史と思想が詰まっている

 当たり前といえば当たり前かもしれませんが、プログラミングというのは、ただ今行なわれていることではなく、過去からずっと「どういう風にすれば、開発者が気持ちよく開発できるのか」という集積であり、同時に、そういう「気持ちよさ」があるからこそ、残っている部分は否めないと思います。どんな可愛さ余って憎さ百倍的なプログラミング言語であったとしても、その歴史の上にいることは間違いないように感じます。そういう歴史に思いを馳せ、また「思想」にコミットし、そして、そこで今後どういう風に自分はプログラミングに対して、どういう意識を持って取り組むのか、ということを考えるのには、とてもいい本だと思います。

 逆にいうならば、まず「プログラミングをすることが大変」という人は、ちょっとつらいかも知れません。最初にも書いた通り、「プログラミングはなんとかできるようになった」といったときに、この本を読むと、もっと「ああーーーそういうことだったのか」という発見が生まれる。そういう本としては、とても素晴らしい本だと思いますし、自信を持って薦めたい本であります。

今日薦めた本

 |