LoginSignup
20
18

言語規格、コーディング標準の使い方を間違えていて、言語規格、コーディング標準を批判している書き込みにしばしば出会う。

その人の書いているコードがいいコードであれば、その人の言語規格、コーディング標準に対する意見はどうでもいい。
白い猫でも、黒い猫でも鼠を取る猫がいい猫だという言い伝えがある。

言語規格、コーディング標準の使い方を間違えているプログラマでも、
言語規格、コーディング標準をうまく使っているプログラマでも、
いいプログラムを書くプログラマがいいプログラマだ。

言語規格(language standard)、コーディング標準(coding standard)

は、編集器(editor)、編纂器(compiler), 連携器(linker), 配置器(locator), 虫取り器(debugger),
設計環境(IDE:Integrated Development Environment)などに比べれば、作業効率への影響は多くない。

言語規格、コーディング標準に適合するだけのコードを書いていてはよいコードを書いたことにならない。

言語規格、コーディング標準は、その時代の道具類の最低限を決めるものであったり、過去との整合性を取るための文書化を促すものであったりする。

適合していることを良いとは主張していない。

よいプログラムを書いたことがない人が、言語規格、コーディング標準に適合したプログラムを書くことを強制する場合がある。

それらの人には、その方が質が落ちるときの責任を取るつもりがあるかどうかを確認するとよい。

いくつかの言語では、ほとんどの時代で、言語規格、コーディング標準は後追いで、言語規格、コーディング標準を逸脱するものがいいコードである場合がある。

たとえば、MISRA Cでは、時間制約がある場合には、コーディング標準を逸脱した方がよいコードの場合が多いため、最初から逸脱の手続きを決めている。

逸脱の手続きを知ることなく、MISRA Cを批判している人がいるのには驚き。
逸脱の数が多いほど、質のよいコードである可能性が高いことは、ある分野では有効な仮説である。

課題としては、受け取る側の技術力が低いと、逸脱の手続きを理解できず、言語規格、コーディング標準に適合したコードをという場合があるかもしれない。

技術力が低い顧客には、高いお金を吹っかけるのが一つの解決策かもしれない。
技術者のやる気をなくすのだから。

課題は、逸脱をきちんと文書化しても、その費用を払おうとしない顧客がいることかもしれない。

違法?

言語規格、コーディング標準は、よりよい言語を作るための出発点であって、守るとよいことを書いたものではない。

法体系では、WTO/TBT協定、日本工業標準化法が根拠である。
これらの体系では、国際規格、日本工業規格との違いがあれば、違いを明記することを推奨している。MISRAで言えば、逸脱の手続き。
守ることがいいことだと法的に主張していない。

「違法」という概念は存在しない。違法という用語を使っている人は、言語規格、コーディング標準の誤解を増幅させたい意図があるのか、その習慣に浸かってしまっているか、どちらとも気がついていない段階なのかのいずれかなのかもしれない。

法律というものを知らないのかもしれない。

法の適用に関する通則法第3条(法律と同一の効力を有する慣習)
第三条  公の秩序又は善良の風俗に反しない慣習は、法令の規定により認められたもの又は法令に規定されていない事項に関するものに限り、法律と同一の効力を有する。

民法第92条
法令中の公の秩序に関しない規定と異なる慣習がある場合において、法律行為の当事者がその慣習による意思を有しているものと認められるときは、その慣習に従う。

商法第1条
2 商事に関し、この法律に定めがない事項については商慣習に従い、商慣習がないときは、民法 (明治二十九年法律第八十九号)の定めるところによる。

逸脱(deviation)

たとえば、

//コメントを使うなというMISRA Cに対して、
日本が決めたVerilog HDLのスタイルガイドでは、

/* */コメントを使わずに//コメントを使えと決めている。

MISRA Cを決めたヨーロッパのメンバに聞くと、
自分たちは、最初から標準逸脱で
//コメントを使うことを決めているという。

日本では、
Verilog HDLでは//を使い
Cでは/* */を使うというねじれをおこしていても、
全体で//を使うということを決めていたのは、自分たち含めて極少数だった。

自動車関係のソフトウェアの日本での遅れがあるとすれば、言語規格、コーディング標準の使い方に顔を出していたのだろうか。

MISRA C 2012のTechnical Corrigendum 1の21.X訂正意見はすべて日本からだった件
https://qiita.com/kaizen_nagoya/items/152c1de26b0831c02f41

からすると、日本は一部の進んだ人たちと、その他に分類できるのかもしれない。

分析(analysis)

IT業界では、分析手法を体系的に教育したり、訓練することがあまりない場合がある。
設計意図からの逸脱があった場合に、どう対応するかを、致命度、頻度に応じて検討し対策を考えておく。

