2008年04月27日 00:05 [Edit]

初心者本3.0? - 書評 - Jythonプログラミング

毎日コミュニケーションズ編集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の由来を書くのを忘れたけど、ちょうどよかった。宿題にします。序文中に答えがありますよ。


この記事へのトラックバックURL

この記事へのトラックバック
書評リンク - Jythonプログラミング
Jythonプログラミング【書評リンク】at 2008年09月23日 09:56
まあこんな「ドコ」でもいそうな、中国かインドに仕事持ってかれちゃいそうな 「オレ」の愚痴はどうでもいいのですが.... PerlよりRubyよりJavaがサラブレットなんです。 - オレドコBlogいっても良いですか?PerlとかRubyとかツールであって言語じゃないんです。Javaは言語...
make love || halt # 言葉遊びがない言語なんて...【404 Blog Not Found】at 2008年07月09日 16:52
Jythonプログラミング(2008/04/29)西尾 泰和商品詳細を見る 目次でも書いときますかね あとカンタンな感想で勘弁な。
アレの目次とか【ウソブキ粒子( ・з・)〜♪】at 2008年05月28日 23:25
インスパイア元は こちら #include &lt;stdio.h&gt; i...
"Hello, world" in less lines.【FloralCompany.log】at 2008年04月28日 12:26
はしかにかかったみたい。なにやってんだろうねぇ... # sort_list # 二分木的にわけていく、[a,b]という単位で、aが基準値とそれ以下、bがそれを超える数 # ということは、nとn+1の要素を比べてどんどん交換していくということか? # 結局、左から大きい順に並べていく方
Pythonへの熱い思い その後【HPO:機密日誌】at 2008年04月26日 23:44
この記事へのコメント
return printf("Hello, world!\n");
とした初心者本が意外と無いんですよね
Posted by 通りすがりさん at 2008年04月30日 19:27
通りすがりさん、
あ、本当だ。というわけで「半分に折り畳み」ました。
Dan the Typo Generator
Posted by at 2008年04月30日 09:33
>版型もA4に抑えた上で
「入門Haskell」などと同じ版型、ということであればA5です。
Posted by 通りすがり at 2008年04月29日 22:52
各位、
ありがとうございました。
・何もインクルードしていないので
<>をescapeしわすれてました。
Dan the Typo Generator
Posted by at 2008年04月26日 21:21
#include <stdio.h>
void main(){
printf("Hello, world!\n");
}

・何もインクルードしていないのでコンパイルが通りません。
・void にすれば return はいりません。
Posted by これはひどい at 2008年04月26日 20:20
>よけいな行があるし(実際は

'(' が閉じてないと警告。

Rhino で初心者向けの本があれば理想的なのに。
Posted by ■□ Neon / himorogi □■ at 2008年04月26日 15:44