(補)日本人とインド人のプログラム化の違い

日本人と インド人 解法 (考え方 違い) ー仕様とプログラム 距離ー
- 仕様整理技術 -
- トレーサビリティ -

20170317 板倉稔

インド人やインドに発注したなど様々な人から刺激を受けた。その中で、10年以上も解けなかった疑問 が最近解けた で紹介したい。

こんなことがあった。 昔、某コンピュータ巨大メーカ 部長氏が、こういうことを言っていた。

(1)インドに発注したソフトを検収したら、全て 試験データが問題なく動いた。 (2)プログラムを見てみたら、何をしているか全く分からなかった。 (3)これで メンテナンス出来ない で、全て日本で書き直した。

一方で、 私 、あるインド人に、こんなことを言われた。

「日本人 仕事 Donky Workだ」。 つまり、ロバ ようにつまらないことをコツコツやっている 。

「 しかし、日本が発展した 、こ コツコツ おかげだ。『おしん』 様に」。 『おしん』 、インドで大人気だったそうだ。

と言われて、インド やり方 違うらしいと思った。その後長い間気になっていたが、それらしい例 が思いつかなかった。やっとそれそうな事例に出会えた。

こ 資料 解 、ナレッジ社でロボット システムを作っている泉谷君とスパイラル社でインターン をしている水野君 両君が出してくれた。私 考えたこともなく、これで書かれていたら確かに理解 出来ないと納得した。数十年にわたる疑問が解けた。両君に感謝する。

こんな問題を考えてみよう

旅費清算 プログラムを作ることにした。近間に出張するとき、出張命令書(下 図1:EXCEL 行 になっている)がある。そこに 、日付と行き先と理由などが書いてある。こ 出張命令書から、交通 費請求を自動的に作れないだろうかと考えた。

出張命令書

(1)出張 殆どが自社発着である。 (2)出張命令 各行 時系列に並んでいる。

(3)行き先と所要交通費 表を用意すれば、行った日付と場所などから交通費レコードを生成出来そ うだ。

(4)出先から別 出先に出かけること めったにない で、手で交通費レコードを挿入する。こ た め、ブランク レコードを挿入する。

以上 機能を整理すると次 ようになる。

(1) そ 日 出張と次 出張 日付が違う時 、交通費がかかった ず。

(2) 日付が同じでも、名前が違う場合 交通費がかかった ず。 同じ日付でも、行った人が違えば交通費 必要。

(3) 同一日に、複数 駅に行ったとき ブランク行を挿入する。

月日

出発予定

帰社予定

氏名

出張先

理由

0303

14:00

17:00

板倉

×工場

検査

0305

10:00

12:00

山田

本社

会議

           

出張先

駅名

片道運賃

×工場

川崎

¥420

本社

大手町

¥260

     

同じ日に複数 出張先に行った場合、会社から 交通費で 無い で手で書き込むようブランク 行を追加する。

以上 条件を満足するプログラムを書きたい。下記[1]~[3]を書いてみた。

  1. [1]  仕様書通りに書く
    プログラム1 (仕様通りに記述)

  2. [2]  仕様を表に整理する 問題 条件を表1 様に整理する。

if 現出張行 日付 <> 次 出張行日付 then 交通費レコード挿入

if 現出張 日付 = 次 出張 日付 then if (現出張 氏名<>次 出張 氏名) THEN 交通費挿入 else next

if 現出張行 日付 = 次 出張行日付 and 現出張行名前=次出張行 and 現出張行 駅名 <> 次 出張行駅名 then ブランク行挿入

表1 処理決定表

番 号

条件

指 示

意 味

駅 名 同 じ

名 前 同 じ

日 付 同 じ

0

0

0

0

1

挿入

1

0

0

1

1

挿入

2

0

1

0

1

挿入

3

0

1

1

2

ブランク挿入

4

1

0

0

1

挿入

5

1

0

1

1

挿入

6

1

1

0

1

挿入

7

1

1

1

0

無し

指示 凡例) 1: 交通費を挿入する
0: 交通費を挿入しない。

同じ 凡例) 1: 現出張と次 出張が同じ 0: 現出張と次 出張が違う

以下 プログラムで 、・・同じ
「現出張 ・・ = 次出張 ・・」が成立した時と解釈してください。

プログラム2 (表を引いて処理を決定) 表 バイアス(バイアス=駅*4+名前*2+日付*1)を計算して表を引いて処理を決定する (表 表1)

プログラム3 (表自体を整理してプログラムにする)

[3] もっと高度に整理すると(論理式で書くと) プログラム4 (論理式だけで判断させる)

プログラム5 (代数 応用でも解ける・・・参考 ) こ 例 2軸 みで書いている。3軸以上も可能。

