例題で学ぶJava言語

例題で学ぶJava言語

例題で学ぶJava言語

 以前にも紹介したと思う。この本、工学部図書館に6冊も入ってるのだが、その割にロクでもない内容である。誤字脱字はもちろんのこと、解釈不能な文章とか何のために描かれたのか不明なイラストが散りばめられている。
 また、構成にも難があり、私なぞは一回読んだだけで投げ捨てた記憶がある。

 Amazonでのレビューはこちら

プログラム例が非常にわかりにくく、とっつきがたい感があります。
初心者の方にはお勧めしません。
変数に日本語を使っていたりするのでこの本で基礎を固めてしまうと
後々困るとおもいます。

 しかしもはや、この本からそれらを再抽出する手間も暇もかけたくないので、最も特定の簡単だった一例のみを示しておこう。
 この本でもスレッドについて解説されている。並列処理を実現するための概念として紹介されており、Javaでも標準装備されている、とある。そこまではいいのだが、ではどの様にしてスレッドを生成するのかで、次のようなプログラムに続いて問題のイラストが示されるのだ。

class ThreadCreation
{
  public static void main(String[] args)
    {
      Thread スレッド1 = new StartThread("スレッド-1",5000L);
      Thread スレッド2 = new StartThread("スレッド-2",7000L);
      Thread スレッド3 = new StartThread("スレッド-3",4000L);

      スレッド1.start();
      スレッド2.start();
      スレッド3.start();
    }
}
class StartThread extends Thread
{
  String 名前;
  long 時;
  StartThread(String スレッド名, long 遅延時間)
    {
      名前 = スレッド名;
      時間 = 遅延時間);
    }

  public void run()
    {
      try
        {
          while(true)
            {
              sleep(時間);
              System.out.println(名前);
            }
        }
      catch(InteruptedException error_report)
        {
          System.out.println(error_report);
          System.exit(1);
        }
    } 
}

※実際のプログラムリストはtab間隔が半角4つ。

 まず、このプログラムリストの何がとっつきにくいかと言うと、改行位置が通常のJava解説書と著しく異なること。{}のブロック構造の可視性を重視したためかブロックの名前の直後に改行しそこでまずtabし、更にブロックの中身でtabするため、tab深度がやたら増えている。この程度のプログラムならまだ良いが、ブロックの入れ子が増えるとtab深度が増えてあっという間にソースが右の欄外に飛んでいってしまうこと請け合いである。
 またAmazonのレビューにもあったように、変数名を漢字で書く(一部のJavaは識別子にUnicode文字が使える)ためソースの汎用性が落ちる。
 また、実行結果の出力例

$ javac StartThread.java
$ javac ThreadCreation.java
$ java ThreadCreation
スレッド-3
スレッド-1
スレッド-2
スレッド-3
スレッド-1
スレッド-3
スレッド-2
スレッド-1
スレッド-3

があるのはいいとして、なぜこの様な順番に出力されるかの解説がない。考えりゃ分かるだろ的な気分で飛ばしたのだろうが「なぜこの順番になるのか、考えてみよう。」程度の誘導が無いと、ある者は”これはスレッドに対してランダムに順番が割り振られたためだ”と考えるかも知れない・・・というか俺がそうだった。
 (本格学習Java入門(佐々木整著)にはこの仕組みが時間軸の図入りで解説されていた。)

 まあ、そんなことは良い。それよりも著者に厳しく問いただしたいのは、上に挙げたイラストである。

 一体全体著者どもはこの図で何を分からせたかったのであろうか?
 全く持って謎である。
 いや、スレッドを知っている今の俺ならばその知識から類推する事ができるが、初見では無理だった。
 Thread(スレッド)が「糸」を意味する事は先に解説されているからいいとして、その糸が四角の中でうねうね並んでいてもだからどうした?といった感じである。しかも「プロセス」という用語が説明無しに使われている。困ったものだ。

プロセス(process「過程、工程、処理、手順」):コンピューター用語では「処理」を意味し、タスクと呼ぶことも多い。オペレーティングシステムはプロセス同士を分離させておいて必要なリソース(ここでは主にメモリ)を割り当て、プロセス間で互いに干渉しあってシステム障害を発生(例えば、デッドロックスラッシング)したりしないようにする。対してスレッドはメモリ空間・データを共有する。)

 俺ならこう描くね!

描くのにかかった時間:1時間。
 少なくともこれくらいはやって欲しいものである!
 また、「各プロセスでスレッドは最低限一つあるものとする。」とか「図では糸の末端でスレッドが消滅するものとする。」とかの解説も入れたい。

 この著者三人は

加藤 暢(近畿大学理工学部講師)
溝渕昭二(近畿大学理工学部講師)
白川洋充(近畿大学理工学部教授)
 ※2002年時点

 である。これは近畿大学のレベルが低いのか、近畿大学理工学部のレベルが低いのか、それとも近畿大学理工学部の講師陣のレベルが低いのか知らないが、一番責められるべきは
こんな本を6冊も図書館に入れさせた奴だ!
なんというムダ!学生に謝れ!