情報処理業界における抽象化の定義
早速ですが担当プロダクトで機能追加をしたらDBの処理が遅くなりました。EXPLAIN
でSQLを確認するとtype
がALL(テーブルフルスキャン)となっていたため「とりあえずインデックスでも張ってみるか」ってな感じでCREATE INDEX
してみたら、処理時間が一気に1/10に削減しました。インデックスって凄いなぁと思いました。
はじめに
前説が夏休みの作文風になってしまい最近のネタ切れ感が否めない今日この頃、英知を振り絞りタイトルだけでも技術っぽく繕ってみました。
が
結局はネットに転がっている記事の紹介と全くもって生産性がない内容(薄っぺらな業界ネタ)になったことをご了承願います。
日本の抽象化定義
この業界で必ずと言っていいほど一度は耳にしたことがあり、名前は誰でも知っていますがその実態は誰も知らない謎の定義があります。今日はその定義について述べさせて頂きます。
その定義というのはもともと海外が発祥のようですが日本国内においても情報処理技術と共に流入して来て、独自の変化をしたと思われます。前置きが長くなりましたがその定義というのは
hoge
情報処理業界(特にソフトウェア系エンジニア)の方は必ず知っている定義ですよね。ところがhogeってナニ?と聞かれて明確に答えられる人はどのくらい要るのでしょうか?初めて耳にする人は全く何のことやら分かりませんよね。
悲報:プログラムサンプルの「hoge」が通じない時代が来た一言で言えば抽象化の定義というか、平たく言えば架空の名前でしょうか。山城新伍さんのXX(ちょめちょめ)と似たような意味合いですかね。余計わかんなくなった…?
山城新伍が言った「ちょめちょめ」とはどう意味hogeは多種多様に使えます。以下にその使用例をいくつか挙げてみました。
クラスやメソッド例
develop/application/controllers/Hoge.php
<?php
class Hoge {
/**
* fugaメソッド
*/
public function fuga($key='')
{
echo 'Hoge class Fuga method key='.$key.PHP_EOL;
}
}
DBのテーブル例
SELECT * FROM `hoge` LIMIT 100000 10 ORDER BY `id` DESC;
Webサイトやパラメータ例
$ curl http://fugafuga.com/hoge/fuga?key=hogehoge
その他様々な言語に対応
(Hello, World!というのは世界で最も有名な課題の名称です)
・C言語
#include <stdio.h>
int hogehoge(int argc, char *args[])
{
printf("Hello, World!\n");
return 0;
}
・COBOL
+--------1---------2---------3---------4---------5---------6---------7-+-------8
000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. HOGE-01.
000030*
000040 ENVIRONMENT DIVISION.
000050*
000060 DATA DIVISION.
000070*
000080 PROCEDURE DIVISION.
000090 HOGEHOGE.
000100 DISPLAY "Hello, World!" UPON CONSOLE.
000110 STOP RUN.
・Ada
with Ada.Text_IO;
procedure Hogehoge is
begin
Ada.Text_IO.Put("Hello, world!");
end Hogehoge;
その他、Smalltalk,ALGOL,Fortran,Go,JCL,ASM,etc…
普段の生活にも対応可能(?)
hogehoge市fugafuga町1条1丁目へ乃6番
みなさまもまわりにあるhogeを見つけてみてはいかがでしょうか?(無いと思うが)
欧米諸国における抽象化の定義
先に述べたようにもともとは海外から流入してきたものですが、その海外ではどのように表現されてきたかというとfooやbarと定義されていました。ではいつからfooやbarが使われてきたを紐解いてみたところ、サクッと見つかりました。(こんなのをStack Overflowで質問する輩がいること自体が草)
What is the origin of foo and bar? [closed]情報処理業界においては1964年にMIT(マサチューセッツ工科大学)とDEC(ディジタル・イクイップメント・コーポレーション社、現:ヒューレット・パッカード社)が最初と言われて当時、MITにあるDEC社のPDP-1(!)マシン上で実装していたLISP処理系の文献で使われたのが最初のようです。
情報処理業界以外では1959年にMIT内にあるテック鉄道模型クラブが最初にfooを使ったと言われているようです。#鉄ヲ夕@MIT
その語源についてはそこから更に20数年ほど遡るようです。興味のある方は上記出典の回答#62をご覧ください。論文にまとめたらイグノーベル賞を狙えるかもしれません。
イグノーベル賞ローカル定義
fooやbarがどのようにhogeやfugaに成り代わったのかまでは調べてませんが、日本では確実にhogeやfugaが浸透しています。
ところがオリジナリティにこだわる人もいて、ある会社ではその定義をahoahoとしていました。定義以外にパスワードとかにも使われており、複数人使用する機材等のパスワードによく採用されていました。
過去にパスワード設定者が不在となりパスワードが遭難したことから、それ以降社内では暗黙の了解というか、みんなが知ってるパスワードというか、この由緒正しいパスワードを脈々と引継いでいました。
当然のことながらテストデータとしてもahoahoは頻繁に使用していました。ある日ahoahoahoaho…を上限まで登録したテストコンテンツを使い負荷テストをしていましたが案の定、使用していたサードパーティのライブラリ(海外製)に動作不良が発生しました。
ライブラリ側は障害調査のために使用したテストコンテンツを要求してきました。さすがにahoahoはマズいだろうと言うことで、悩んだ先輩は何を思ったのかahoahoをbananaに変換して彼らに送りました。
― 数日後に来たメールの返信
this Banana’s contents …
しっかりバナナコンテンツとして認識したようです。きっと彼らはこう思ったに違いありません。
Why so much Japanese likes bananas?(なぜそんなに日本人はバナナが好きなのか?)
その後、東京ばな奈が有名なお土産になったことで彼らの疑念は確信に変わったことでしょう。
おわりに
バナナコンテンツの話を隣のOちゃんにしたところ彼曰く ―
外人なら”ahoaho”と書いても意味が分からないんじゃないですか?
はい、ごもっとも…
PS
数ヶ月前、開発室長が出張時にお土産で買ってきて頂いた羽田空港限定の東京ばな奈はちみつバナナ味の中に入っていたボールペンです。興味があればお買い求めください。