プログラマーがISO標準を無視するのはなぜですか?[閉まっている]


18

私がよく遭遇することの1つは、ISO標準に準拠していないプログラムによって引き起こされる問題です。

1つの例は、ISO国テーブルを使用せず、独自の短縮形を作成することです。これは、米国(米国)またはオランダ(NL)には問題ありませんが、英国(GBではなく英国)またはスペインには見事に間違っています。 (ESではなく、SP)および他の多くの国。

別の例として、内部日付表記。なぜ誰もが日付を2014年1月2日として保存するのでしょうか?それが2月1日であるか1月2日であるかは完全に不明ですが、ISO標準を使用する場合は2014-02-01 *のみを保存し、2月1日であることは明白です。

私の質問:ISO規格が利用可能な場合、プログラマーはいつ、なぜ独自の構成を作成する必要がありますか?

* 2014-02-01を保存し、エンドユーザーに表示するときに日付を適宜フォーマットします。


64
彼らは彼らを知らないか、忘れてしまったからです!膨大な数のISO標準があります。...ISO26262のすべてを知っていますか?
バジルスタリンケビッチ14

11
通常、プログラマーとしての経験の欠如は、結果が何であるかを理解していないことをします。一般に、「私はこのようにするだけ」という簡単なことは、すでに何かが存在するかどうかについての評価なしに即座に考えられます。
ダムケウル14

13
また、多くのISO標準を見つけるのは簡単ではありません(通常、大金がかかり、最新のドラフトを見つけるのはそれほど簡単ではありません!)。
バジルスタリンケビッチ14

64
標準の素晴らしいところは、選択できるものが非常に多いことです!
ヨルグWミットタグ14

5
最も奇妙なものの1つは、英語以外のロケールユーザーに英語以外を強制的に正しく動作させるためにローカルシステム全体の設定を小数点に変更するプログラムです。RTLシステム(ヘブライ語、アラビア語)はもちろん、非英語文字セット(ロシア語、日本語、ギリシャ語)で動作を拒否したり、単にゴミを生成したりするプログラムについては言うまでもありません。いくつかの無知が関係していると思います。
JensG 14

回答:


63

愚かさによって十分に説明されている悪意に起因することはありません。- ロバートJハンロン

それと、コミュニケーション不足。

だから、それは反ISO感情の陰謀ではなく、人々に「私はGBの代わりにUKを使うだろう」と思わせたり、「彼らはよく知っている」という傾向、あるいは標準が良くないという感覚でさえない。それが完全にあるのは、彼らがそれがそこにあることを知らないだけで、彼らはそれを使うべきだからです。

つまり、一部の人にとっては、Visual Studioにバンドルされていない場合、存在しない可能性があります。他の一部の人にとっては、完全なセットを望んでいないか、最終的なリストを取得するのが難しいため、自分のサブセットを作成して、当面の状況を解決するかもしれません。他の人にとっては、デフォルトは使用されるものです-したがって、日付の書式設定は「ISO、または国のロケールで書式設定されていません」、「出てくるものはすべて書式設定されています」アメリカのプログラマーに対する批判)。


20
ISO規格の多くが高価であり、入手が難しいことは助けにはなりません...
heltonbiker 14

yyyy-mm-dd ...は高価ではありません
ハーフビット14

11
@halfbit:購入に費用がかかりますが、計算リソースは高くありません。真剣に、彼らの店をブラウズしてください。あなたは欲しい浮動小数点標準を?それは178フランになります。
user2357112がサポートするMonica 14

32

Rubyでプログラムを作成するとき、私は通常、ISO Ruby標準を常に無視します。どうして?それは信じられないほど制限的だからです!ISO RubyはRuby 1.8とRuby 1.9の共通部分の最小サブセットです。すべてのRuby実装でサポートされている(または、少なくとも間もなく)Rubyの現在のバージョンはRuby 2.1であり、プログラミングを容易にする多くの機能を備えています。ISO RubyでのプログラミングはPITAです。

