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

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件



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

 忙しさにかまけてブログの更新を怠っていましたが、気がつけば今月末でADP公開2周年になります。公開一周年記念の記事も完成していないのに、時の立つのは速いものだと感慨に浸っております。

というわけで、間が空きましたがVer 0.82のリリースです。

今回の変更点は、
・バグフィックス
・sprintfの改修
・パフォーマンスの改善
になります。
また、今回のリリースからホスティングサイトをSourceforge.JpからSourceforge.netに変えました。

sprintfの改修ですが、詳しくはsprintfのマニュアルをご参照頂くとして、たとえばDBからの戻り値をsprintfで成型する場合に、便利に使えるようにしています。
例えば、以下のように記述することができます。


,db.sql@("SELECT * FROM users WHERE hogehoge ",[]).each.
 sprintf("%s:first_name; %s:secondname;様 の誕生日は、%s:birth_dayです。").
 prtn,next;

DBの取得から成型、表示まで一気に書けるところがAnother Data Processorらしくなかなかよろしいかと思います(自画自賛)。


パフォーマンスの改善ですが、Ver 0.60以来の改善になります。
Ver 0.60から0.81になったことでパフォーマンスが下がりましたが、Ver 0.82は0.60以上のパフォーマンスになりました。

前回と環境が変わりましたので改めてベンチマークをとりますと、

◆Windows上でのJavaScript vs ADP
■マシン
・CPU  Core i7-920(2.66GHz HT/Turbo Boost OFF)
・メモリ 12GB(DDR3-1066 2GB × 6)
・OS   Windows 7 Ulitimate (x64) 電源管理:高パフォーマンス
 
■結果
28のフィボナッチ数を求める時間
 IE8(64ビット版)452ミリ秒 
 FireFox 13.0.112ミリ秒 
 ADP 0.60(32ビット)343ミリ秒 
 ADP 0.81(32ビット)452ミリ秒 
 ADP 0.82(32ビット)265ミリ秒 

0.60と比べても20%以上速くなっています。今回はChromeの結果を掲載していません。またFireFoxですが、12ミリ秒とかなり速いです。前回パフォーマンスについて『FireFox3.6未満』と記載しましたが、残念ならがFireFoxと比較するのは厳しくなりました。

という訳で別の比較が必要になりましたので、ADPと、PHP、Javaと比べてみます。

◆CentOS6.2上でのPHP,Java,ADP
■マシン
・CPU   Core i7-980X(3.33GHz HT/Turbo Boost OFF)
・メモリ  24GB(DDR3-1066 4GB × 6)
・ホストOS Windows 2008R2(Hyper-V)
・ゲストOS CentOS 6.2(実行環境)

■テストコード
 テスト1:28のフィボナッチ数を求める PHPソース(Test1.php) Javaソース(Test1.java) ADPソース(Test1.p)
 テスト2:10万までの素数を求める PHPソース(Test2.php) Javaソース(Test2.java) ADPソース(Test2.p)

テスト2のPHPのコードですが、Stackoverflowさんのコードを使わせて頂きました。

■結果(timeコマンドのuser部分を抜き出した)
Linux(CentOS6.2 x64)上でのPHP(5.3.3)、Java(1.6)、ADP(0.82)の比較
 テスト1テスト2
 PHP(5.3.3)207ミリ秒 31,915ミリ秒 
 Java(1.6)38ミリ秒 4,862ミリ秒 
 ADP(0.82)190ミリ秒 3,765ミリ秒 

テスト結果をみますとADPはPHP5.3以上のパフォーマンスが出ています。特にテスト2の結果が1桁近く速くなっており、Javaよりも早くなっています。テスト1ではADPよりJavaが圧倒的に速いのですが、テスト2ではADPの方が速くなっています。テスト2のJavaはコレクションクラス(ArrayList)を使っておりその分遅くなっているようです。実際にこの部分を固定配列にすると実行速度は1/10になります(もっともコレクションクラスを使わないという選択肢はないかとも思いますが)。ADPの配列はC++で実装しています。私自身気づいていませんでしたが、かなり効率良く実装されているようです。

