
「プログラミングを勉強しようと思っていて、C言語というのを聞いたことがあるのでそれから始めようと考えている。C言語がそもそもどんな言語なのか、何に使われているのか教えて欲しい。また、C言語のオススメの勉強方法があれば知りたい。」
今回はそういった悩みにお答えします。
本記事の内容
- C言語で出来ることは何か?現役エンジニアの開発実績を紹介
- C言語とは?どんな特徴?
- C言語オススメの勉強方法【現代風】
記事の信頼性
この記事を書いている私はエンジニア歴8年で、C言語を使って組み込み機器開発などを経験してきました。
ですので、C言語がどんな特徴を持った言語か?開発現場で求められるスキルはどれくらいか?といったことが分かります。
プログラミング言語で一番有名ではないか?という噂のC言語。プログラミングをやった事がない人でも聞いたことはあるかもしれません。
ですが、実際にどんな特徴の言語なのか?どういった場面で使われているのか?あまり知らないのではないでしょうか?
そこで本記事では、C言語で出来ることは何か?という疑問について、現役エンジニアの私がこれまでにC言語を使って開発した実際の製品を紹介します。
また、C言語はどんな特徴を持った言語なのか?を合わせて解説することで、なぜC言語を使って開発を行うかが理解できます。

この記事を読むことで、C言語が使われる場面がイメージできるので、C言語の勉強でどんなものを作ったら良いかの参考になると思います。
C言語で出来ることは何か?現役エンジニアの開発実績を紹介
C言語を使うとどんなことが出来るのか?について、私が実際にC言語を使って開発したソフトウェアを紹介します。
医療系の撮影装置
医療系の撮影装置の開発でC言語を使いました。
ここでいう医療系の撮影装置とは、放射線とか超音波などを使って人体を撮影するもののことです。
この時はC++をメインに開発を行いましたが、OS周りやCPU周りの細かい制御を行いたいときにC言語を使いました。

IoT機器
最近流行りのIoT機器を開発した時にC言語を使いました。
IoTとは?
IoTとは、様々な「モノ(物)」がインターネットに接続され(単に繋がるだけではなく、モノがインターネットのように繋がる)、情報交換することにより相互に制御する仕組みのこと
機器が正常に動いているかなどの稼働情報を確認するログや、備え付けたカメラで撮影した映像をデータセンターに送る、といった機能を実現しました。
この時の通信を行う部分に関して、作成した装置に依存せず、今後他の機器でも利用させることを狙い、汎用的に作利用できるC言語を採用して開発を行いました。

シリアル通信部
組み込み機器では、装置同士の通信にシリアルケーブルを使うものがあります。
シリアルケーブルとは?
シリアルケーブルとは、コンピュータと周辺機器や通信機器などを接続するシリアル通信用のケーブル。コンピュータ本体のシリアルポートと周辺機器の筐体側面や背面のコネクタに両端を差し込んで通信する。
引用:IT用語辞典
通信の送受信はソフトウェアで行う必要があります。
この時は、もともと他のプロダクトでC言語で作成されたものを流用し、通信仕様を満たすように改造を行いました。

ドライバ
C言語を使ってドライバを作成したこともあります。
この時は、ある装置から出力される映像信号をキャプチャー出来る機器のドライバをC言語で作成しました。

映像処理関連は処理性能要求が結構シビアで、高速処理を実現するためにC言語を採用することがあります。
C言語は他のプログラミング言語と比べても非常に高速で動作させることができるので、知っておくと便利です。
C言語とは?どんな特徴?
先ほどC言語を使った開発の実例を紹介しました。
ただなんとなくC言語を使ったわけではなく、C言語ならではの特徴があるので、実際の開発現場でC言語を使っています。
C言語とは、どんな特徴を持った言語でしょうか?
C言語(シーげんご、英: C programming language)は、1972年にAT&Tベル研究所のデニス・リッチーが主体となって開発した汎用プログラミング言語である。英語圏では「C language」または単に「C」と呼ばれることが多い。日本でも文書や文脈によっては同様に「C」と呼ぶことがある。制御構文などに高水準言語の特徴を持ちながら、ハードウェア寄りの記述も可能な低水準言語の特徴も併せ持つ。基幹系システムや、動作環境の資源制約が厳しい、あるいは実行速度性能が要求されるソフトウェアの開発に用いられることが多い。後発のC++やJava、C#など、「C系」と呼ばれる派生言語の始祖でもある。ANSI、ISO、またJISにより言語仕様が標準規格化されている。
引用:Wikipedia
という感じです。