C#でプログラミングする場合、C#2.0のサブセットであるISO C#も無視します(さらに重要なことは、ISOクラスライブラリは.NET BCLの非常に小さなサブセットです)。代わりにC#5.0でプログラミングします。 ISO CLIで指定されているライブラリのみを使用するように制限するのではなく、.NET 4.5.2およびMono 3.4.0で使用可能なライブラリの共通サブセットを使用します。

また、Webデザインを行う際には、HTMLが古代バージョンのHTMLの制限されたサブセットよりも機能豊富であるため、ISO HTML(HTML 4.01 Strictの小さなサブセット)よりもHTML5を使用することを非常に好みます。

したがって、ISO標準を無視するのには十分な理由があります。


9
C、C ++、Fortranの場合、状況は非常に異なります。
ウラジミールF 14

1
これは、質問が意図しているように「無視する」ようではなく、「必要なことを行うツールを選択する」ようです。C#5.0の機能が必要な場合、ISO CまたはISO Fortranを使用するよりもISO C#を使用する方が理にかなっています。それは単にあなたが求めたツールではなく、ISOには同等のものがありません。あなたの例には、ISOのものではなく、明確に定義された標準に固執することも含まれています。
ルーシェンコ14

3
@Leushenko私は同意しません。OPは、常にISO標準の期間に従うべきだと考えているようです。この「べき」に対する反抗的な例に対しては+1。
djechlin

3
すべては順調ですが、質問は本当にプログラミング言語のISO標準ではなく、データ表現のISO標準について話していたと思います。
アーロンノート14

4
一部は(いくつかの)ISO規格は、「委員会による設計」の完璧な例アンチパターン...であることを主張
heltonbiker

22

あなたの例では、「GB」は英国の国コードです。ただし、「UK」はかつてMARC(米国議会図書館)の標準コードでしたが、これは非推奨だと思います。そして、IANAは.uk英国のトップレベルドメインに使用します。

したがって、何かがISO標準に準拠していない場合標準が使用されていないという意味ではありません。それは単に異なることを意味するかもしれません標準が使用されます。(@Jörgがコメントで指摘したように、標準の良いところは、選択できるものが非常に多いことです。)その場合、問題は実際にどの標準が特定の問題ドメイン、環境などに最も適切になるかです。

その質問への回答は、おそらく大部分が意見に基づいており、すぐに「宗教的な」議論に退化するでしょう。しかし、ISO標準への準拠が常に最良の答えとは限りません。たとえば、あるソフトウェアがライブラリデータベースと連動する必要がある場合、ISOよりもMARC標準の方が適切な選択になる可能性があります。組織のソフトウェアの大部分が特定の方法で機能している場合、少なくとも短期的にはそのアプローチに固執することをお勧めします。結局のところ、それは組織の「標準」です。


また、標準は進化/変更します。昨日適合したものは今日ではないかもしれません。


そして、私はあなたが指摘する問題の原因として無知やナマケモノを排除したくないでしょう...開発者は単にそれらに対処するのに十分な時間を持っていなかったかもしれません。


15

ISO規格への準拠は、必ずしも費用のかからない活動ではありません。使用しているツールキットに特定の標準がまだ実装されていない場合、プログラマーは必要な選択に直面します。今すぐこれを適切に実装するか、標準を実装せずに後で変換を処理する方が安価ですか?

「ほら、いつも標準を実装すべきだ」と言うのは簡単ですが、すべてにコストがかかります。また、プログラマーがISO標準の実装を望まない理由はいくつかあります。

  • 顧客は、独自規格または非ISO規格に従っている場合があります。顧客が望むものやあなたの言語が必要とするものに加えて、追加の実装を隠すことで、後継者に意図しない頭痛を残すよりも、顧客が期待している標準に従うことをお勧めします。
  • 大量の既存データが存在する可能性があり、変換またはフォーマットブレークがまだ実行できない場合があります。現地の日付時刻をキーとする20年の顧客連絡先と契約がある場合、正しく実行できるまで、これらの何億ものフィールドすべてをISO標準日付に変更する必要は必ずしもありません。
  • 標準を順守すると、利益が提供するよりも大きなコストがかかる場合があります。たとえば、完全に米国内でエントリを処理している場合、5文字のISO-3166-2コード(US-NY)は、標準の米国郵便コード(NY)よりも不要な3文字です。

