建築の技術開発者にもプログラミング技術は、とても重要な要素です。C言語ができれば、骨太プログラマを自称してよろしい。
やっぱりCが好き
前回、「PythonやJavaなんかが、いいかもよ」と書きましたが、もしコンピュータプログラミングを自分の技術開発に思いっきり活用しようと思うなら、やっぱりC言語は勉強すべきだと思います。
「え?C言語?あれ、オレ、90年代にタイプリープした?」
いえ、21世紀でもC言語は使われます。
クラスの継承ができなくても、メソッドが定義できなくても、文字列を文字の配列でしか表現できなくても、C言語を学ぶメリットは大きいのです。
C言語を学んでおくべき理由
C言語を勧める理由は、つぎのとおり。
- プログラムの内部の動きを深く理解し、動作状況を想像できるようになる
- 市販のソフトのカスタマイズで使える言語が限られていることが多い
- あと、プログラムの速度も速いかも
プログラムの内部の動きを深く理解し、動作状況を想像できるようになる
VBAやC♯のように、Variantのような型を明示的に定めない言語がありますが、その一番の問題は、型が自由ということよりも、関数どうしの値の渡し方が、「値渡し」なのか「ポインタ渡し」なのかを意識しなくなるということです。
「値渡し?ポインタ渡し?」
値渡しとは、「表示してほしい名前は”佐藤さん”です」と情報を渡す方法で、ポインタ渡しとは、「アドレス渡し」とも言われるように、「表示してほしい名前は、あの場所に書いてあります」と情報のある場所を渡す方法です。
この違い、大きいです。
「(値)123を表示せよ」と言われるのと、「(アドレス)123にある値を表示せよ」と言われるのとでは、意味が変わります。
渡されたデータを加工したとき、もとのデータは保存されたままなのか、もとの関数でも値が書き換わってしまうのか、データの渡し方で挙動が変わります。
初学者は、この違いをあまり理解していないので、思わぬデータの変化に右往左往します。
つまり、C言語ではこの区別を意識しなくては、プログラムが書けません。逆にこれが意識できるようになると、コンピュータのメモリ上のデータの展開状況を理解できるようになり、プログラムの間違いを見つける能力を磨くことになるわけです。
変数の型を明示的に宣言しないのは、なんか気持ち悪いと感じるのは、このように大事な部分に無頓着になっているように感じるからです。C言語を知っている人が、便利な機能を使って、生産性を上げるというなら大歓迎なんです。
市販のソフトのカスタマイズで使える言語が限られていることが多い
あと、C言語を知っておくと有利になるのが、ソフトウェアのカスタマイズとか、デバイスの操作です。
歴史のあるCADのアドインプログラムを作ろうと思ったりするとき、C言語やC++言語に限定されることがあります。昔に開発されたソフトウェアは、それをカスタマイズするためのライブラリは、C言語やC++言語で提供されていることがあるので、これを使おうと思ったら、C言語/C++言語を使わざるを得ないわけです。
これは、デバイスでも似たような状況があります。
センサーとか計測機器とかPLC (programmable logic controller)とか、またはそれらのデータ処理プログラムでは、はやりすたりのプログラミング言語に対応してライブラリを更新するよりも、昔ながらのC言語でライブラリを提供しているものが多いように思います。(ちょっと最近、いじっていないもので、ちょっと言い切れないのですが)
そういうときも、使ってみたいデバイスを制御するなら、「C言語をやっててよかった」ということになるでしょう。
あと、プログラムの速度も速いかも
プログラミング言語には、大きく分けて、コンパイラ言語とインタプリタ言語があります。
コンパイラとは、人が書いたプログラムをあらかじめCPUが理解する形式に変換しておき、実行時にはすぐに実行するしくみです。
インタプリタとは、実行するときに、人が書いたプログラムをCPUが理解する形式に変換しながら実行するしくみです。
そのため、インタプリタはコンパイラに比べて、実行速度が遅くなります。
Javaはコンパイルをすることはするのですが、CPUが直接読める形式ではなく、Javaを使える環境で共通の形式に変換しているのです。そして、実行時にあらためて、その実行環境のCPUに合わせて変換するわけで、やはり速度はコンパイラよりも遅くなります。
C言語は、コンパイラ言語なので、プログラムを書いた後、CPUが読める形式に変換しておくので、プログラムは早いです。
なので、スピードを要求されるプログラムを書くときは、C言語がいいですよ。
とくに、AndroidスマホでCGなどを扱うライブラリOpenGLを使おうと思ったら、C言語でプログラムを書いたほうがサクサク動きます。
まずは、つかってみること
どれがいいかはさておき、PythonでもJavaでも、好きな言語でプログラミングに接してみることが大事。
ごく簡単なプログラムでも書いてみると、楽しくなるんですよ。
まずは、挑戦あるのみ。