毎日コミュニケーションズ編集3部書籍1課吉田様経由で著者本人より献本御礼。

初出2008.04.26;発売開始まで更新

著者と同日着である。

宅急便きた - 西尾泰和のはてなダイアリー
意外と厚みもある!

なんとミスリーディングなタイトル!パッケージ!価格設定!

これは中級者しか手を出さないではないか。

ものすごくよくできたプログラミング初心者本なのに。

本書Jythonプログラミングは、プログラミング言語Javaで実装されたプログラミング言語Jythonを通して、現代的なプログラミングに触れる入門書。おそらく想定読者は「すでにJavaを使っていて、Pythonを学びたい人々」なのだけど、それが本書が一番役に立つだろう読者、すなわち「パソコンは使いこなしているけどプログラミングはまだきちんとやってない読者」を逃してしまっている。

目次 - MYCOM BOOKS - Jythonプログラミングより
1 Jythonとは
1-1 Jythonってなに?
1-2 Jythonショートツアー
1-3 言語融合の時代
1-4 Jythonを使うメリット・デメリット
2 Jythonを使う準備
2-1 Javaのインストール
2-2 Jythonのインストール
2-3 Eclipseのインストール
2-4 Pydevのインストール
3 Hello, world!
3-1 Hello, Java world!
3-2 Hello, Jython!
3-3 ファイルから読み込んで実行
3-4 設定ファイルのように使う
3-5 GUIでHello world!
3-6 テキストペインの中身を実行
4 3時間でわかるPython
4-1 Jythonをいじってみよう
4-2 文字列操作・正規表現
4-3 基本的なデータ型
4-4 制御構造
5 Pythonから見たオブジェクト指向
5-1 この章の目的
5-2 「オブジェクト」とは何?
5-3 クラスって必要?
5-4 「変数は箱」を卒業しよう
5-5 クラス変数とインスタンス変数
5-6 タプルはなぜ生まれたか
5-7 継承は万能か?
6 実行時に書き換えるやらわかさ
6-1 はじめに
6-2 JyConsoleを使ってみよう
7 Jythonの応用例
7-1 テスト
7-2 MIDI
7-3 MIDIファイルの出力
8 やわらかさを捨てるには
8-1 なぜやわらかさを捨てる必要があるのか?
8-2 PythonコードをJavaコードに変換する
8-3 コンパイルする
8-4 JARにまとめる
8-5 アプレットを作ってみよう
8-6 JARを部品として使う?
付録
文字列フォーマット操作
Javaオブジェクトへの自動変換
Jythonでの日本語の扱い
importの流儀
標準出力
同名のpublicなフィールドとメソッドがある場合の問題
調べ方
PythonとJavaの比較(演算子編)
PythonとJavaの比較(同一性判定編)
Pythonには型がない?
何が真か
Pythonのprivateもどき
privateなんて飾りです
docstring
Beansプロパティ
署名付きアプレットにしてみる
Javaで可変長引数
ネストしたスコープ
リフレクションでメソッド名一覧
Javaのインポート文をJythonに変換
ファイル読み込みの例
文字列のメソッド

本書は扱っているのがJythonだけあって、Java側からPythonを使う方法も、Python側からJavaを使う方法も触れているが、実はページ数の過半は「変数って何?」「オブジェクトって何?」という初心者向けの設問を、Python的というより動的言語的に説明するのに費やしている。

そのことを考えれば、前述のようにターゲティングした方がよかったと思うのだが。確かに「Javaプログラマー」というのは、今やプログラマーの中では日本で最も多い人種かも知れない。少なくともWEB+DBの編集部によればそうだ。しかし、「プログラムをしていないけど、ちょっと挑戦してみたい人」というのはもっと多いのだ。

実は「やわらかい言語」と「かたい言語」を間を置かず学ぶというのは、Computer Scienceのカリキュラムでは王道である。

404 Blog Not Found:初心者向け言語もいろいろ
Computer Scienceをきちんと教えている学校の多くは、最初の一年の前半に scheme を教えて、後半に C と assembly language を教えている。私が教わったのは1980年代の終わりだけど、21世紀の今になってもこれは変わっていない。このことはもう少し注目されてもよいのではないか。

PythonとJavaの組み合わせというのは、そうなりうる。

ここで「やわらかい言語」と「かたい言語」、PythonとJavaの順序に気をつけて欲しい。やわらかい言語が先なのだ。これは「やわらかい」をずーっとやって、「かたい」をまたずーっとやることを意味するのではなく、双方を行ったり来たりという意味なのだが、やはり最初は「やわらかい」でないといけない。

なぜか。

真っ先に覚えなければならないのが、文法でも関数名でもなく、プログラムが動くよろこびそのものだからである。

その点、「かたい」言語は不利だ。

#include <stdio.h>
int main(int argc, char **argv){
  printf("Hello, world!\n");
}

ですら3行もよけいな行があるし(実際はreturn 0;がないとコンパイラーがケチつけるので4行)、Javaの場合に至っては

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, world!\n");
    }
}

とネストまで一段深い(こういう方法もあるけど、初心者に教えるべきものとは違う)。やはり

print "Hello, world!\n" # perl, python, ruby 共通!

と書ける言語からはじめた方が、教える方の効率も、教わる方の満足度も高い。

個人的には、PythonとJavaのコンボというのは、PyhtonはPerlほどやわらかくなく(たとえばオブジェクトの実装方法そのものは代え難い)、JavaはCほどかたくない(たとえばGCそのものを実装)のだけど、PerlとCのコンボではこれほど薄くできない。Jythonというのは、プログラミングを学び始めるのにそれほど悪くない組み合わせなのではないか。

そう考えれば、本書はCD-ROM添付を端折り、版型もA5に抑えた上で、「入門Haskell」、「入門Common Lisp」、「入門OCaml」のシリーズで売るべきだったと考えるのだが。ついでに価格も2,000円以下に抑えれば、仕入れてでも売ってたのになあ。

とはいえ、税込み3,150円というのは、この分野としては高くない。「Jythonプログラミング」というより、「現代プログラミングの入口」的に使って欲しい一冊。この黄金週間中に、本書を「使いきれ」ば、少なくとも著者や私のプログラミング談義が意味不明でなくなることは確かです。

Dan the Programmer

P.S. 3.0の由来を書くのを忘れたけど、ちょうどよかった。宿題にします。序文中に答えがありますよ。