1
アジャイルプロセスはさておき、設計/仕様フェーズでは、実装/保守フェーズよりも設計/仕様フェーズでの機能を含める方が常に安価です。これは、設計フェーズが作業の10%しか占めていないためです。これは、収益の減少の法則の逆に過ぎません-単体テストまたは受け入れテストの結果として発見された場合に比べて、生産における欠陥の特定と修正が最大10倍の費用がかかることに似ています。ISO標準をまったく使用しない確かな理由がある場合は、それで問題ありません。後で実装すると言ったら、嘘をついています。
アーロンノート14

@Aaronaught:「変換」とは、内部の書き換えではなく、外部ファイルの変換を意味することを明確にする必要があると思いますか?
ダグ14

それがあなたの言うことなら、確かに私は明確にするでしょう。ISOはファイルタイプよりも多くのデータタイプの標準を定義しているため、通常はそれほど単純ではありません。ほとんどの開発者は、ドキュメントや「ファイル」自体を処理しないアプリケーションを処理します。たとえば、データベースにISO以外の日付または国コードを格納する場合(および対応するISO日付または国コードを格納しない場合)、将来の変換のコストは非常に高くなります。一方、業界固有のファイルタイプをインポートするだけの場合は、いつでもインポートできます。
アーロンノート14

+1「...これらの何億ものフィールドすべてを変更する必要は必ずしもありません...正しく実行できるようになるまで。」丁度。
デビッド14

14

経験の浅いプログラマー/データベースデザイナーの場合、それは知らないためです。業界にまたがる人々のグループを知らないため、車輪を再発明する傾向があり、すでに問題について議論し、参加したすべての人によって承認された標準を思い付きました。しばしば非常に長い議論、改訂などの後です。ある週が1年の最後の週と見なされるか、来年の最初の週と見なされるかに関するISO標準があると彼に言ったとき、私のものは信じられませんでした(ISO 8601)。彼は、それほど具体的なものに関して標準が存在するとは考えていませんでした。私は彼に、多くのアプリケーションの正確性はその標準に依存していると言いました。

経験豊富なプログラマー/データベースデザイナーの場合、「もっとよく知っている」、ここで発明されていない症候群、および/または壮大さに起因する無視です。ISOコードは「十分に安定していない」と考えているため、ISOや他の標準機関を信頼していません。そこで、独自の、ここで作成された、または自動インクリメントされたコード/識別子を作成して相互運用性を妨げますが、これも無視します。この類似の質問をご覧ください。次のような理由があります。

標準がどれほど安定しているかに関係なく、データベース設計を多数のサードパーティ(IATA、ISO)に依存させるとは限りません。または、特定の標準にまったく依存したくない場合があります。

ここに画像の説明を入力してください

奇妙なことに、標準を無視する人は標準のUSBポートを使用し、標準サイズのDVDとBluRayを購入し、標準に準拠したタイヤで車を運転します。


12
経験豊富な反ISOプログラマーの似顔絵には-1。
djechlin 14

4
@djechlin引用符で囲まれたフレーズは、リンクされた質問の実際の回答からのリテラルです。ページで検索して、それらが実際の意見であることを確認することもできます。また、すべての経験豊富なプログラマーが標準を嫌うわけではありません。
Tulainsコルドバ

2
@djechlin私の答えには、リンクされた質問があります。「この類似の質問を見る」を探してください。「質問」という言葉にはリンクがあります。引用符で正確なフレーズを検索できます。
Tulainsコルドバ

2
リンク@djechlinここにあなたがそれを持って、答えは、ない質問である:programmers.stackexchange.com/questions/204340/...
Tulainsコルドバ

5
反対に、この答えを書いた人はリンクされた質問を誤って伝えています。その問題は、標準を使用したくない人ではなく、特定の標準の安定性主キーとして依存していることでした。今日、ほとんどの経験豊富なデータベース設計者は、「自然なキー」である期間からあなたを遠ざけようとします。これは、物理データベースの設計を論理データから切り離すための単なる議論です。標準をまったく使用しないと言う人はいません。
アーロンノート14