if駅名同じ thena=1elsea=0next if名前同じ thenb=1elseb=0next if日付同じ thenc=1elsec=0next d = a * 4 + b * 2 +c * 1

if テーブル,d = 1 Then 交通費挿入 next
if テーブル,d = 2 Then ブランク行挿入 next

if 駅名同じ and 日付同じ then
if 駅名同じ then # ブランク挿入

else # 交通費を挿入しない else

# 交通費を挿入する

d = NOT 日付同じ OR NOT 名前同じ
if d = 1 Then 交通費挿入 next
if d = 0 AND NOT 駅名同じ Then ブランク行挿入

d = - a - b + 1.5
IF d < 0 then ブランク挿入

else 交通費挿入

以下解説

(0,1

(注)プログラム5参考 http://hokuts.com/2015/12/04/ml3-mlp/

評価式(左 点線を満足する関数を見つける) d = -x -y +1.5 (y = ax + b)

左図 点が評価式 上にあれば、ブランク挿入 評価式 下にあれば、交通費挿入

評価結果 正しく判断されている

(1,1

(0,0

(1,0

x

y

d

挿入

0

0

2

0

0

1

1

0

1

0

1

0

1

1

-1

1

以上 解を評価してみる。
[1](プログラム1) 要求通りに書いてある でトレース可能だが読みにくい。 [2](プログラム2) 、表だけあれば、何をしているかが分かる。プログラムに実世界(業務) ない で読む必要がない。 [2](プログラム3) 、表1プログラムを整理した上でプログラムにしている。プログラムを読んで、表が あればトレース可能。

[3](プログラム4) 、業務処理が論理式 中に隠れて待っている で、プログラムを読んでも分から ない。ただ、論理式な で、判断 関係らしいと 見当 つく。汎用的になって、名が体を表すこと が出来れば共通関数として見せられる。

[3](プログラム5) 、いきなり数式か出てきて業務と関係あるかさえ分からない。汎用的になって、名 が体を表すことが出来れば共通関数として見せられる。

一長一短あるが、日本人 [1]を書きがち、インド人 [3]を書きがちということだろう。

インドと日本 違い 日本 算数 教え方 、何度も繰り返して練習して覚える。Donky work風

インド 算数 教え方 、「こ 場合どういうやり方をすると簡単か考えなさい」と言う教え方ら しい。いわば、どうさぼるかを教えている。こ プログラム 問題に当て めると、こ 表 上手 い解き方を考えろと言うことになり、[3] プログラムが書かれる で ないだろうか。 こ 結果、プログラムを読んでも、何をしているか全く分からないということが起きる で ・・・。

板倉 評価

[2](プログラム2)を推薦する(個別機能である で) (1)業務(実世界)仕様が表で整理されている

こ 表に 、業務しかなくプログラムに業務 無い。また、表 抜けが少なく、一覧性が良い。 (2)表がそ ままプログラムに書かれる。仕様とプログラム 距離が短い。

そ まま書かれるとバグが入りにくい。また、見つけやすい。
(3) プログラム部分に 、表を選択する論理が書かれているだけである。業務が入らない。

プログラムで業務を理解する 難しい。 (4)プログラム 、独立したIF文と代数で成り立っている で、過去 条件に左右されない。

板倉語で 、ステートメント独立と言う。ステートメント同士が独立だと、分かりやすく、バグが入り にくく、変更しやすい。

以上書いてみて、こんなことを思った 優れも を使える人材がいるか?

(1) [3]が書ける抽象化能力 高い人が書いたソフト 、分からないがゆえに葬られる可能性があ る。某巨大企業で 、難しくて正しく動くプログラム 捨てられ、書き直された。場合によって 、人そ も が葬られる可能性もある。「あいつ 難しいプログラムを書く」とか・・・。特別先端的でない分 野 プログラム 、中程度 抽象化が求められる。

 

(2) そういう世界 ソフトを抽象化能力 高い人に書かせて もったいない かもしれない。逆に、 新たな知見がえられる かもしれない

(3) もっと賢い人 、相手 レベルに合わせて書くかもしれない。でも、こうすると能力を殺しているこ とになるな~。

仕様をプログラムにする教育あるい 、研究があるか?

(1) 大学で 、言語教育が主流。
(2) 要求定義 、要求定義に留まっている。
(3) 私 、仕様 整理術と言う言葉を聞いたこと 全くない。

社会に 、圧倒的にDonky向け 仕事が多い。
(1) Donkey Workを脱するに 、優れも がそ 分野に入ってこないと出来ないかもしれない。

トレーサビリティ(思考過程がトレース出来る)と 、抽象化能力 レベル 違いを埋めることかもしれ ないな~

・・・・・・・・・・・・・こ 項未完・・・・・・・・・・・・

以上