Web開発系のプログラミングの専門学校はとても多く、転職サイトなどでも多くの求人があるようです。反面、長年産業を支えてきたC言語は、現在話題性もほとんどありません。
でも本当は、C言語はとても魅力的でパワフルなプログラム言語です。
20年近くC、C++を使って製品・測定器開発をしてきた中で感じたC言語の難しい点、魅力、今後の可能性などを紹介します。
・C言語何が難しいの
・C言語の可能性
・まとめ
C言語の特徴は
C言語は、歴史のある言語です。このため古いとか、難しいというイメージを持っている人が多いかと思います。実は、シンプルで高速な言語です。このため今注目されている、IoT機器や組込み用ソフトで使用されています。
手続き型プログラミング
C言語は、手続き型プログラム言語と呼ばれています。歴史のあるフォートラン、COBOL、Basicなどは手続き型プログラム言語です。
最近人気のC++、Java、C#、Pyton、PHP、Rubyなどはオブジェクト指向のプログラム言語です。
手続き型のプログラミングは実行するコマンドをを順番に記載して実行していきます。プログラミングする前にフローチャートなどを作成して、それに沿ってコーディングしたりします。このため、シーケンス的に動作する機器などの制御のプログラムはとても作成し易いですね。
一般的にはオブジェクト指向の考え方を理解するのは初心者には難しいと言われていますが、現在の開発者の多くは、そのオブジェクト指向の言語がスタートになっているので驚かされます。
C言語から派生した言語
1972年にAT&Tベル研究所のデニス・リッチーが主体となって開発した汎用プログラミング言語です。C言語から派生した言語は非常に多く、調べて分かっただけでも13種類もあります。
有名なところでは、C++、PHP、Perl、Objective-C、Java、JavaScript、C#、Pythonなどがあります。
言語によって継承度は異なりますが、最初にC言語を学んでおくと、これらの言語を学ぶときは、学び易いといわれています。
C言語の武器はスピード
アセンブラ言語がもちろん最速なのですが、現在でも、高級言語の中では、C言語は最速の言語です。またハードウェアを直接アクセスするコマンドもあり、このため組込みシステムのソフトで使用されるのです。
C言語の計算速度をライプニッツ級数で比較したサイトがあるので紹介しておきます。Phthon、Java,Ruby、Javascriptなどに比べ圧倒的なスピードがあるのが分かります。
C言語何が難しいの
C言語は難しいと書かれているのをよく見かけます。実は私は、本格的なプログラミングのスタートがアセンブラだったのでC言語自体を難しいと感じたことはありません。共通点が多いのです。
システム理解が必要
アセンブラやC言語を難しく感じるひとつの理由にハードウェアにアクセスするケースが多いためソフトウェアだけでなくシステム全体を理解する必要がる場合が多いです。
Web系の開発は多くの場合対象ハードウェアは、PC(Web)であったりするのですが、C言語の場合はその都度対象のハードウェアが変わるケースが多いのです。組込み系ソフトなどは各社製品ごとにカスタム化されています。
学習やデバッグが難しい
ネット上では学習やデバッグが難しいとの記載があります。学習時の課題でもあるのですが、C言語を学習するための適切なハードウェアがないのです。
Web系であるとコーディングしてHPを表示させるとすぐ結果が確認できます。
C言語のアプリケーションは多岐に渡ります。プログラムやコマンドを理解するための十分な学習用やデバッグ用のハードを準備するのは大変です。
定型的なハードウェアーがないため適切な学習や理解ができないことが難しさを感じるのではないでしょうか。
企業に入りその製品に沿った教育を行うと、この問題は解決するような気がします。私の場合も製品や測定器のプログラミングをしていましたが、目的と適切なハード(仕様)があったため、この問題はほとんどありませんでした。
侍エンジニア塾はC言語もフォローしています。
時間を問題にするプログラミング
C言語を使ってプログラムを作成するときは、その速さ故、時間を管理しながら制御するプログラムを作成する場合があります。気にしなければいけない次元が1軸増えるのです。
時間を気にしなければいけないソフトウェアは、AD変換や画像のキャプチャーのタイミングをとる、フーリエ変換の時間を短縮するなど多岐に渡ります。工程用の高価な測定器を作成するとき、もし測定時間を半分にできると価値は倍になるのです。
この時間を含むプログラミングやデバッグは測定器なども必要になり、まさに技術屋の領域となってきます。
コーディングの課題
コーディング上で言われている難しい点は、変数のアドレスを記憶する変数であるポインターです。理解して使い慣れると難しくないのですが・・
もう一つの課題は、コーディングが長くなることです。シンプルな構造の言語はどうしてもコーディングが長くなりがちです。アセンブラなどは更に長くなります。
例に出されるのは、「Hello World」を出力が、Pythonなら1行コード書くだけで済むのに対し、C言語では5、6行コードを書くことです。
C言語の可能性
紹介してきたように、少し取っ付き難いC言語ですが、今後の可能性はどうなのでしょうか?
専門(プロ)職になれる
企業で開発を行う場合は、システムやハードウェアなどの理解なしにC言語でプログラミングはできません。秘密保持や教育という意味ではアウトソーシングがし難い領域です。逆を言えばこの技術を持っていれば、正社員として採用されやすかったり、長期に渡りその業務に着くことができます。
C言語の場合はシステム全体を理解する必要があり、一度その仕事を行うと多くの場合、スキルや実績で同様な業務が続き、その専門職になるケースが多いような気がします。
市場の拡大
C言語の主戦場は今後は、IoT、組込みシステム分野です。両者は被るところもありますが、どちらの分野も今後大きく伸びると予想されています。
IDCの分析によると、国内のIoTの市場規模は、2019年が7兆円でしたが、2024年には、11.5兆円を想定しており約1.6倍の伸びを想定しています。
もちろん、これに伴ってC言語の技術者の必要性もますことになります。
転職サイトの「Kaguya」は多くの組込みソフトの求人があります。
他言語の移行
上記した通り、C言語から派生した言語は多く、現在、Web系で主流で使用されているものも多くあります。当然、C言語を勉強していると比較的スムーズにこれらの言語への移行も可能です。
オブジェクト指向の考えかたと、そろぞれの言語のルールを理解することで移行可能です。もちろん、その言語自体に慣れていく必要ですが・・。
まとめ
現在、プログラミングの需要は、現在人気のあるWeb系と今回紹介したシステム系(ハードウェアを制御する)の2本柱があります。
IoTや組込みソフトの市場拡大は間違いないところです。C言語の速度やハードウェアーを制御する能力は代えがたいものです。C言語の市場も広がってくると考えられます。