プログラミング

どうして私は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言語から始めたい?やめとけやめとけ!

-プログラミング

執筆者:


comment

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

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

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

no image

例え話をしないC言語のポインタの説明

もくじ1 まえおき2 Hello, Worldより簡単に2.1 サンプルコード2.2 変数の置き場所2.3 変数が入っているところを見てみる3 C言語とメモリ3.1 変数cの「まわり」を見てみる3.2 …

【Unity】GPUを使ってパンツを隠すスクリプトができた

かわいいスカートを履きたい!でもパンチラしたくない! それは誰もが抱く夢です。もちろん、3Dモデルだってパンチラしたくないと思っているハズです。 というわけで偉大なる先人がいます。 Unityでパンツ …

no image

Unityでメッシュをさわるノウハウ

ヒマなので覚書。ウラを取っていない経験則なので話半分で読んでください。 あと、3Dの基本概念とUnity固有の話の区別が付いていないのでごめんなさい。 もくじ1 Meshクラスの基本2 ポリゴンの読み …

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

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