10

まあ、人々はISO標準を無視する傾向があります:たとえば、あなたは書いた

ISO標準を使用する場合、20140201 *を保存するだけで、2月1日が明確になります。

しかし、完全にISO8601準拠のレンディションは実際には2014-02-01です。(xkcd 1179も参照)


7
ISO8601標準では、完全なカレンダー日付表現にYYYY-MM-DDとYYYYMMDDの両方の形式を使用できます。
ピーターB

1
確かに; したがって、私の記述は「完全準拠」です。20140201は、標準の「基本」形式です。
クレマン

8
ISOでは、基本形式と拡張形式が許可されていますが、どちらも完全に準拠しています。
ピーターB 14

10
ISO 8601 was published on 06/05/88 and most recently amended on 12/01/04.クラシック
WernerCD 14

8

理由の1つは、アプリケーションドメインとユーザーがこれらの標準を自分で使用しない可能性があることです。一部のドメインがいくつかの標準を使用している場合でも、多くの場合、歴史的な理由により、それらの一部はISO標準とは異なる選択を行っている可能性があります。

ユーザーが既存の手順(1)で既に「UK」を使用して「英国および北アイルランド連合王国」を参照している場合、データ構造で「GB」を使用することは必ずしも意味がありません(特に、国別の意味は「ISO」の国ではありません。たとえば、英国の分離やチャネル諸島との微妙な違いなど)。もちろん、内部ストレージとプレゼンテーションをマッピングすることもできますが、場合によっては少し上になります。プログラミングのためにプログラミングを行うことはめったになく、環境に適応する必要があります。(2)

また、これらの標準はソフトウェアと並行して進化したことを覚えておく必要があります。多くの場合、ソフトウェアの他の部分のコンテキスト内で開発する必要があります。その一部は不完全に設計されている場合があり、一部は依然としてレガシーの決定の影響を受ける可能性があります。

内部データストレージ形式を見ても、あいまいさを解決するのは困難です。たとえば、私が知る限り、Excelはタイムスタンプを表すために10進数を使用します。基準日からの日数として整数を使用し、小数点以下は24時間の端数を表し、時間を表します。 ..問題は、これによりタイムゾーンまたは夏時間(1日の23hまたは25h)を考慮することができず、Excelがデフォルトで日付/時刻をその内部形式に変換することです。ISO形式を使用するかどうかは、使用する必要がある別のソフトウェアが選択の余地がない場合は無関係になります。

(1)ここで「プログラミング手順」を意味するものではありません。

(2)なぜ人々が日常生活でもこれらの基準を使用しないのか、私に聞かないでください。つまり、YYYYmmddは明確で、dd / mm / YYYYは明確ですが、mm / dd / YYYYのような中、小、大の粒度の順序で日付を注文すると、意味がありません:-)。


1
ハ!意味をなさないものを知っていますか?小数が必要なコンマ!;)
Darkwater23 14

@ Darkwater23ハ、私はどちらの方法でも構いません。それは単なる慣習であり、意味をなす必要はありません。mm / dd / YYYYは完全にロジックが欠けているように見えることを常に発見しているだけです。タイムスタンプをmm-MM-dd-HH-YYYYまで移動してみてください;-)しかし、そうですね、それはただの方法ですですから、私たちはそれと共に生きなければなりません。
ブルーノ14