わかりやすく説明します。
ハードウェアやOSに近い操作ができる
高水準言語とは、簡単に言うと人間が理解しやすい言語です。If文といった制御構造は高水準言語の主たる特徴です。
その対義語となる低水準言語は、逆にコンピュータが理解しやすい言語を意味します。
C言語は高水準言語ではありますが、低水準言語の特徴も持っています。
コンピュータが最終的に理解する命令は、次のように0と1の数字の列です。
10110000 01100001
ええ、人間には全くもって理解できません。
一方で、C言語を始めとする高水準言語では、
int main(void) { printf(“Hello Wolrd!¥n”); return; }
といった感じで、プログラミングをやったことない方でも、機械語と比べるとまだ読めますよね?
これでどんな違いが生まれるかと言うと、低水準言語は機械に近いので、マシンの処理性能を最大限に引き出したいときに重宝されます。
つまり、ハードウェアやOSが制御している根本の部分を操作することができます。
ですので、マシンスペックが限られていたりするケースではC言語を採用することが多いです。

速い!めっちゃ速い!
C言語は他のプログラミング言語と比べて処理速度がめちゃくちゃ速いです。
プログラミング言語の中でも最速クラスです。
これは、C言語が「コンパイラ言語」であり、C言語で書いたコードを動作させるには「コンパイル」を行なって事前に機械語に変換する必要があります。

事前に変換作業を行うので、実行時に変換作業を行うインタープリタ型の言語と比べて実行速度の速さを実現しています。
GUI処理は苦手
C言語はGUI(Graphic User Interface)を必要とするアプリケーションが苦手です。
できないことはないのですが、GUIを表示するためにたくさんのコードを書かなくてはなりません。

難しい。プログラミング学習者の天敵
C言語ははっきり言って難しい言語です。
C言語が登場したのが今となっては随分昔なことと、低水準言語の特徴を持っていることから、ある処理を実現するためには複雑なコードを書かなくてはなりません。
また、CPUやメモリといった、普段PCを使うユーザがほとんど意識しない部分を意識して開発する必要があるなど、周辺知識も要求されます。
最近人気のWeb系の言語、RubyやPHPといった後発の言語と比べるとその差は歴然です。

https://twitter.com/donachiki1017/status/1217642770275368960
個人的には、これからプログラミングを勉強しようかなと考えている人は、初心者でもつまづきにくいWeb系をオススメしています。
合わせて読みたい
C言語の勉強方法【現代風】
「それでもC言語を習得したい!組み込み機器などを開発できるエンジニアになりたい!」
といった方もいると思うので、C言語を勉強する方法を現役エンジニアの私が紹介します。
C言語を習得したい方は以下の手順で勉強を進めてみてください。
- ドットインストールで勉強する
- 学習サイトで文法基礎を身につける
- 専門書を買って勉強する
- Udemyで学習する
詳しくは『【プログラミング】難攻不落のC言語を独学で習得できる4つのステップ』の記事で解説していますが、まずはドットインストールを使って学習を進めましょう。
ドットインストールでは、プログラミング初心者がつまづきやすい環境構築も動画で解説しているので、非常に分かりやすいです。
C言語を学ぶなら以下のコースから始めると良いです。
>>C言語入門(全22回) - プログラミングならドットインストール
まとめ
最近はWeb系が人気で需要も多いですが、IoT機器の登場によりC言語も根強い人気があります。
どちらも知っておくとエンジニアとしての活躍の幅が広がります。
ぜひ勉強してみてはいかがでしょうか。