算数ができない

  • 投稿日:
  • by



電卓があっても計算ができないような人が開発者のフリをしてバグを作りこんでいることがあります。


たとえば、1秒間に200Kバイトのデータを吐き出す装置があるとします。


0.1秒ごとに処理するなら、1秒当たり20Kバイト処理する必要があります。


この辺まではかろうじて計算できるようです。まぁ子供でも分かることですからね。


問題はここからです。


1.2MBのデータ転送について、プログレスに転送レートを表示するには、以下のような計算が必要になります。



転送の進捗[%]:転送完了したバイト数/転送する全バイト数*100


転送速度[バイト/秒]:過去1秒間に転送したバイト数



過去1秒間に転送したバイト数をカウントするためには、0.1秒ごとの処理の中で、10回分の転送データバイト数を積算すれば良いだけです。


そしてそれをたとえば1秒ごとに表示します。(←ここがひっかけです)


ですが、表示が1秒ごとでない場合、たとえばおよそ0.4秒ごとだったりすると、算数ができない人はすぐにバグを作りこみます。


0.1秒ごとに処理しているモジュールから1秒ごとの転送速度を受け取っているのに、以下のような意味不明な計算をおこなって、バグを生み出すのです。



え~と。1秒ごとの転送速度がSpeedなんだから、0.4秒ごとだと、


SpeedDisp = Speed*0.4/1.0;


だな。



それは間違ってますよ、と誰も言わない場合、転送速度の表示がおかしいというバグ指摘に対して、算数ができない人は、



表示は0.4秒周期なのに、転送処理モジュールが1秒ごとの速度を計算しているのがバグの原因です。



と胸を張って、バグチケットの担当者を転送モジュールの担当者に付け替えてしまうのです。


言い訳だけは上手で、さらにこんなことも言い出します。実装を知らないマネージャ諸氏もだまされる場合があります。



表示は厳密に0.4秒周期ではないから、正確な1秒ごとの転送速度は絶対表示できません。


これは要求仕様の不備です。



あいた口がふさがらないとはこのことです。



この手の人をあぶりだすには以下のような質問が効果があります。



車で時速40キロで、7キロ離れた所へ行くのに、だいたい何分かかる?



1時間で40キロ進むのだから、10キロ進むのに、1時間の4分の1で15分。5キロなら、7分半。だから10分くらい?、というように考えられる人は、少なくともバグを作りこみそうになっても検算して思い直すことができます。


すぐに、距離と時間と速度の関係を使って、7/40*60=10.5分と答える人も問題ないです。


ですが、いきなりわけの分からない方程式を書きだして、間違えた計算式をそのまま実装するような人は手がつけられません。そういう人には他の仕事に移ってもらうしかありません。



電卓がないと計算できないと言い訳する人は、最初から計算の仕方を知らないだけでなく、最初に挙げた簡単な見積もりもできません。そんな人は電卓があっても計算できませんし、それをプログラムに実装することもできないのです。


そういう人がプログラマのふりを続けているのは、質問している様子を見ればわかります。



回答者:距離と速度がメートルと、時速[km/h]の単位で関数の引数になっているから、割り算してreturnすればいいだけですよ。


・・・


質問者:それで、計算式はどうなるんですか?




そんな人は他の仕事をおすすめします。もちろん家で通信教育でも受ければ多少は改善されるでしょうが、根本的に向いていないのであきらめた方がこれからの人生楽に生きていけるでしょう。いずれ通りすがりのだれかに、みんなの前で大恥をかかされる恐怖からは逃れられると思います。



結城先生にも高尚すぎる内容の数学ガールではなく、算数ガイのような救いようがない人を救うための本を書いてほしいものですね。



数学ガール

数学ガール