分析と設計は作業の両面で、設計は分析しながらするとよい。
作業標準などで別に定義している場合があるのは、使う技法、ソフトが違う場合があるからかもしれない。分析技法と設計技法、分析ソフトと設計ソフトが一体になっているのが統合開発環境だと思うとよいかも。その意味では、分析の機能が弱いのかも。

道具としての最近の提案は下記。

安全分析の図的表現方法、及び設計文書と親和性の高いツールの提案
 ガイオ・テクノロジー(株)技術開発本部 技術戦略室 技術戦略グループ 田中 伸明 名古屋市工業研究所 小川 清
https://www.gaio.co.jp/newslist/anzen_org2019/

編纂(compile)

どうやって MISRA Example Suiteをコンパイルするか
https://qiita.com/kaizen_nagoya/items/fbdbff5ff696e2ca7f00

言語規格、コーディング標準のコード断片は、日本ではすべてコンパイルして議論しているのが背景にあるのかもしれない。

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76#_reference-3a2b9cfd1b05f6a444c2

ISO/IEC TS 17961:2013 C Secure Coding Rules(1) All list(to be confirmed)
https://qiita.com/kaizen_nagoya/items/54e056195c4f11b850a1

C++N4741, 2018 Standard Working Draft on ISO/IEC 14882 sample code compile list
https://qiita.com/kaizen_nagoya/items/3294c014044550896010#_reference-f497f51f139bf9b5b948

C++N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(1) sample coding list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/

C++N3242, 2011 sample code compile list on clang++ and g++
https://qiita.com/kaizen_nagoya/items/685b5c1a2c17c1bf1318

参照(reference)

すべての参照文献を最新に更新しているのも日本の貢献だったりする。

MISRA-C 2012 Referenceに掲載している文献の入手可能性を確認
https://qiita.com/kaizen_nagoya/items/96dc8b125e462d5575bb

SEI CERT C++ Coding Standard AA. Bibliography 確認中。
https://qiita.com/kaizen_nagoya/items/fe06719aef10f3f985ae

データサイエンティストの気づき!「勉強して仕事に役立てない人。大嫌い!!」『それ自分かも?』ってなった!!!
https://qiita.com/kaizen_nagoya/items/d85830d58d8dd7f71d07

ISO/IEC TS 17961:2013 C Secure Coding Rules(1) All list(to be confirmed) 
https://qiita.com/kaizen_nagoya/items/54e056195c4f11b850a1

Ethernet 記事一覧 Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48)
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網(Wi-Fi)空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

OSEK OS設計の基礎 OSEK(100)
https://qiita.com/kaizen_nagoya/items/7528a22a14242d2d58a3

Error一覧(C/C++, python, bash...) Error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

プログラムちょい替え(0)一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394

TOPPERSまとめ #名古屋のIoTは名古屋のOSで
https://qiita.com/kaizen_nagoya/items/9026c049cb0309b9d451

docker(0) 資料集
https://qiita.com/kaizen_nagoya/items/45699eefd62677f69c1d

Qiita-dockerお宝鑑定団
https://qiita.com/kaizen_nagoya/items/509e125263559b5aed5b

The C++ Standard Library: clang++とg++でコンパイルしてみた(まとめ):14件
https://qiita.com/kaizen_nagoya/items/9bdfaa392443d13e5759

C++17 - The Complete Guide clang++とg++でコンパイルしてみた(まとめ):4件
https://qiita.com/kaizen_nagoya/items/c000f307e642990781e1

C++N3242, 2011, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/685b5c1a2c17c1bf1318

C++N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/

C++N4741, 2018 Standard Working Draft on ISO/IEC 14882 sample code compile list
https://qiita.com/kaizen_nagoya/items/3294c014044550896010

C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list
https://qiita.com/kaizen_nagoya/items/fc957ddddd402004bb91

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76

ISO/IEC TS 17961:2013 C Secure Coding Rules(1) All list(to be confirmed)
https://qiita.com/kaizen_nagoya/items/54e056195c4f11b850a1

プログラマによる、プログラマのための、統計と確率のプログラミングとその後 統計と確率一覧(0)
https://qiita.com/kaizen_nagoya/items/6e9897eb641268766909

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.

文書履歴(document history)

ver. 0.01 初稿 20190715
ver. 0.02 法律追記 20210311
ver. 0.03 URL追記 20220918

最後までおよみいただきありがとうございました。

いいね 💚、フォローをお願いします。

Thank you very much for reading to the last sentence.

Please press the like icon 💚 and follow me for your happy life.

20
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
18