2020年1月12日

「標準入力はキーボード」という良くあるマズい表現

技術的な話をするなら、誤解の原因になる「紛らわしいことを混同させる表現」はやめようね、という話を標題にある典型例をネタにして。
3
angel as ㌵㌤の猫 @angel_p_57

ちょくちょくツッコミを入れる技術デマとして「標準入力はキーボード」ってのがあるんだけど。考えてみるに「紛らわしいものを混同させない『表現』」、意外と意識してない人が多いのかな。

2020-01-11 13:46:52
angel as ㌵㌤の猫 @angel_p_57

「紛らわしいものを混同させない」ってのは、種類であったりレイヤーが違うものを同種・同レイヤーに見える表現にしない、必要条件・十分条件・同値関係を明らかにする、一例なのか共通の特徴なのか区別する、とかとか。

2020-01-11 13:49:33
angel as ㌵㌤の猫 @angel_p_57

例えば有名な古典の一節として「春はあけぼの」という文がある。有名だからこれを見て「『春』ってのは『あけぼの』の一種なんだな。じゃ、『あけぼの』って『季節』って意味かな」とか、「『あけぼの』って『春』の別名なのかな」と勘違いする人はいないと思う。

2020-01-11 13:52:04
angel as ㌵㌤の猫 @angel_p_57

味気なくなるけど一応、「春はあけぼの」ってのは「春(という時期に特筆すべきものは) あけぼの (の風景の良さである)」とか。そういう文章の省略形と見るところだよね。

2020-01-11 13:54:33
angel as ㌵㌤の猫 @angel_p_57

そこで翻って「標準入力はキーボード」 もちろん知ってる人は誤解しないんだけど、これを見て「標準入力」=「キーボード」と思っちゃう人が後を絶たない。というか、そう誤解してるからこそ、そういう表現をするんだろうと思うし。

2020-01-11 13:57:11
angel as ㌵㌤の猫 @angel_p_57

別に非技術者が、単なる雑学として覚えるだけなら大した影響はないんだけど。色々応用していく時に不整合が出るんだよね。 例えばリダイレクトの話が「標準入力がファイルに変わります」とか。標準入力どこ行った、的な。

2020-01-11 13:59:26
angel as ㌵㌤の猫 @angel_p_57

今回の話では、実は3種類のプレイヤーがいる。 標準入力という「データをやりとりするための口、経路」、キーボードやファイルといった「データの供給元・保存先」、残りは実際に遣り取りされるデータ。これらの区別ができてない人を混乱に突き落とすことに。

2020-01-11 14:03:11
angel as ㌵㌤の猫 @angel_p_57

その観点で言うと、「標準入力のリダイレクト」ってのは、「標準入力をファイルに変えます」ではなくて、「標準入力『の接続先』をファイルに変えます」なんだよね。分かってる人は、無意識かどうかは分からないけど、こういう大事な言葉を抜いた紛らわしい表現を避けてる。

2020-01-11 14:06:28
angel as ㌵㌤の猫 @angel_p_57

ただ、なんとなく「標準入力『を』変えます」と言いたくなるのには理由があるのかな、と思っていて。なにかというと、「変えます」というと「じゃ元はなんだったの?」という疑問が出るところ、「標準入力を」というと無かったことにできるから。無意識に誤魔化しちゃうのかな、と

2020-01-11 14:09:03
angel as ㌵㌤の猫 @angel_p_57

実はここが大事なポイントで、「『接続先』を変えます」「じゃ元はなんだったの?」というところ、「その元は『状況によって色々あります』」なんだよね。 言い方を変えると「変えなければ元の状況を引き継ぎます」という「お約束」が見えてくる。

2020-01-11 14:12:59
angel as ㌵㌤の猫 @angel_p_57

ここで「標準入力はキーボード」のもう1つの問題点。 前述のとおり、標準入力の「接続先」は状況によって様々なところ、キーボード「しかない」と錯覚させちゃうから。 「一般の人は標準入力がキーボードに接続されている状況に馴染みがあります」なのに。

2020-01-11 14:15:51
angel as ㌵㌤の猫 @angel_p_57

これは一部・全部の錯覚かな。ここを誤解してると、paizaやatcoderの「標準入力」わけわかんなくなるよね。まさか社員さんたちがユーザのプログラムにキーボードからいちいちデータ入力するわけないんだから。

2020-01-11 14:18:22
angel as ㌵㌤の猫 @angel_p_57

「標準入力の接続先は状況によって変わります」「コンソールで操作してたらコンソールに接続されます」「paizaなんかだと問題のパラメータの供給元に接続されます」これならなんら不自然ではない。

2020-01-11 14:21:10
angel as ㌵㌤の猫 @angel_p_57

勘の良い人なら更に「先」に気付くと思う。 「どこに接続されているとしても、アプリからその違いを意識せずに、同じ操作(コード)で扱える『お約束』にしてるのが『標準入力』だ」と。 つまり、標準入力ってのは「プログラムの実行モデル」という「お約束」に関する話。

2020-01-11 14:25:07
angel as ㌵㌤の猫 @angel_p_57

…とまあ。こういう話をしていると「細かい話は良いんだ」と混ぜっかえす人が必ず出るんだけど。 細かい話を知らなくても、混同させない表現はできるし、真っ当な技術者ならやってるはずなんだよね。 「分かってる範囲で書く」「分からないところを憶測で書かない」

2020-01-11 14:27:30
angel as ㌵㌤の猫 @angel_p_57

「標準入力はキーボード」だったら「標準入力はキーボードから入力された文字を受け取るためによく使われます」とかね。 とくに、知りもしない「仕組み」をでっちあげるのは、応用に入る時に有害でしかないから止めた方が良いし、そういう説明も多いから鵜呑みにしないように。

2020-01-11 14:36:24
angel as ㌵㌤の猫 @angel_p_57

というわけで、風情はなくても「春はあけぼの」と言わないのが技術者かな、と。

2020-01-11 14:37:18

コメント

Tsuyoshi CHO @tsuyoshi_cho 2020年1月13日
むかーしの直IOまで戻ると、それはそれでだったり?(まあそれを標準入力とはいわないけど)
1