なぜC言語を学ぶのか?
世の中には、色々な言語があるなかで、なぜ、今、C言語 を学ぶのでしょうか? 学ぶ理由を考えて、まとめてみました。
読み方
- C言語
- しーげんご
概要
最近では、どんな言語が流行っているのでしょうか?
OSS 界隈では、 Java 系が強いと思ってます。たとえば、ビッグデータ会で人気な Hadoop は Java で作られています。Google の Android のアプリも Java で作れますね。
みんなだいすき Apple の iPhone や iPad などの iOS アプリは、以前は Objective-C でしたが、今は、新しい Swift になりました。
機械学習界隈では、Python が人気があるようです。 セキュリティ界隈のハッカーもPython好きが多いようですね。 統計の分野では、R言語やPythonが人気です。
ウェブ界隈では、アプリケーションの開発に node.js, PHPなどが使われているようです。 ログ界隈では、fluentd でログを転送して、まとめる、のようなことをやられているようですが、fluentd は Ruby です。 Ruby といえば、 Metasploit も Ruby でできていた記憶があります。 インフラストラクチャをコードで表現する、デプロイツールの Chef は Ruby です。レシピは Ruby で書けます。
いろいろなツールが Go 言語で書かれるようにもなってきています。
nmap というセキュリティ界隈で使われるネットワークスキャナーのプラグイン(NSEスクリプト)はRua言語で記述します。KVSのRedisは内部でRua が実行できます。
Linux や FreeBSD 様な OS は、 C 言語が使われています。
というように、いろいろな言語が様々な形で使われています。
適材適所なので、どの言語だけ知っていれば良い、というわけではありません。
C言語と組み込み
組み込み系の開発の場合は、C++が使えず、C言語かアセンブラしか選択肢がないことがあるようです。
C言語かC++言語か?
C言語とC++で選択が可能であるなら、C++言語を使えばよいと思います。 スマートポインタ、クラス、例外処理、テンプレート,C++11,C++14など様々な面でC++は、便利です。
スマートポインタを使えば、メモリリークを抑えるコーディングが可能でしょう。 std::string(文字列クラス)を利用すれば、C言語の配列の泥臭い操作でバグる頻度を下げられるでしょう。
C言語の利点は?
C言語は、たいていの言語(処理系)のプラグイン/エクステンションを書くことができます。多くの場合、C++でも書けると思います。 プラグインを作ることで、処理系に足りない機能を追加することができます。それがC言語の良さです。
いろいろな言語を使う環境では、共通のライブラリを利用したほうが、品質や性能の面で統一することができます。メンテナンスコストも下げることができます。共通部分は、C言語からC++言語で作り、各言語のエクステンション/プラグインとするといったアプローチができます。
1つの言語しか使わない、という環境では、あえて、C言語で書かなくてもよいかもしれませんし、言語によっては、C言語で書いたほうが高速!といったケースもあるでしょう。パフォーマンスを追求するのであれば、C言語で作ったほうが良い場合もあります。
C言語は、大抵の環境で利用できるはずなので、どこの世界でも生きていける、というのがあります。
また、言語が枯れていることもあり、大幅に仕様が変更されることはありません。PHP, Ruby, Python などは、どんどん仕様が変更されているかもしれませんが、そういった面で、C言語は安定しています。もちろん C99, C11 など、新しい機能が追加され、改善もされています。
C言語は、コンパイル型の言語で、実行ファイルはそのままCPUが実行できるため、スクリプト言語よりは多くの場合、高速です。
C言語が読めれば、Unix などのソースが公開されている OSのコードも読むことが可能です。 OS がどうなっているのか、という理解も深まりますし、OS を改善することもできます。
まとめ
- C言語でいろいろな言語の拡張ができる
- C言語がわかれば OS の仕組みを理解する(コードを読む)助けになる
- C言語は仕様が大きく変わらない
- C言語のプログラムは高速に動作する
関連項目
ツイート