
C言語を最初に学んで良かった点・悪かった点を振り返る【学生向け】
2022-08-26
2022-08-26
目次(タップして移動)
はじめに
こんにちは、こふです。
C 言語を最初に学んで良かった、悪かったことを振り返ります。
書くことにした経緯
C 言語から勉強し始めた学生に届けば良いなと思っています。著者も投稿日時点では学生です。
この記事を読んでいただくにあたり自己紹介をする必要がありますね。
今(2022/08/26 時点)は大学 4 年生です。
プログラミングを大学 2 年生の授業で本格的に始めました。厳密にいうと、1 年生の時に Python
を 3 コマ分くらいやったのですが、何も記憶にないですし、それ以降プログラムを書いた覚えはありません。
つまり、C 言語
が初めて習ったプログラミング言語と言って差し支えありません。
良かった点
たくさんあります。
最初から型を意識することができた
- 型を定義することが最初から当然になった
- 動的型付け言語から始めると、型を書くのがだるく思ったりする
- 当然、実行するまでバグに気づけないとか、エディタのインテリセンスが効かないとかある。当然 IDE にもよるり、Python でも静的解析もすれば同等に書けなくはない(実行速度を除いて)
- 動的型付け言語を使う中で、静的型付け言語を使うメリットはわかってきて、自然と移行する人がほとんどだろうと推測できる
- 結局は静的型付け言語に落ち着くと思っている
コンパイルして機械語にして実行する流れを最初から意識できた
- インタプリタ型の言語だと、このプロセスを知ることは基本ない
- どうやって実行しているんだ?と疑問に思い調べると、周辺知識から知ることができるかもしれない
- しかし、C 言語ならその疑問がなくてもコンパイルせざるを得ない
- そのため必然的に意識することができる
ポインタなどの計算機の仕組みを意識せざるをえない文法を学べた
Python・JavaScript
などでは気付きづらい- 学べなくはないけど、必然的に学ぶことはない気がする
- コンパイルと同じで、仕組みを調べて初めて周辺知識を得て、というイメージ
- 言語仕様なども気にする時に初めて気づくかも
- 値を引数でコピーでしか渡せないのか、メモリのアドレスを教えれば効率いいのでは、という素朴な疑問が浮かべば、どの言語であっても問題はない
- Python なら以下のような記事で知ることができる
- Python 関数の引数は値渡し?参照渡し? - Python の関数 - Python のきほん - やさしい Python 入門
- JavaScript はややこしい、僕は全く自信がない
- JavaScript に参照渡し/値渡しなど存在しない - Qiita
- C 言語では
sizeof
でビット数を求められる- メモリリソースをどのように使っているか知るきっかけとなる
- どの型は、どのビット数かなど、確認する機会も少しはあるはずで、豆知識にもなる
- 文字列の長さを求める時にビット数で除算をするきっかけになる
malloc
,free
などのだるい文法も使う- メモリを確保して、その配列の空間を利用して、使い終わったらメモリを解放するなど
一般に言われる C 言語の問題点を感じることはなかった
- よく言及されるほどの大規模なプログラムを書かないからだと思われる
- 超優秀な大学では、大規模プログラミングをさせられるのかもしれない
- しかし、標準的なレベルの大学では、この点を意識する必要はないはず
悪かった点
良かった点の裏を返せば、ということも含みます。
- コンパイルや型、アドレス・ポインタを一度に学んだため頭がパンクして全てが理解できなかった
- 途中で嫌になって挫折する可能性はわりと高い
- 初めてのプログラミングとしては開発環境の構築が地獄
- ネット上で C 言語を動かせる環境もあるが、それはあまり使わなかった(なんで?)
- それを使わずに
Visual Studio
を最初は使った- 本か大学かで言われたけど、今思うと地獄だった
- その後に Python を個人的に初めて
Visual Studio Code
に出会い、gcc
を入れてCLI
でちゃんとコンパイルした
- ネット・本の教材は他の言語と比べ不親切なものが多かった
- 上級者向けならたくさんあったが、という感じ
- 僕が
C 言語
を勉強した時に使った本を載せておきます。レビュー記事はいつか書くかもしれませんが、簡潔にコメントも載せます。
使って良かった参考
- 新・明解 C 言語 入門編 第 2 版 | 柴田 望洋 | コンピュータ・IT | Kindle ストア | Amazon
- 今は第 2 版が出ているようです。僕は初版です。
- 基本的なプログラミングを学べました(標準入出力、ループ、四則演算、ポインタ、ファイルの扱い)
- 練習問題が載っていて、当時は非常に有効に使えました
- 新・明解 C 言語 入門編 (明解シリーズ) | 柴田 望洋 |本 | 通販 | Amazon
- 苦しんで覚える C 言語 | MMGames |本 | 通販 | Amazon
- ポインタの理解がしやすかったのはこの本です。
おわりに
これで自分だけが思う、自分だけが語れることをまとめられて良かったです。
読んだ誰かに役立つ日を待っています。