なぜCを学ぶべきなのか
プログラミング言語としてのCは、初学者にとっては難しい言語であるのは確かです。中には、初心者が学ぶべき言語ではないと言い出す人もいます。ですが、私たちセキュリティ・ネットワークコースの教員は、我々のコースの学生は早期にCを学ぶべきであると考え、このカリキュラムを設定しています。以下に理由を列挙します。
Cはコンピュータの構造に深く根ざした言語なので、コンピュータそのものの学習を同時に進めることで、相互の理解が深まると考えています。例えば主記憶(メモリ)上にプログラムとデータの双方が置かれるフォン・ノイマンアーキテクチャや、メモリ上のデータ配置の問題、エンディアンの問題などを直接感じられるのはCならではだと思います。
CはOSや、コンパイラなどの言語処理系、組み込み機器などで広く使われており、その構造や動作と深く関わっているため、セキュリティとネットワークの理解のために欠かせないからです。
Cで書かれたプログラムは性能が高く、高性能計算、暗号処理など性能を求められる分野では重要な役割を担っています。
CはC++ほどの機能を要しない分野や、C++でも性能上の問題が出るような分野、C++が実装できないような極めて小さなリソースしか利用できないような環境で使われています。IoTはまさにそのような分野であり、今後ますます重要性が増すと考えられています。
Cはその後現れた多くのプログラミング言語に影響を与えているため、Cを学ぶことで他の言語の習得が容易になる場合が多いためCから習い始めることは有用です。特にC++は、Cと切っても切れない関係にある言語であり、C/C++のように一体に語られます。macOS/iOSの世界で使われてきたObjective-CもまたCと極めて深い関係にある言語です。さらに、現在人気がある言語であるC#, Java, JavaScriptはCの影響を強く受けていますし、これらの言語からまた派生していったgo, Kotlin, Rust, Swift, Dartなども、CやC++の影響が文法の随所に見られます。みなさんが情報理工基礎演習で少し習った言語Processingは基本的にJavaScriptですが、Cプログラムと似たところがあることはすぐにわかるでしょう。
Cは1992年以来、国家資格である情報処理技術者試験の問題として出題されるプログラミング言語の一つとなっています。現在も使われている言語としては(アセンブラを除いて)最も古いので、過去問も含めて情報が多く受験しやすい言語です。(2021年現在C、Python、Java、アセンブラ、表計算が採用されています) Cは現在使われている言語の中ではかなり古い言語にあたりますが、未だに広く使われており、今後も広く使われ続けることが確実です。
C++は、今でも人気あるプログラミング言語として5本の指に入りますし、多くのWindowsやLinuxのプログラムがCやC++で記述されています。C++はCの(ほぼ)上位互換であり、C/C++としばしば呼ばれるように一体で語られるほど関係の深い言語です。そのためCを学ぶことはC++の学習にとても役立ちます。ただ、C++はとても言語仕様が大きい上に、およそ3年ごとに仕様が見直されており変化も激しい言語ですが、C互換部分はほぼ不変ですので今Cを覚えてもずっと役に立つと思います。
日経クロステックが定期的に取っているプログラミング言語人気ランキングによると、C/C++は業務で使われる言語の首位をずっと走ってきました。2020年に首位をWeb系言語に譲っていますが、今でも組み込み系では最も使われる言語です。プログラミング言語人気ランキング2021によると、今でもC/C++は上位に挙げられるプログラミング言語であり、使われている言語の3位、メインで使われる言語の2位に挙げられています。 https://gyazo.com/daae0e0e1f012ee07b6d022be81558f8
Cの仕様はかなり安定しており、覚えたことが長く役立つ可能性が高いです。PythonやJavaScriptは今流行の言語ですが、毎年のように仕様が追加され、次第に主流のコーディングスタイルが変化してしまいます。5年も経つと違うプログラミング言語のように見えることも珍しくありません。C++ですら3年ごとに標準規格に大きな変更が加えられています。しかしCは1999年に制定されたC99でほぼ現在の形になり、2011年に策定されたC11も変更は大きくはありませんでした。それ以来10年間仕様は変わっていません(2017年策定のC17はC11のマイナーチェンジであり本質的な変更はありませんでした)。2022年を目指して久しぶりの改訂であるC2Xの議論が進んでいますが、こちらも曖昧さの排除や、今は使われていない古い仕様の整理が中心になりそうです。このため、今Cの仕様を覚えても10年後も役立ちますし、10年前のCプログラムと現在のCプログラムにあまり大きな差はなく、今書いたプログラムは10年後もおそらくコンパイルできるでしょう(C++は登場以来だいぶ変化したので10年以上前のプログラムはコンパイルできなくなってしまうことがあります)。今後もこの傾向は続くと思われます。
新しいシステム、特にCPUアーキテクチャを設計した時に、その上で動くソフトウェアの開発にはまずCコンパイラを作成し、Cプログラムを記述したり移植したりして増やしていくということが広く行われています。いわゆるブートストラッピングの最初の段階をCが担うのです。Cを使いこなせる人だけが、新しいシステムを構築するスキルを持つ人だとも言えます。
Cで書かれたプログラムは社会のあちこちで動き続けていますが、少なからぬシステムが2038年問題を抱えています。そのような問題を持つプログラムの改修のため、2030年代後半にはまた多くのCプログラマが必要になると考えられています。 参考: