HitAndBlow

ADPの開発が滞っていますが、思わぬところで話が進んでしまい、今年最後の記事になります。

社会人であり、技術者でありのコメント欄で結合について話が盛り上がったのですが、『私がHitAndBlowを作ったらどんなコードになるか?』ということで作成してみました。Visual C++ 2008で動作確認しました。
επιστημηさんの真似だと芸がないので、出題者・回答者をそれぞれ人間・コンピュータから選べるようにしました(大掃除をさぼったので嫁に怒られながら作りました・・・)。

それにしてもC++のコードは人によって個性が出ますね。


#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <math.h>
#include <ctype.h>
#include <time.h>

using namespace std;

class HABReferee {
    vector<int>     answer;
    vector<bool>    blowtable;
public:
    bool prepareAnswer(const vector<int> &answer_) {
        blowtable.assign(10, false);
        for ( size_t i = 0; i < answer_.size(); i++ ) {
            if ( blowtable[answer_[i]] ) {
                return false;
            }
            blowtable[answer_[i]] = true;
        }
        answer = answer_;
        return true;
    }

    bool submitAnswer( const vector<int> submit, int &hit, int &blow) {
        if ( answer.size() != submit.size() ) return false;
        hit = 0;
        blow = 0;
        for ( size_t i = 0; i < submit.size(); i++ ) {
            if ( answer[i] == submit[i] ) {
                hit++;
            } else if ( blowtable[submit[i]] ) {
                blow++;
            }
        }
        return hit == submit.size();
    }
};

static vector<int> inputNumbers(int N) { // N桁の数値の入力を行う(違った場合はやり直し)
    vector<int> result;
    string str;
    do {
        result.clear();
        cin >> str;
        for ( size_t i = 0; i < str.size(); i++ ) {
            if ( isdigit(str[i]) && str[i] != '0' )
                result.push_back(str[i] - '0');
            else
                break;
        }
    } while ( result.size() != N );
    return result;
}

class HABContributor {    // 出題者(人間)
public:
    virtual vector<int> prepareAnswser(int N) {
        cout << "各桁が1~9である" << N << "桁の数を入力してほしい。各桁で数が重複するのは避けてくれ" << endl;
        return inputNumbers(N);
    }
};

class HABContriburerComputer : public HABContributor {    // 出題者(乱数生成)
public:
    virtual vector<int> prepareAnswser(int N) {
        vector<int> digits;
        for ( int i = 1; i < 10; i++ ) {
            digits.push_back(i);
        }
        vector<int> result;
        srand((unsigned int)time(0));
        for ( int i = 0; i < N; i++ ) {
            vector<int>::iterator itor = digits.begin() + rand() % digits.size();
            result.push_back(*itor);
            digits.erase(itor);
        }
        return result;
    }
};


class HABSolver {    // 回答者(人間)
public:
    virtual void prepare(int N) {}

    virtual vector<int> getAnswer(int N) {
        cout << "答えを予想してくれ" << N << "桁の数だ。" << endl;
        return inputNumbers(N);
    }

    virtual void giveHint( int hit, int blow) {
        cout << hit << "Hit" << " / " << blow << "blow" << endl;
    }
};

class HABSolverComputer : public HABSolver {    // 回答者(コンピューター)
    HABReferee           checker;
    vector<vector<int>>  candidate;
public:
    void recur(vector<int> &answer, int N) {
        if ( N == 0 ) {
            candidate.push_back(answer);
        } else {
            for ( int i = 1; i < 10; i++ ) {
                if ( find( answer.begin(), answer.end(), i) == answer.end() ) {
                    answer.push_back(i);
                    recur( answer, N-1);
                    answer.pop_back();
                }
            }
        }
    }
    virtual void prepare(int N) {
        vector<int> answer;
        recur( answer, N);
    }

    virtual vector<int> getAnswer(int N) {
        cout << "答えは";
        for ( int i = 0; i < N; i++ ) {
            cout << candidate.back()[i];
        }
        cout << "かな?";
        return candidate.back();
    }

