![]() |
初心者メイド |
ベテランのエンジニアに、初めてプログラミングを勉強するのによいプログラミング言語をきいてみたんだ。
![]() |
そしたら「まずはC言語を勉強するべきだ!あれは、プログラマとしての基礎だから絶対にC言語を勉強すべきだ」と説明されたんだ。
![]() |
C言語でプログラミングしたら難しく感じたよ。
本当にC言語ができないとプログラマとして生きていけないの?
![]() |
現役エンジニアのメイド |
いいえ、C言語から勉強しなくても大丈夫ですよ。
ただ、C言語ができると他のプログラミング言語への移行もスムーズだね。
![]() |
今回は、ベテランエンジニアの「初めてならC言語やるべき」という意見について深掘りをします。
Contents
ベテランエンジニアの言い分
ベテランエンジニアがなぜC言語にこだわるのか?
それは以下の3つの理由のようです。
- ポインターになれてメモリ操作を覚えるべきだ!これこそプログラミングの基礎中の基礎だ
- 他の言語に移行しやすいんだ
- 初めて使ったプログラミング言語がC言語だった
ポインターになれてメモリ操作を覚えるべきだ!これこそプログラミングの基礎中の基礎だ
C言語は、唯一、メモリの操作をマニュアルでできます。
メモリの操作とは、動的にメモリの確保、解放のことを指します。
メモリの操作ができると、動作効率が良いシステム(例えば、WEBページが爆速で表示されるなど)ができ、性能がよいシステムを作ることができます。
だから、C言語以外の言語(PHP,Pythonなど)をやる前に、まずはC言語でメモリの操作をマスターしてほしいという意図があります。
他の言語でもメモリの確保、解放はできますが、大概はガベージコレクションという自動で確保・解放やってくれます。そのため、メモリーの挙動を意識できないプログラマーが増えてしまいました。その結果、メモリーを使いすぎて、システムダウンすることが少なくありません。
他の言語に移行しやすいんだ
私も5年以上、C言語(C++)を使ってきましたが、たしかにJavaやPHPに移行しやすかったです。
厳密に言えば、PythonやPHPも本体はC言語で作られているから、まったくC言語が使われていないケースはほとんど無いと言えるでしょう。
初めて使ったプログラミング言語がC言語だった
20年以上も前からプログラミングをやっている人は、ほとんどがC言語(COBOLも多い)です。
その結果、C言語をやるべきと言う人が多いようです。
初めて学んだ言語をほかの人にも進めたくなる気持ち、なんとなくわかります。
C言語ってどうよ、
C言語(C++)は、以下の環境でよく使われています。
- 組み込みシステム(IOT)
- Linux OSのカーネル(心臓部)
- オンラインゲームのサーバー
- PCのソフト
C言語は、コンパイル方式(テキストで書いたソースコードを機械語に翻訳すること)を採用していることもあり、高速に動作します。
また、C言語は唯一、メモリをマニュアルで操作できる言語です。
メモリの確保、解放を必要に応じてできるので、メモリが少ない環境(主に組み込み)ではC言語が使われることが多いです。
C言語のメリット
C言語のメリットは以下の通りです。
- プログラムの実行速度が最も早い
- C言語からほかの言語に移行したとき、「楽」を感じる
- ポインターを学ぶことにより、メモリ操作に対する理解が深まる
- メモリの確保、破棄を任意のタイミングでできる。
- 動かす前に、コンパイル方式のため文法の誤りを発見できる(PHP,Pythonは一行ずつ解釈してプログラムを実行するため、実行して初めて誤りに気付くことが多い)
C言語のデメリット
一方で、C言語のデメリットは以下の通りです。
- プログラミング言語の中で、一番時間がかかる
- 難易度が高いため、挫折しやすい
- メモリの操作をマニュアルでできる反面、管理が難しく、メモリの解放を忘れる不具合が起きやすい
- メモリの操作を間違えるバグが発生しやすい。しかも、エラーでとまらないことがほとんどで、不具合に気付かないことが多いし、気付いても特定に時間がかかる。
- 開発にかかる時間が、他の言語に比べて2,3倍以上になることがほとんど。
- 習得が難しい言語の割には、仕事の案件数が、PHP、Python(このあと補足します)に比べて極端に少ない。
C言語の仕事の案件をレバテックフリーランスで調べてみました。
その結果、以下のような結果が出ました。
- C言語・・・276件
- Ruby・・・887件
- PHP・・・1856件
- Python・・・878件
2020/11/28現在では、組み込み系よりも圧倒的にWEB系の仕事が多いようです。
その結果、C言語の需要も、他の言語に比べて少なくなっています。
結論!必ずしもC言語から始めなくても良い
本題です。
C言語を最初にやるべきかというとそうではありません。
プログラミングを始める理由が、以下の通りであれば、高速化が求められない限りはC言語にこだわる必要はありません。
C言語にこだわる必要が無いもの
- WEBシステムの開発
- ゲームエンジンを使ったゲーム開発(Unityなど)
- スマホのアプリ(swift,javaなど)
組み込みは絶対やらない!
速度は求めていないことが明確であればC言語を必ずしもやる必要はありません。
目的もないのにC言語を勉強したらほぼ確実に挫折してしまうでしょう。
C言語が必要になるケースは?
一方でC言語が必要になるケースは以下のとおりです。
- 組み込みシステム(IOT)
- Linux OSのカーネル(心臓部)
- オンラインゲームのサーバー(多人数が同時にアクセスするため高速処理が必要)
- 競技プログラミング(AtCoderなど)
AtCoderなどの競技プログラミングは、実行速度が決められています。
速度を求められる環境ならば、C言語(もしくはC++)が唯一の選択肢になります。
atcoder
まとめ
いかがですか?
必要なプログラミング言語は、あなたがやりたい分野によって変わってきます。
C言語は、プログラミング言語のなかで最も処理速度が速い言語(アセンブラ除く)で魅力的ではあります。その分、習得が難しく挫折しやいのも現状です。
結論は、プログラミングを習得する目的によって、プログラミング言語を選べばよいでしょう。