プログラミング

どうして私はC言語で仕事をしているのか

投稿日:

みなさんプログラミング言語は学んでますか?今から始めますか?
最初に学ぶべきプログラミング言語ってなんだと思いますか?そうです。C言語です。
C#でもC++でもObjective-Cでもなく、Pure Cです。
何を隠そうわたしはお仕事でバリバリにC言語を書くC言語屋さんなのです。
それではC言語を使う理由をご説明しましょう。

仕方ないんだもの

だって仕事がC言語の製品プロジェクトなんだもの

いまの時代C言語を学ぶ理由の最も大きな部分は、「仕方なく」です。
ホントはPythonがいい、妥協してもGoがいい、それがだめならせめてRustが書きたい。そういうモダンな欲求はすべて配属プロジェクトによって無に帰します。
上司から「オマエのプロジェクトはC言語だ」と言われれば拒否権はないのです。

ではなぜC言語の製品プロジェクトが存在しているのでしょうか。

だってウン十年以上開発してるんだもの

C言語というのははっきり言って今風ではないです。
そんな言語が採用されている製品というのはすなわち、今風ではない製品です。
開発当初は他に良い選択肢が無かったのでC言語で開発を始め、エンハンスだソース流用だと言って、他の言語に移る機会を失って今に至るわけです。
こういったスタイルのプロジェクトは巨大なソースコードを抱えていて、行くも地獄引くも地獄の暗黒プロジェクトになっています。
全部捨ててイチから作り直したい。

だって他の言語が動かないんだもの

モダンなWebエンジニアには信じられないかもしれませんが、世の中にはWindowsでもMacでもLinuxでもない環境があります。
具体的には組み込み・マイコン分野です。そしてそれらの環境において、用意されるプログラミング言語の選択肢はほぼC言語一択になります。
今どきRaspberry PiにもLinux入るやん、と言いたい気持ちもありますが、そういったOSすら認められない組み込み分野というのがあるのです。

コンピュータを純粋に計算機として使いたい

C言語が他の言語と比べて優れている点といえばやはり性能です。
圧倒的に早いです。

なせなら、「プログラムはプログラマが書いたとおりに動く」と言いますが、実際には「プログラマが書いてないこと」もある程度動いています。しかしC言語は「プログラマが書いたことしかしない」ので早いのです。
言うなれば他の言語はオートマチック車で、C言語は電子制御もパワーアシストもないマニュアル車のようなものです。

なので、コンピュータを純粋な計算機として使いたい学術分野ではある程度の需要があります。

とはいえ近年はコンパイラの進歩によってPure CよりもC++の方が性能が良いことも多いですし、機械学習などはライブラリがよく整備されたpythonなどが人気ですが。

下の階層まで見通しが効く

C言語というのは言語仕様があまり複雑ではなく、先に書いたとおり「プログラマが書いたことしかしない」言語なので、「このコードを書くとどう動くか」という見通しが立ちます。
それはつまり、C言語の下で動いているものに関心を持つことができる、ということです。

図で描くとこんな感じ。C言語そのものだけではなく、その下にコンパイラやOS、ハードウェアがあって、それらの上でプログラムが動いている。そしてプログラマは、それら下の階層を意識してプログラミングできるわけです。

比較して、たとえばpython等はこう。下の方には確かにOSやハードウェアがあるハズなんですが、pythonというものが巨大で複雑なので、OSやハードウェアまで考えることが難しい。

これは一長一短あります。
C言語であれば、たとえば「こういう書き方をすればLinuxで早く動くかな」といったような特定OS向けに特化したチューニングですとか、「この関数は多分CPU○○サイクルぐらいで動くだろう」といった極めてピーキーな性能調整ができるわけです。
一方で、C言語でプログラムを書く、というのは、C言語の言語仕様だけでなくコンパイラによる最適化やOS・ハードウェアアーキテクチャの知識が求められる、ということでもあります。
つまり、プログラミング言語の「理論」と「実装」の両面に詳しくなければいけない、ということです。

pythonなどのモダンな言語はOSやハードウェアの存在をうまく隠蔽しています。
つまり、プログラミング言語の「理論」を把握していれば「実装」については考えなくて良い、と言うことです。

余談ですがたいていのC言語プロジェクトでは現状こんな感じと化してるので、間違えても息の長いプロジェクトに配属されてはいけません。

まとめ

現在のC言語の立ち位置は、OSやハードウェアを効率的に操作できる言語です。ここでいう効率的に、とは「機械語を書くよりはわかりやすく」という意味です。
そのため現在では組み込みなどの一部分野でのみ積極的に利用され、他分野では「過去の遺産」と化してしまっています。

プログラムを学ぶのでC言語から始めたい?やめとけやめとけ!

-プログラミング

執筆者:

関連記事

no image

Google Apps Script(GAS)で自宅サーバーの死活監視をする

前置き 自宅サーバー使ってますか? 最近もう流行らないかな、と思ったらRaspberry Piの流行で機器も電気代も安価に組めるようになったりして、地味に持っている人も多いんじゃないかな、と思ってます …

GeoJSONで市町村境界をマージして都道府県境界にしたい(その2)

GeoJSONのPolygonをマージしたい第2回です。 前回、純粋な多角形の統合ではなくて、領域が被らない多角形の統合になるのでグラフ問題として解くことができるという説明をしました。 今回はどうやっ …

YouTube Data APIをGoogle Apps Script(GAS)から使おう

YouTubeってAPIから色々な情報を取ることができるんですよ。 APIの情報はリファレンスにまとまってるんですが、APIキーだのOAuth2.0だの、使い始めるまでがまぁまぁ面倒なんですね。 で、 …

SHOWROOMのガチイベをGoogleスプレッドシートでグラフにしよう

まえがき SHOWROOMのガチイベ、と言えば配信者が獲得ポイント数でランキングされ、最終的にファンの札束で殴り合って勝者を競う札束タワーバトルなわけです。 数日~数週間にわたって配信者同士でランキン …

国土地理院の地図データをUnityで読みたい(願望)

なんかgoogleのAdSense通ったんで有益な情報載せないとなって。 国土地理院のオープンデータ 国土地理院が公開している(正確には国土地理院のデータを利用して国土交通省国土政策局国土情報課が公開 …