    virtual void giveHint( int hit, int blow) {
        HABSolver::giveHint( hit, blow);
        checker.prepareAnswer(candidate.back());
        for ( vector<vector<int>>::iterator i = candidate.begin(); i < candidate.end(); ) {
            int ahit, ablow;
            checker.submitAnswer( *i, ahit, ablow);
            if ( ahit != hit || ablow != blow ) {
                i = candidate.erase(i);
            } else {
                i++;
            }
        }

    }
};

class HABGame {
    int        N;
    HABReferee       referee;
    HABContributor   *c;
    HABSolver        *s;
public:
    HABGame(int N_, HABContributor *c_, HABSolver *s_) : N(N_), c(c_), s(s_) {};
    void play() {
        // 出題者から問題をもらいレフリーに渡す。
        while ( !referee.prepareAnswer(c->prepareAnswser(N)) )
            ; // 規格にあったものが出てくるまでループする

        bool endflag = false;
        int hit;
        int blow;
        s->prepare(N);    // 回答者に準備をさせる
        while ( endflag == false ) {
            // 回答者から回答をもらい判定する。
            endflag = referee.submitAnswer( s->getAnswer(N), hit, blow);
            // 回答者にヒントを言う。
            s->giveHint( hit, blow);
        }
    }
};

int main()
{
    HABContributor           hc;
    HABContriburerComputer   cc;
    HABSolver                hs;
    HABSolverComputer        cs;
    HABContributor           *c;
    HABSolver                *s;

    string    str;
    while ( true ) {
        cout << "メニュー" << endl
             << "1:出題者(Human) vs 回答者(Human)" << endl
             << "2:出題者(Human) vs 回答者(Computer)" << endl
             << "3:出題者(Computer) vs 回答者(Human)" << endl
             << "4:出題者(Computer) vs 回答者(Computer)" << endl
             << "0:終了" << endl;
        cin >> str;
        switch( str[0] ) {
            case '0' :
                return 0;
            case '1' :
                c = &hc;
                s = &hs;
                break;
            case '2' :
                c = &hc;
                s = &cs;
                break;
            case '3' :
                c = &cc;
                s = &hs;
                break;
            case '4' :
                c = &cc;
                s = &cs;
                break;
        }
        HABGame g(3, c, s);
        g.play();
    }

    return 0;
}
2012-12-31 | コメント:0件



『社会人であり、技術者であり』の質疑応答

さて、『社会人であり、技術者であり』をリリース(?)してから思わぬところで炎上しまして、『質問に答えろ!』という声が出てきたのでFAQではないですが、質問&回答をまとめます
なお、このページについては適宜、編集します。

2012/11/23 まとめおよび質問回答を幾つか追加
2012/11/23 『みながわ氏=三浦氏という主張の根拠は?』に幾つか追加
2012/11/18 コメント欄での指摘を受け『社会人であり、技術者であり』を修正
2012/11/16 『みながわ氏=三浦氏という主張の根拠は?』を追加
2012/11/14 『「ある人物をモデルにした小説を書くのであれば、その人物がやってもいないことを盛り込んではいけない。盛り込んだ場合は、誹謗中傷となる」場合がある』を追加

現状(2012/11/23)のまとめ

現状、この小説の最終話とみながわさんとの関係についての解釈で以下の4パターンが出てきているかと思います。

1.無関係。三浦さんは不特定のお客サイドのマネージャということ
 →こちらについては例の炎上事件を知っているかどうかによって異なる面もあるようですが、最終話の後半部分については後から見ても多くの類似点があり、無関係というのは厳しいでしょう。これについて『三浦さんはみながわさんのモデルだがイコールではない』という、どう返信して良いか分からないコメントもありましたが、『モデル』と言っている時点で既に無関係ということではないでしょう。

2.みながわさんに批判的なだけ
 →こちらについては、小説後半部分の記述
『たまに別のWebサイトのコメント欄に、オブジェクト指向批判を書くこともあった。当然、技術的な裏付けも何もない、思い込みによる批判だから、正論で完膚なきまでに叩きのめされてしまう。正面から議論を展開できるだけの知識がないから、スリービーチさんにできることは、「その日本語はおかしい」とか「若い人はすぐに感情的になるから議論にならない」などと、負け惜しみを書くことだけだった。』