2
Darkwater23実際には、@ :ISO標準用途奇妙なUnicodeのシンボルが(このキーボード上の小数点区切りのため)、と私は無地の目盛り(思った'(私は今それを見つけることができませんが))の数字が同様にグループ化するために標準化された
Izkata

夏時間が時間の浪費であるという別の理由を指摘したことに対して+1。
ctrl-alt-delor 14

1
@richardどちらにしてもDSTを気にする必要はありませんが、プログラマーはタイムゾーン情報を含むタイムスタンプできる限り保存することを目指してください。とにかく、アプリケーションが複数のタイムゾーンで(DSTとは無関係に)使用されることは珍しくありません。タイムスタンプを保存するときに曖昧さの余地をほとんど残さないようにしてください。(常に適用できるとは限りませんが、疑いの余地があり、それを常に考慮する価値があります。)もちろん、これは複雑な問題です(たとえば、+ 01時間だけでなく、用途によっては場所も重要になる場合があります)。
ブルーノ14

8

ISO 3166-1 alpha-2国コードを使用しないのはなぜですか?

私はSTANAG 1059国コードを使用しているので、その英国では(ISO 3166-1のGBの代わりに)イギリスのコードです。

別の方法として、FIPS国コードを使用することもできます-ここでも、英国は英国の国コードです。

多くの標準(ISOおよび非ISO)があり、特定のドメインがISO標準と互換性のない標準を使用/要求する場合があります。


7

20140201の保存は明確ではありません。ISO標準に準拠している知識を含めた場合にのみ、明確になります。同じことが2014年1月2日にも当てはまります。形式がmm / dd / yyyyであるという知識を含めると、完全に明確になります。

アプリケーションが他のアプリケーションとのインターフェースを必要としない限り、十分に文書化された標準は同様に機能します。

人間にとって簡単なもの(私は2014年1月2日から2日まで使用する傾向があります)とコンピューター(ISOの代わりにバイナリー表現を使用したほうがよいでしょう)の間にはトレードオフがあります。初心者のプログラマーは、簡単に理解できるものにこだわる傾向があり、プログラマーがコンピューター指向ストレージの利点を理解し始める経験が増えています。


4
同意した。国際的な消費の申請書を書いていたら、ISOにもっと関心があるでしょう。中米向けのアプリには、オーバーヘッドや制限は必要ありません。
Darkwater23 14

4
「アプリケーションが他のアプリケーションと連動する必要がない限り」と書くことで、ISO標準を使用する強力な理由を示しました。
Tulainsコルドバ

5
プロフィールには現在地が記載されていないため、サンプルの日付が1月か2月かはわかりません。
djechlin 14

6
-1は、他のアプリケーションとインターフェイスしないと仮定します。これは、プログラミング業界全体に反しています。
djechlin

18
@Jeff:私は今まで決してそのような符号化が可能である、請求項以外の目的のためにYYYYDDMMとして符号化された日付を見ました。あなたは?
スーパーキャット14

5

これまで提起されなかった点は、国際標準の文化的適切性です。

測定の国際標準を検討してください。それらを米国のユーザーに紹介しましょう。すべての米国ユーザーがキロメートル、キロ、リットルについて満足しているとは思いません。

国際基準は政府によって書かれていることを考慮してください。スペイン政府がバスク語を認識しないことを選択した場合、ISO仕様はどのように取得されますか?これは特に、疎外されたグループの方言とクレオールに関する問題です。

国コードでさえ問題になる可能性があります。クリミア自治共和国は現在、独自の国コードを取得していますか?公式は最終的に発見されます(たとえば、「マケドニア旧ユーゴスラビア共和国」)が、外交または戦争が終わるまで、アプリケーションに代わるものが必要になる場合があります。

特定のアプリケーションを念頭に置いて国際標準が作成されていることを考慮してください。これらはアプリケーションに完全に適合しない場合があります。たとえば、文字を送信する目的で言語を保存している場合、たとえばアメリカ英語などの会話に堪能であっても、視覚障害者を明確にコーディングすることができます。統計機関は、人口調査中にあらゆる可能性のあるエッジケースに遭遇するため、変数の正確な意味(別名変数の「メタデータ」)を指定する必要性をよく認識しています。その厳密さの一部は、データベースフィールドにとって価値があります。

最後のポイントは、これらの種類の選択を行う際に、あなたのプログラムが政治的声明を発表している可能性があることです。この現実は、最高のコードを混乱させる可能性があります(たとえば、同じ言語に対して複数の言語名が必要になる場合があります)。


ほとんどの盲人は、誰かに手紙を読んでもらうことができると信じています。あなたが彼らに手紙を送る最初の人(または会社)になるということではありません。
ワイルドカード

5

私の経験では、プログラマーは次のようなさまざまな理由でISO標準を使用できません。

  • 「ISO標準があることを知りませんでした」(あなたに言われたら、正当な理由ではなくなります!)
  • 「標準にアクセスできません(コピーが見つかりません/コピーできません)」(本当に??)
  • 「標準は制限が強すぎる」(通常、標準に「禁止」と書かれている場合には、正当な理由があります。あなたとあなたの顧客の危険を無視してください!)
  • 「この標準には最新の機能/ライブラリが含まれていません」そうではないこと)
  • 「この標準は実装するのが面倒です」(過度に使い古された言い訳ですが、下記参照)

私がスタッフから受け入れた唯一の理由は、口実が悪い言い訳ではないとして、「標準は本当に良い「適合」ではない」-証拠に裏付けられている。該当するISO規格の複雑さは、問題/解決策とは比例していない場合があります。ソリューションを実装するコンテキストが、標準で想定されているコンテキストと大幅に異なる場合があります。そして、時には標準を改善することができます-それが進歩が起こる方法です。

しかし、多くの場合、ISO標準の使用の失敗は、経験不足、怠laz、or慢に起因する可能性があります。英語を話すプログラマーは、国際化に関して特に怠で有罪であり、米国の同僚はISOを「無関係なヨーロッパのもの」(これが当てはまらない少数派への謝罪)と見なす傾向にあることを後悔しています。


5
それは必ずしも無関係なヨーロッパのことではありません。あなたが彼らに従う人と相互運用する必要がない限り、それは無関係です。ヨーロッパ人は、標準に見える以外の理由なしにANSI標準に従う頻度はどれくらいですか?
ストーンメタル14

1

ISOには多くの標準があります。CCITT / ITUと同様。これらの標準の一部は「熱心な」標準であり、その他は最低限必要な機能です。どちらがどれであるかは明確ではありません。

1980年代に、一部の機器ベンダーが標準の1つのサブセットを実装し、他のベンダーが別のサブセットを実装する理由を尋ねたのを覚えています。そのとき、何かが機能する前に標準がしばしば設定されることが明らかになりました。また、ベンダーはしばしば、相互運用性を妨げることができるように、意図的に標準を実装しないことを選択します。

IETF RFCが好きなのはそのためです。RFCの3つの独立した実装があるまで、それらはRFCにさえなりません。


2
IETFの「大まかなコンセンサスと実行中のコード」モデルは、少なくとも1995年には早くも放棄されていました。 「。完全に指定不足のプロトコルを実装し、あなたがしたのと同じくらい推測しなければならない他の実装でそれを動作させる方法を考え出す代わりに、「実行コード」標準が導入されたときは良かったです。
msw 14

1
IETF RFCを使い始めたとき、1995年以前に開発されたものを使用しました。実行中のコード仕様が最適です。そうしないと、アイボリータワーのチャートウェアエンジニアの多くが、仕様を実行する責任なしに仕様を夢見てしまいます。
ジェイゴッド14

1

Oracleデータベースを構築していて、日付を保存したい場合は、Oracle DATEデータ型を使用します。OracleがISO標準に準拠しているかどうかは知りませんし、気にしません。これは、実際には別の標準(Oracleの標準)に準拠している場合であり、ISO標準からそれほど離れていません。@Davidの応答を参照してください。

場合によっては、自分が設計したもののISO標準が存在することに気づいたときには、元に戻って再設計するコストが法外なものであったか、少なくともそのように見えました。

短期的には、既存の標準を注意深く研究するよりも、利用可能な標準を使用するか、新しい標準を発明することにより、より多くの実用的なコードが生成されます。欠点は、大規模な統合に相互運用性が必要な場合に発生します。ほとんどの場合、これは後のプロジェクトのコンテキストで発生します。


1
私はOracleに精通していませんが、SQL ServerまたはMySQLを使用する場合、もちろん、日付を保存するときにそれぞれの日付データ型を使用します。ただし、日付を使用してクエリを作成する場合、ロケール日付を使用したときにヒットまたはミスした箇所で、両方ともyyyymmddを非常によく認識します。
ピーターB

それは良い点です。ストレージの標準とインターフェースの標準は異なる場合があります。
ウォルターミッティ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.