組み込み屋初心者さんのためのコーディング技術(C言語)2016-08-28組み込み屋初心者さんのためのコーディング技術(C言語)C/C++私が最近生存している業界は、アナログ最後の砦と言われているほどIT化の遅い世界ですが、ここ数年でジワリジワリとソフトの力が増してきている、という業界です。あ、なお、お前のブログ読んでるとまるで働いているみたいだな!とか言われましたが、私はクソニートですので誤解なきよう。そんなもんですから、今までアナログ屋だった人が突然ディジタル屋に突っ込まれたりするわけで、コーディング技術何それおいしいの?状態だっりします。そんな方々が書くCコードを見ると、ひたすらコピペの連続のような力業プログラミングだったりするわけです。そんな方々に送るちょっとしたアドバイス記事です。目新しかったり、難しい内容はありません。この記事におけるコーディング技術は主に「保守管理」に関わる様な技術を指しており、アルゴリズムの話や、超絶技法の様な話は含んでおりません。コーディング技術は何故必要なのか?そもそも、なぜコーディング技術が組み込み屋に必要なのでしょうか?大規模組み込みならまだしも、ちっこいマイコン相手にしているだけだと、コーディング技術とかただの理想論にしか聞こえないかも知れません。いった方々にとって大事なことは「動くこと」だけになっています。動くことは何よりも重要です。どれほど素晴らしく、美しいコードであっても、実機で動かなければウンコほどの価値もありません。「簡単に書く」、「簡潔に書く」、「わかりやすく書く」という観点が抜けてしまうと、何故ソフトウェア化するのか?の意義の一つが減ってしまいます。ソフトウェア化する意義とは何か?今、我々の業界で進んでいるソフトウェア化は、基本的にはハードをソフトで置き換えているだけです。ソフト化による製品開発期間の短縮?「今」のあなた方はそれが出来るほど、今のあなた方にソフトの技術がありますか?ディジタル化することによる、アナログで出来ない高性能化?それが既に達成されている業界では最も重要なことだと思いますが、我々の業界ではまだ理想論であり、現状は物にするほど理論は完成されていません。それは数年という期間を経て実現することです。それが本当にソフトウェア化のキーワードであるのであれば、短い開発のサイクルで製品化するようなプロジェクトではなく、数年という長い期間を経て市場に出すべきでしょう。それでもなお、今、慣れないディジタル技術を用い、短い開発期間で製品開発を強いられている意義は、部品点数削減のためです。たしかに、ソフト化することで、コンデンサの数が減れば、物理的な耐久性の向上、部品コストの削減が図れます。ここで一つ考えなければならないのは、製品の部品は減っていないということです。物理的部品が減った代わりに、プログラムコードという部品が増えたからです。コードの価値というのは低く見積もられがちですが、コードは部品であり、使わないコードや重複するコードがあれば、それは在庫です。このコードという部品をどう管理するのか?これは当然考えなくてはならない事です。製品コードに問題があると判明したとき、貴方はそのコードを後で見返して、すぐにどこに問題があるかわかるでしょうか?貴方が修正するならまだしも、貴方が忙しくて他人に頼む場合、そもそも貴方がそこにいなくなっていた場合、他人はすぐにどこに問題があるか分かるでしょうか?問題がなかったとしても、別な製品でそのプログラムを、使い回したい場合、それがすぐできますか?これらが出来る場合、当然出来ない場合に比べて製品のコストが下がることになります。逆にこれが出来ない場合、もしかしたらソフト的なコストで、むしろ製品コストが増加することすら、あるかも知れません。そこで必要になるのが、如何に簡潔に、綺麗に、わかりやすく書くかというコーディング技術です。コーディング技術なんて捨てて良いコーディング技術?残念だが、そんなものは糞食らえだ。今すぐ捨てて貰って構わない。さっきと言っていることが、真逆で申し訳ないのだが、やはりこれは最初に書いておく必要があると思う。コーディング技術に頼ってはならない。組み込みの世界はどうしても、使えるリソースが少ないです。リソースというのは、メモリであったり、実行ステップ数(実行時間)だったり、得られる情報などを指します。これらの条件と、コーディング技術は相反する場合があります。いった場合、迷うことなくコーディング技術を捨てて、泥臭くて汚い力業の世界に持ち込んでください。綺麗に書くかを悩むだけ時間の無駄です。ステップ数が足りない?そうか、そこの関数呼び出し止めて展開しようか。そのループを展開しようか。ポインタ操作の最適化しようか。そこの計算アセンブリにしようか。メモリが足りない?なら、この変数とあの変数は同時に使わないから、同じ変数にしよう。組み込みでは、どうしてもこういう事態が発生します。わかりやすく書くコーディング技術は大切なことですが、捨てて構わないものです。大切なのはバランス感覚です。早すぎる最適化はしない。コーディング技術を大切に関数呼び出しをやめて展開する。