また、テスト2の、リンク先のトピックは元々「PythonがPHPより遅いのだが?」という質問でしたがADPのパフォーマンスはそれ以上なのでいわゆるスクリプト言語より速いことが解ります。
もっとも一部のテストからですので今後も色々ベンチマークテストを行い検証しようかと思います。

ちなみに、もっと大幅にパフォーマンスアップが望める改善策を思いついたのですが、かなりの改修が必要なので、ここまでの成果を0.82としてリリースし、より速くしたものを後のバージョンで出そうかと思っています。打倒JavaScriptですね(まぁJITを入れないとダメなような気がするが・・・)。
2012-07-12 | コメント:0件



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

最近オープンしたネコカフェですが、ぼちぼちやていますが、多くの道行く人が猫の呼び込みをみて「あら~かわいい~」と立ち止まるところをみていると、この国は相当病んでいるのか・・・と変な邪推をしてみたり、病んでいるといえば、とあるSNSゲームを知人から誘われはまり、少し課金アイテムを買ってみたりしたり、そういえば前回リリースから誕生日を過ぎたとか、その前回リリースからあまり間が空いていませんが、ADPのVer0.81をリリースします。

変更点は以下のとおりです、
・バグフィックス(DBライブラリ、~演算子、他)
・式のコンパイルの改善
・テンプレート機能の変更(ヒアドキュメント化)
・インクルード機能の変更(インクルードキーワードの変更)
・コマンドラインオプションの追加と変更(ワーニング、構文チェックの追加と引数のコード実行のオプション値の変更)

式のコンパイルの改善ですが、以前のバージョンではハッシュ検索のコンパイルがちょっと不完全でしたので、きちんと木構造をたどるようなコードに変更しました。おかげで、
$hash['key1']['key2']
というようにハッシュ検索の戻り値からさらにハッシュ検索ができるようになりました。

テンプレート機能をヒアドキュメントのように文字列として扱えるように変更しました。このおかげでWEBページモードの実装が単純かつ一貫性を持つようになりました。
テンプレートの開始ですが、
%>
となります。終了は
<%
となります。
JSPやASPのように<%がコードの始まりで、%>がコードの終わりになりますが、ADPも同様になります。ただし、ADPの場合は<%でコードが始まる時は、式の中になっていますので、それを抜ける為に、
<%;
という具合に、;を追加します。
なぜわざわざこのようにしたのかといいますと、テンプレートの機能をヒアドキュメントのようにして、統一的に使えるように言語仕様の中に入れてしまいたかったからですが、そのおかげでADPにはテンプレートライブラリを別に用意することが不要になります。
例えば、メール送信のようにテンプレートを用意してその中に値を張り付けるということがWEBページを作ることと同じようにできます。
ちなみにテンプレート(ヒアドキュメント)の開始、終了について他のテンプレートライブラリからの移行を考慮して将来的には変更可能なように実装しようかと考えております。
この変更に伴い、インクルードキーワードが合わせて変更になりました。
ちなみにインクルードは、トップレベル(ホーン節やゴール節の定義場所)で、
@includeファイル名@
で行います。
ちなみに、このあたりは仕様変更があるかと思いドキュメント化していませんでしたが、しばらく様子をみて特に変更の必要がなければドキュメント化します。

そのほか地味なところでは、コンパイルエラーやワーニング、ランタイムエラーの見直しを行っています。
不親切な言語仕様を改めてよりエラーやワーニングを出すようにしています。ワーニングは今回のバージョンから追加になります。
これで、いよいよ次はリソースの解放機能を追加しようかと思ってますが、実現できるかな?
2012-05-21 | コメント:0件
Previous Page | Next Page