をみてみますと、
『思い込みによる批判』とか『負け惜しみを書く』、『人の話を聞かない』とかはその人の人格を表しているでしょうから批判を逸脱しているでしょう。また、

『そのささやかな幸せがいつまでも続くといいね。』
ですが、皮肉と取るにしても、趣味が悪いかと思います(と私も思います)。

その他、いちいち挙げませんが、貶めていると取られても仕方がない表現がありますでしょう。

3.最終話の後半部分はみながわさんを貶めていると取られても仕方がないので蛇足
 →こちらについてはほぼ同意なのですが、私の意見は少し異なります。

4.最終話の後半部分が本当に言いたかったことで、その前は最後を言うための布石
 →以下は、あくまでも、私(および数名)の方のこの小説の解釈になるのですが、注意して書けば、『1』や『2』に受け取れるような小説にもなったはずです。それなのに、なぜ、『3』と解釈できるような作品となったのでしょうか?
私はこの後半部分が、この小説が一番言いたいことではないのか?と解釈しています。

この小説を要約すると、
『人の話を聞けないオブジェクト指向を否定している人が、オブジェクト指向が分からないのでプロジェクトに失敗し、オブジェクト指向を否定するブログを始めたが、人の話を聞かない為に炎上して誰からも相手にされなくなる。やっぱり人の話(オブジェクト指向は良い)はちゃんときこうね。』
という風に解釈できます。この小説はみながわさんに『あなたはこういう人なんですよ』ということが言いたかったのか、というふうに私は受け取りました。

そう考えると
『そのささやかな幸せがいつまでも続くといいね。』
の文章が持っている、ある種の陰湿なニュアンスが伝わってくるかもしれません。

事実を元に、素直にそのまま表現し、きちっとした批判を行えば、まっとうな小説になったかと思います。が『プロジェクトに失敗した』とか『オブジェクト指向を知らない』等、虚実入り乱れた表現や、『2』で示しましたとおり人格否定と受け取れる書き込みがあれば、そのまま捨て置くのは厳しいかと思います。

理由はともあれ、こういう小説はダメでしょうというのが私の主張です。


もう止めませんか?


 現状 (2012/11/22現在)、議論は進んでいます。ので、まだ止めません。私の意見とほぼ同じ意見の方も出てきていますし、私には同意しないが、最終章については蛇足だという人の書き込みも見られるようになりました。
ということで、まだまだ止めれません。

お前の対応に問題があるんだよ

 当初、私にとっては問題点が明らかだったのですが、どうも私の言い方等がまずいようで炎上しました。ちなみに、実際に何処が悪いか聞いてみたのですが、具体的な回答は頂いていません。
作者に質問を丸投げした件については『ごちゃごちゃ言うより作者に聞いた方が早いだろう』という判断で聞いてみました。今後も作者への質問は当然、行います。
もっとも、私の表現等至らない面があり対応できることでしたら対応します。
ただし、聞いてもいない人がいきなり割り込んで来て『こうしろ!』とかいうコメントには当然お答えできません。ので、個別に返信しない限り、そのようなご意見はすべて『ご意見はありがたく頂戴しますが、対応は出来ません。』という事に致します。

ブログの内容が変わっていますよね?

 当初、私にとっては問題点が明らかだったのですが、どうも私の言い方等がまずいようで炎上しました。 
 ブログの書き方については、具体的にアドバイスをされた方がいらっしゃったのでその方のご意見を取り入れてブログの文章は修正しました。
といっても私が言いたい事は変わっていないかと思います。

何時までやるのですか?

 みながわさんが止めてくれと言うか、リーベルGさんから何らかの対応があるまでか、私が力つきるかです。

あなたは関係ないのでは?


こちらのコメント欄でリーベルGさんは以下のようにおしゃっています

『私自身は基本的にコメントの内容に制限をかけるつもりはありません。誰かが間違っていると思い、そのメッセージを伝えるのに、このコメント欄が最適だと思えば、何を書いていただいてもかまいません。』

ので、このコメントをすること自体は問題ないでしょう。それこそ、問題があれば、リーベルGさんまたは@ITさんが対応するでしょう。

みながわ氏=三浦氏という主張の根拠は?


まず、
http://ja.wikipedia.org/wiki/名誉毀損罪 から
『被害者の氏名を明確に挙示しなかったとしても、その他の事情を総合して何人であるかを察知しうるものである限り、名誉毀損罪として処断するのを妨げない(最判昭和28年12月15日刑集7巻12号2436頁)。』
とあります。『処断するのを妨げない』という言い回しが分からない方がいるかと思いますので、ニュアンスを言い換えますと『処断する場合がある』ということになります。

つまり多くの人が高慢と偏見のモデルはみながわさんと判別できている時点で、
 高慢と偏見の三浦マネージャ = みながわさん
としてよいでしょう。

高慢と偏見のモデルはみながわさんと判別できる理由ですが、『高慢と偏見』の最終話は、『実はオブジェクト指向ってしっくりこないんです! 』の本文およびコメント欄のパロディとなっています。
以下、『高慢と偏見』の最終話と『実はオブジェクト指向ってしっくりこないんです! 』との類似点を示します。

高慢と偏見最終話の三浦氏のブログのタイトルみながわさんのブログのタイトル
SEのサバイバル入門システムエンジニア 生き残りの極意
過酷なSE業界を生き延びるノウハウを伝授するシステムエンジニアとして長期に活躍した経験に基づく極意、ノウハウを教えます
高慢と偏見最終話実はオブジェクト指向ってしっくりこないんです! -本文-
staticを使えば、わざわざインスタンスを作る必要などない「メンバー関数をstatic宣言すればインスタンス宣言をしなくてもいい」ということ知ってからは、メンバー関数を従来のファンクションのように使っている。
独自にクラスを作る必要などない。クラスは使うものだ。作るものではない「自分でクラスを作ってオブジェクト指向っぽいことをしている」なんてことはまったくない。
オブジェクト指向など、実業務では使いものにならない!オブジェクト指向は、結局のところホントにモノ(オブジェクト)に使われている記法、例えばGUI コンポーネント、データベース、ファイルなどであって、プログラムのアルゴリズムとは無関係のものである。
高慢と偏見最終話実はオブジェクト指向ってしっくりこないんです! -コメント欄-
私はT大学大学院卒だ私は学部は東北大学で大学院が東工大です。
あなたはSIerだろう。私は客側の人間だ。客の言うことは絶対だ私はIS部門の人間なんです。SIerの客なんですよ。私に嫌われたらどうなりますか?
高慢と偏見最終話のポリモーフィズムの間違いみながわさんのブログのポリモーフィズムの間違い
ポリモリズムポリフォーフィズム、
*みながわさんは何回かポリモーフィズムの言い間違いをしていますが、これをもじっているとみられます

今のみながわさんのコラムのタイトルとサブタイトルは違うものになっていますが、当時のみながわさんのコラムのタイトルとサブタイトルは、こちらで確認できます。


特にコメント欄の2つの発言が当時、有名になりました。色々引用されましたね。

ここまで類似点があるということは偶然ということはありえずに意図的に書かないかぎり無理かと思われます。
また細かい表現が変わっているので『フィクションです』となるという主張もあるようですが、これは言い訳の為にしかやっていないし、『炎上事件を知っている人は容易にみながわさんのブログのことを指している事がわかる』という風に解釈せざるを得ないのではないでしょうか?
他にもみながわ氏=三浦氏を伺わせるような内容はあるのですが、とりあえず幾つかあげておきます。


「ある人物をモデルにした小説を書くのであれば、その人物がやってもいないことを盛り込んではいけない。盛り込んだ場合は、誹謗中傷となる」場合がある


高慢と偏見(http://el.jibun.atmarkit.co.jp/pressenter/2011/02/post-6b95.html)
のコメント欄のespreさんへの回答です。

espre 2012年11月14日 (水) 13:02

>>警鐘であり『フィクション』というのなら、少なくとも、
>>>みながわさん、にしても、三浦マネージャーにしても、『人の話を聞く』とは、とても言えない、というのが、私の感想です。
>>というふうに、みながわさんと三浦マネージャを読み手に結び付けさせるようなコラムを書いてはダメでしょう。
>これが最大の疑問なのですが、なぜダメなのでしょうか?
>多くの新聞の社説やコラムは特定の個人をイメージして風刺
>する文章を掲載しています。これらも全てダメなのでしょうか?

まず、以下のページを参照してください。

『事実をフィクションとして書いたら名誉毀損やプライバシー侵害になりますか?』
http://www.bengo4.com/bbs/142497
つづいて、以下のページを参照してください。
http://oshiete.goo.ne.jp/qa/900590.html
さらに、以下のページ
http://president.jp/articles/-/2673
さらにさらに、
http://www.cyber-eraser.jp/category/1467828.html

さて、説明致します。

まず、名誉毀損罪(http://ja.wikipedia.org/wiki/名誉毀損罪)というのがあります。

これは、刑法第230条
『公然と事実を摘示し、人の名誉を毀損した者は、その事実の有無にかかわらず、3年以下の懲役若しくは禁錮又は50万円以下の罰金に処する』
とあります。少し噛み砕きますと、

公然・・・インターネット
事実を摘示し・・・『話を聞かない』、『ダメなシステムを作った』
人の名誉を毀損・・・例の人の社会的地位やSEとしての評価を落とした
事実の有無・・・・真実でも真実でなくても
となるでしょう。

つまり、大原則として、公に向かって、個人に対しての誹謗中傷を行ってはだめ(本当のことでも嘘のことでも)でしょうというふうに解釈できるでしょう。

ここまではOKですか?


続いて


刑法第230条の2
『前条第1項の行為が公共の利害に関する事実に係り、かつ、その目的が専ら公益を図ることにあったと認める場合には、事実の真否を判断し、真実であることの証明があったときは、これを罰しない。』


平たく言えば、書いた内容が真実であり、それがみんなのためであればOKということになるでしょう。


>多くの新聞の社説やコラムは特定の個人をイメージして風刺する文章を掲載しています。これらも全てダメなのでしょうか?

多くの新聞の社説やコラムはこの230条の2の範囲

・公共のため
・真実
の範囲でやっているということです。

ちなみに真実性の証明は、刑法第230条の2の要請です(法律に書いてある)。

というわけで「ある人物をモデルにした小説を書くのであれば、その人物がやってもいないことを盛り込んではいけない。盛り込んだ場合は、誹謗中傷となる」場合があるということになるでしょう。

わかりましたでしょうか?
2012-11-14 | コメント:19件



社会人であり、技術者であり

2012/11/18 コメント欄の指摘を受け、全面改定しました。

最近、忙しくてすっかりブログを更新していませんでしたが、それでもADPの開発は続けておりその関連で調査をしていましたら、あまりにも程度の低い小説がありましたのでちょっとコメントしてみます。

発端は今から2年前のこの記事になります。

実はオブジェクト指向ってしっくりこないんです!(みながわけんじ)
よく解らない内容の記事なのですが炎上した記事です。ちなみにこの記事のコメント欄のryoというのは私です。


その後、この小説が書かれました。

高慢と偏見(1)隣は何をする人ぞ
高慢と偏見(2)使徒襲来
高慢と偏見(3)コードレビューは踊る
高慢と偏見(4) 嵐の金曜日
高慢と偏見(5) そして戦いがはじまる
高慢と偏見(6) いつかの誰かのためのドキュメント
高慢と偏見(7) 28日後……
高慢と偏見(8) 敵は身内にもあり
高慢と偏見(9) 誰がスケジュール遅らせた? それはあなたとプロマネは言った
高慢と偏見(10) 夏への扉
高慢と偏見(11) 現実は映画じゃない
高慢と偏見(12) 新人くんのささやかな主張
高慢と偏見(13) 一矢
高慢と偏見(終) エピローグ

大変長い小説で、著者(リーベルG)さんはフィクションと言っていますが、この小説は先の記事に対する程度の低い風刺になっています。

こういうのは捨て置いていたらよいのですが、私も齢40を過ぎ、後輩の方達へきちんと伝えるべきことを伝えたほうがよろしいかと思い何が問題か指摘します。

特定の人物を不当に貶める

一番に聞いてみたいことですが、この小説の著者は名誉棄損または誹謗中傷という言葉を知らないのでしょうか?、この著者(リーベルG)さんはいじめ問題がどのような人間の心理から出てくるかわからないのでしょうか?
もっとも今は何を言われても分からないかもしれません。が、まぁ後10年経てば分かるかもしれません。

高慢と偏見の最終話ですが後半は『実はオブジェクト指向ってしっくりこないんです!。』のパロディと思わせるないようとなっています。

後半の出だしを引用します。

アツコさんから久しぶりにメールが届いた。そこには「面白いもの見つけたよ」とあり、1つのURLが載っていた。

 開いてみるとブログだった。タイトルは、

 「SEのサバイバル入門」

 サブタイトルに「過酷なSE業界を生き延びるノウハウを伝授する」とある。ブロガーは「スリービーチ」。スリービーチ? 3つの浜辺? ひょっとして……

 最新の日記は、

 「オブジェクト指向など、実業務では使いものにならない!」


このタイトル「SEのサバイバル入門」とサブタイトル「過酷なSE業界を生き延びるノウハウを伝授する」は当時の、
みながわさんのコラムのタイトルとサブタイトルのパロディであることが分かるでしょう。
今のみながわさんのコラムのタイトルとサブタイトルは違うものになっていますが、当時のみながわさんのコラムのタイトルとサブタイトルは、こちらで確認できます。

その他の類似例を表にまとめます。
高慢と偏見最終話実はオブジェクト指向ってしっくりこないんです! -本文-
staticを使えば、わざわざインスタンスを作る必要などない「メンバー関数をstatic宣言すればインスタンス宣言をしなくてもいい」ということ知ってからは、メンバー関数を従来のファンクションのように使っている。
独自にクラスを作る必要などない。クラスは使うものだ。作るものではない「自分でクラスを作ってオブジェクト指向っぽいことをしている」なんてことはまったくない。
オブジェクト指向など、実業務では使いものにならない!オブジェクト指向は、結局のところホントにモノ(オブジェクト)に使われている記法、例えばGUI コンポーネント、データベース、ファイルなどであって、プログラムのアルゴリズムとは無関係のものである。
 
高慢と偏見最終話実はオブジェクト指向ってしっくりこないんです! -コメント欄-
私はT大学大学院卒だ私は学部は東北大学で大学院が東工大です。
あなたはSIerだろう。私は客側の人間だ。客の言うことは絶対だ私はIS部門の人間なんです。SIerの客なんですよ。私に嫌われたらどうなりますか?

類似点は他にもあるのですが、これを見れば、「高慢と偏見の最終話」にあるスリーピーチ(三浦さん)のブログのモデルは、『実はオブジェクト指向ってしっくりこないんです!』であり、スリーピーチ(三浦さん)はみながわさんということを示唆していると受け取られても仕方がないでしょう。実際にそのように受け取っている方もいらっしゃいます。
「高慢と偏見の最終話」のコメント欄からいくつか引用してみましょう。

toanna 2011年2月21日 (月) 23:33 (一部引用)
まとめサイトしても読める!!
まとめサイトというのは『実はオブジェクト指向ってしっくりこないんです!』の炎上部分を示唆していると受け取れます。

音速の気功師 2011年2月24日 (木) 01:27 (一部引用)
あれが論外なのは言うまでもない事実です。それは認めます。
あれというのは誰かは指摘しなくても解るでしょう。

通して読みました 2011年8月 9日 (火) 19:04 (一部引用)
ただ、途中からコメント欄に書いてある(ネタバレ?)を
見ていて、純粋に読み物として読んでいて、つまらなくなってしまいました。
内容がコメント欄とかぶってくるのか、単に例の人を貶めるような内容として、
読み進んでしまったのが、自分としての反省です。

さて、このコメントでは『例の人を貶めるような内容として、読み進んでしまったのが』と書かれています。
貶めるというのは、本文中の

たまに別のWebサイトのコメント欄に、オブジェクト指向批判を書くこともあった。当然、技術的な裏付けも何もない、思い込みによる批判だから、正論で完膚なきまでに叩きのめされてしまう。正面から議論を展開できるだけの知識がないから、スリービーチさんにできることは、「その日本語はおかしい」とか「若い人はすぐに感情的になるから議論にならない」などと、負け惜しみを書くことだけだった。

という書き込みの他、

ソースを調査したコンサルティング会社のエンジニアは、あまりに効率の悪い前時代的なコーディングに絶句したらしい。そりゃそうだろう。私だって、事前知識なしであのソースを見たら驚く。

 「時代錯誤も甚だしい」

 「保守性というものをまった考慮していない」

 「最低でも6カ月を要する、根本的な大改造が必要」

 コンサル会社からの報告書には、このような指摘が続々と連なっていたという。調査の過程で、開発方針が途中で大幅に変更された事実も明らかになり、三浦マネージャは連日のように、専務やら常務やらの前で釈明に追われることとなった。平良さんら何人かの常駐メンバーも事情を聞かれたが、三浦マネージャを積極的に擁護しようとする人はいなかったようだ。中には、あからさまに批判するメンバーもいたらしい。

とか、締めの文章

 高学歴で長い経験に自信を持つエンジニアは他人の話を聞かなくなる、というのは広く世に知られた真理の1つである。

 三浦技術担当マネージャは、そのようなエンジニアの生きた見本のような人だった。

とか随所にあります。その他いちいち抜き出すことはしませんが、『高慢と偏見の最終話』の後半部分、『そして数カ月後。』からを読んで頂ければ解るでしょう。

ちなみに文中にあります『ポリモリズム』は『ポリモーフィズム』の間違いです。みながわさんは『実はオブジェクト指向ってしっくりこないんです!』のコメント欄でポリモーフィズムを数回、書き間違えておられました。それをもじったものだと推測されるでしょう。


これでは三浦マネージャ=みながわ氏が成立し、特定の人物を貶める内容になっているのではないでしょうか?

その他の例(ポリモーフィズムの例)

この小説は、他にも『三浦マネージャ=みながわ氏』をうかがわせると思われるエピソードがあります。
高慢と偏見(3)コードレビューは踊る の『List userNameList = new ArrayList();』にまつわる論争部分です。

これは、以下のコメント欄の論争から取られていることがうかがわされるでしょう。

http://el.jibun.atmarkit.co.jp/densol/2010/08/post-8443.html オブジェクト指向。教科書と現実のはざまで
このコラムのコメント欄にみながわさんが書き込んでいますが、いきなりAC/DCさんが、みながわさんを批判し、コラム主から注意を受けています。

さて、みながわさん、AC/DCさんどちらがマナーのある人でしょうか?

もちろんですが、みながわさんがstaticが・・・と言い出したらそのときにまた反論すればよろしいかと思います。

さらにflatlineさんが

>たとえば、Javaで、
>List userNameList = new ArrayList();

とコラムの趣旨とは異なる議論を吹っかけています。
みながさんもこれに対して

>ArrayList list = new ArrayList();
>のように基底クラスを使わない例が一般的です。


と応戦してしまっています。

ここで、この"一般的"の趣旨について補足します。まず
 List userNameList = new ArrayList();
の書き方はjavaが出た当時はある意味画期的だったのですが(当時そういう風に紹介している書籍もあった)、他の言語では、良くない例とされています。根拠は「Effective STL」に書いていますしCMPさんと同名の方や他の方も「高慢と偏見(3)コードレビューは踊る」のコメント欄に同様の趣旨のことを書かれています。要するにArrayListとLinkedListの概念を統合・抽象化(Listインタフェース)しても意味がないのです(ほぼゴミ)。そのような訳でして実は、C++/STLや後から出てきたC#ではみながわさんが言ったような書き方 し か 出来ません。
これに"一般的"という言葉を使うことが適切かどうかという批判はあるかと思いますが、java以外の”一般的な”オブジェクト指向言語という意味ではまぁOKでしょう。

flatlineさんは「一般的です」という断定の言葉尻をとらえるのではなくてみながわさんが言っていることの意味(というかその背景)をもっと深く、理解する必要があります。

このような状況下で、flatlineさん個人の感想として、みながわさんのことを『話を聞かない人』と思うのは構いませんが、客観的にみると?と思うわけです。
もちろん、みながわさんも『C#では一般的』と言えば話が進んだのでもう少しコメントするときに考えて頂ければとは思いました。

そういう意味では『どっちもどっち』ということになります。

以上を踏まえて、「高慢と偏見(3)コードレビューは踊る」を読むと、ものすごい誤解から一方的に書かれていることが分かるかと思います。私には何が面白いのかまったく分かりませんでした。

(主人公目線で)みながわさんがオブジェクト指向が解らないから『ArrayList list = new ArrayList();』と書かれていますが、ちがうことが解りますよね。
ちなみにこの「高慢と偏見(3)コードレビューは踊る」でも、

 「ポリモーフィズムです。ポリモリズムでもポリフォリズムでもありません」

 三浦マネージャの顔色が一瞬変わったが、すぐに薄ら笑いを浮かべた。

とポリモーフィズムの間違いのエピソードが出てきています。



以上、『高慢と偏見』がみながわさんのコラムおよびその他のエンジニアライフのコラムの論争のパロディであることをうかがわせるような内容となっています。
このようなパロディは他にもあり、当時の論争を知らない人にはぱっと見て解らないかと思いますが、『高慢と偏見』の本文とコメント欄をみれば、どういうことが解るかと思います。


エンジニアなら技術的な論争があった場合、あくまでも技術的かつ論理的に反論しましょう。相手が聞く耳を持たないと判断する前にもう一度、ご自身の説得力に問題がないか検証しましょう。論争相手を貶めるようなことはエンジニアとしては慎みたいものです。

2012/11/03 加筆、修正
2012/11/06 修正
2012/11/14 修正 質疑応答をアップしました
2012/11/18 コメント欄での指摘を受け、全面改定
2012/12/02 修正
2016/01/31 関連記事をアップしました
2012-11-01 | コメント:66件



[ADP開発日誌]Ver 0.84のリリース

ひと月ちょいぶりのリリースになります。
今回はバグフィックスになります。
また、出荷停止になりましたので、OpenBlocks600D用のバイナリのリリースを終了しました。
もし、OpenBlocks600D用のバイナリーが必要な方がいらっしゃいましたらお知らせ頂ければ追加します。
2012-10-25 | コメント:0件



[ADP開発日誌]Ver 0.83のリリース

またまた、2か月ぶりのリリースになりますが、Ver0.83のリリースになります。
おもな改修点は以下のとおりです。
・バグフィックス
・Cスタイル文字列のサーポートの向上とユニコード文字(\uxxxx)のサポート
・html述語の変更(2引数 URL、結果のサポート)
・パフォーマンスの向上
・バイナリをMAC OSX LionからMAC OSX Mountain Lionへ変更

半年ほど前のリリース(Ver0.79)からMAC OSX Lionに対応しましたが、今回のリリースから Mountain Lionに対応させました。それに伴いバイナリ版で使用している、ODBC-APIをMacPortsからシステム標準のものに変更しました。
動作確認のテストには、MySQLの公式サイトにあるバイナリ版のODBCコネクターVer5.1.11 Mac OS 10.6 64ビット版を用いて行いました。
実は最近MAC(というかsafari)が重いなと思って再セットアップをした関係で、環境が変わったついでにコンパイル環境を整理しました。ちなみに遅くなった原因ですが、
Consoleログをみますと、flashのプラグインが頻繁にハングアップするためでした・・・flashのアンインストールが頭をよぎりましたが、英語の学習ソフトがflashで作られているので、しばらくこの不具合にお付き合いするしかなさそうです。

前回のリリースからさらにパフォーマンスの改善を行っており、今回のバージョンも若干ですがパフォーマンスが改善しています。
パフォーマンスの改修に伴い、実行環境の構造を見直している最中でこれが完了すると先に進めます。
実験的に大胆に改修したりもしましたが、バグバグになって没(リバート)したりと足踏み状態が続きますが、ベータ版をリリースする前の大幅な改修ということで、ここいらで試行錯誤を行っています。ので機能追加は今しばらくないかと思います。
2012-09-15 | コメント:0件
Previous Page | Next Page