見出し画像

結局のところC言語を学ぶのが一番強かった

こんにちは、ふぁいちと申します。

現在は、社内の少人数組織でほぼ唯一のエンジニア要員として働いています。
※能力が高いとか特殊なスキルを持っているとかではなく、手を上げたからやらせてもらっているだけです。

業務内容としては、主に社内向けのアプリケーション開発やクラウドのインフラ整備周りなどを幅広くやっています。
まだまだ何者にもなれていない弱小エンジニアですが、とりあえずは一所懸命に働いています。

自己紹介が長くなりましたが、今回は「これからエンジニアになりたい」と思われている方を対象にC言語をおすすめする内容の記事を書いていこうと思います。

今はPythonでのコーディングが中心の僕ですが、「結局C言語を学ぶときに得た知識が一番役に立っているかもなぁ」と思ったことが執筆の背景です。

C言語って何?

プログラミング言語の一つです。
組み込み系や基幹系の開発で用いられることが多く、PythonやJavascriptなどよりも機械語に近い、いわゆる低級言語です。

そのため、C言語はPythonなどと比較すると取り扱いがやや難しいと言われています(私の知っている限りでは)。

ちょっと極端な例を出すと、変数間のデータを入れ替える(Swap)際に、Pythonだと・・・

# 変数の定義
a = 10
b = 20

# 値をスワップする
a, b = b, a

# 結果を出力
print("a =", a)
print("b =", b)

といったように、値の定義などを省けば処理は「a,b = b,a」の一行で終わります。

一方でC言語だと・・・

int a = 10;
int b = 20;
int temp;

// 値をスワップする
temp = a;
a = b;
b = temp;

// 結果を出力
printf("a = %d\n", a);
printf("b = %d\n", b);

return 0;

上記のように、中間保存用の変数が必要になったりします。
しかも、変数の型宣言というものも必要で、整数型の変数なら「int 変数名」 といった命令文が必要になります。
もちろん、間違えればエラーとなりますし。偶然動いてしまった場合は重大なバグになったりもします。

これは本物のC言語エンジニアの方から「間違っている」と怒られそうですが、C言語はそもそも標準関数やライブラリの種類がPythonなどに比べて少ないためです。
加えて、メモリ領域を自分で確保したり開放したりすることもできる(というか、しなくてはいけないため)こともあって、複雑さが増しています。

いや、めんどくさ!

そう思われる方が多いかと思います。
僕も、最初に学んだ言語が偶然たまたまC言語だっただけで、PythonやJavascriptを先に知っていれば絶対にそっちを選んでいました。

しかし、最近はC言語をしっかり学んだことがめちゃくちゃ役に立っていることにも気づきました。

C言語を学んだことのメリット

①アルゴリズムを学べた

先述の通りC言語は超便利なライブラリがあまり用意されていないので、めちゃくちゃ泥臭いコーディングが求められます。
ただ、先程のswap処理も然りですが、プログラミングの「処理の原理原則=≒アルゴリズム」をしっかり理解することができるので、遠回りなようでしっかりと知識を身につけられたなと思います。

加えて、配列やリスト、構造体などのデータ構造をメモリ領域レベルで意識して実装することができたのは大きかったです。
さすがにそれらを常に意識してPythonのコードを記述することはないですが、「なんでこんなエラー出たんだ?」とか、「なんでこんなに重いんだ?」みたいなことは無意識に理解できるようになったと思います。

②コンピュータの仕組みを理解できた

C言語は比較的低級言語に当たるので、ちょっとしたミスですぐにコンパイラから「はい。エラーです。あなたの言ってることよくわかりません」みたいな冷たいメッセージが届きます。

Pythonなどの言語は、ちょっと曖昧な部分は「いい感じ」にやってくれます。
例えば変数の型宣言。
Pythonだと・・・

temp = "こんにちは"
num = 1

といったように変数をポンポン作れますが、C言語だとエラーになります
なぜなら、その変数がどれくらいのメモリサイズを確保すればいいかわからないからです。(実は"文字"、"文字列"、"整数"、"少数" などで確保すべきメモリの領域が異なります)

そのため、以下のように変数にいれるデータの種類を事前に教えてあげなければいけません。

char temp[] = "こんにちは";
int num =1;

charは文字を一つ格納するために必要な変数を宣言するものなので、配列として("[]"の部分)宣言をして、「複数の文字を格納します」という宣言をします。
intで整数を格納するための変数を宣言します。

上記のように「変数を宣言する意味」などを理解していく過程で、コンピュータ側のハードウエアの事情を理解することができ、細かいエラーの対処や処理速度の最適化などの高度なコーディングへの第一歩になると思っています(僕は雑魚ですが)

ここでは触れていませんが、「ポインタ」と「構造体」という概念を学べるのもC言語の良いところで、それらを知っているだけで、急に起こった謎のエラーなどの理由も見えてきたります。

③他の言語の素晴らしさに気づいた

いやもうほんとめんどくさいのよC言語。

面倒で難しいからこそ鍛えられるし、他の言語に触れたときに習得速度も速くなります。

C言語を学んで負荷をかけることで、Pythonあたりに触れたときに「え、こんなに便利なライブラリあるの?!」「あ、これで動くんだ!」「あの設定しなくて良いんだ!最高!」みたいな素敵な発見に繋がります。

結論

C言語に触れたことがない方は、今得意な言語の理解をもっと深める(ありがたみを知る)ためにも、C言語を学ぶことをおすすめいたします。
C言語を苦しんで覚えて、他の言語の理解ももっと深めましょう!

それでは、さよなら〜


この記事が気に入ったらサポートをしてみませんか?