設計(design)
Programは、あらかじめ図にするという意味です。
運動会のプログラム、音楽会のプログラム。プログラムといったら計画のことです。
計算機のプログラムは、計算機をあらかじめどのように動かすかの計画です。
その計画を、図または言語で書くのがプログラミングです。
計画には、いろいろな構造がありえます。
どういう構造を選ぶかも、プログラムのうちです。
構造を図で書いて、そこからソースコードを自動生成させてもかまいません。
プログラマが知っているとよい英単語の語源。英語(1)
https://qiita.com/kaizen_nagoya/items/9de6d47c47e2c211222b
HDLというハードウェアを記述する言語では、ソースコードで書くことを設計(design)といい、ソースコードをコンパイルして配線図にして機能配置をすることを実装(implementation)と言います。
ソフトウェアでも、ソースコードで書くのを設計といい、リンカ、ロケータ、ローダなどに具体的なメモリ上での配置をすることを実装(implementation)と言うと対応関係がよくわかります。
RTL設計スタイルガイド Verilog HDL編(System Verilog対応版)
https://qiita.com/kaizen_nagoya/items/4c02f1575db1f28310a7
プログラマが知っているとよい設計指針(4)STARC RTL 設計スタイルガイド
https://qiita.com/kaizen_nagoya/items/7a3298801259409bd1b9
RTL設計スタイルガイド Verilog HDL編
https://qiita.com/kaizen_nagoya/items/c883b9aab40c53c1d259
何を設計するか
ソフトウェアは、ソフトウェアで作ることがしばしばあります。
最終的に動かすソフトウェアと、そのソフトウェアを生成するソフトウェアを同じ構造にしておいたり、同じライブラリを使うようにしておくと、道具と製品を同時によくすることができます。
例えば、CコンパイラをC言語で記述している状況を考えて見ましょう。
C言語規格と、Cコンパイラのどちらもよくすることを考えると、飛躍的によくなるかもしれません。一方づつよくした方がよくなることもあるかもしれません。
基準とか、手順とか、規則とかを決めて作業すると効率的だったのは、メインフレームという大型計算機が5年に1度のハードウェアとソフトウェアの更新があるのに対応して改定していくとよいという部分最適な習慣があった頃の話です。
毎年、何かのOSが更新し、何かの言語が更新し、何かの通信規約が更新する状況では、基準とか、手順とか、規則が、設計対象よりも長い期間存在することを前提にしない方がいいかもしれません。
移動標的(moving target)は、最適化しづらいと思うかもしれません。模型記述すれば、自動追尾ソフトウェアは自動生成できるかもしれません。
模型(model)
発電所、製鉄所のような大規模で空間的に動かないものと、航空機、自動車、鉄道のように中規模で空間的に動くものと、CPUのような小さくそれ単体では動かないものと、OS、プログラミング言語のように軽くてどこへでもすぐに行ってしまうものを、一体で設計する手法がまだ確立していないのでしょうか。
大事なのは、わかっていないことを、根拠なく決めないことです。
あるいは、自分の環境、自分の制約条件を、他人に押し付けないことです。
自分の環境、自分の制約条件を、他人に押し付けることが決して悪いことではありません。対価をお支払いいただいたり、長期的な戦略をたてられていたり、それまでよりも効率的なものの考え方をご提案いただけるのであれば。
連続系を記述するMatlab/Simulink/Targetlinkとその記述規則とソースコード生成規則、離散系を記述するUMLの記述規則とソースコード生成規則。その2つを一体で管理できるOS、通信規約の記述規則とソースコード生成規則。それらの3つを一体で管理する設計指針。
TOPPERS の AUTOSAR への貢献 II (改定中)
TOPPERS のAUTOSARへの貢献(更新中), AUTOSAR(15)
音楽を題材に
楽譜が設計図ですね。
実際の楽譜があっても、演奏は、指揮者の采配でいろいろ変わります。
プログラムは音楽だ (A program is a music.) 仮説(54)
ソースコードだって、コンパイルスイッチでいろいろ変わるし、コンパイルする順番でかわることもある。
古いライブラリリンクしてから、ライブラリコンパイルしたってしょうがない。
ソースコードがあれば、Implementationが終わったと思う人は一人もいない気がする。
ソースコードがあれば、設計がようやく終わったっていうことで。
リンクスクリプトでどうなるか、ロケータでどう配置するか、ローダで実際にメモリにいつ、どう入るか、全然変わります。ソースコードを書いた後に、Implementationの作業がいっぱいあるのです。
文書履歴
ver. 0.01 初稿 20220301
ver. 0.02 音楽追記 20220302
最後までおよみいただきありがとうございました。
いいね 💚、フォローをお願いします。
Thank you very much for reading to the last sentence.
Please press the like icon 💚 and follow me for your happy life.