前回C言語のポインタ(基礎編)についての記事をまとめました。
それの番外編記事としてその昔、右も左もC言語のことがわからなかった私が、どのようにC言語を勉強してある程度業務で使えるようになったかをまとめようと思います。
※当時の私はC言語以外の言語は少しは触ったことがあったのでプログラムとはなんぞ?などの基本的ことは抑えている前提の書き方になります。
#C言語部屋に入門する前に
C言語をバリバリ使う部署に配属された当時私はC言語の存在は知っていても内容がどのようなものかわかっていませんでした。
プログラムの中身をみても他の言語ではみない書き方・鬼門と言われるポインターなど恐怖でしかありません。
現場の先輩に泣きついてC言語のイロハを学ぶことになりました。
まず先輩から指示された内容は以下のようなものです。
###C言語を学習したいなら2つの書籍を買いなさい
- これから一生使えるような逆引きのC言語辞典を買いなさい
当時私が買った書籍:C/C++ 辞典 第3版 - 初心者学習用の入門書を買いなさい
当時私が買った書籍:猫でもわかるC言語プログラミング 第3版
入門書と逆引きを両方買うのはかなり効果的です。
入門書で勉強しながらも、標準関数などの仕様を詳しく調べることもできますし、何よりも今後業務に関わっている限りは逆引き書は必須となります。
#C言語部屋に入門直後
上記の書籍を買ってからすぐは書籍をみることよりも以下の課題に注力するように指示を受けました
###C言語の入門書を開く前に覚えることがある
- まずはC言語の変数の型の種類と各変数の型のサイズを覚えなさい
→ここは今だからこそ大事なことだとわかりますが当時はあまり理解できていませんでした
C言語はポインタを使用してアドレスの値を直接書き換える関係上、型のサイズを覚えることは必須です
(覚えないとメモリ破壊している原因にたどり着けない) - 構造体を宣言した際のサイズも理解しなさい
→ここも変数のサイズ同様の理由でC言語ではかなり重要です - アスキーコードを理解しなさい
→C言語をやったことがない人はあまり知らないかもしれない(一般的に知ってたらごめんなさい)ですがcharなどの中身には直接abcdなどの文字が入っているわけではなく、アスキーコードなどの文字コードが格納されています。
#C言語部屋での生活
###変数を理解したら入門書+αだ!
ここからは入門書+αを進めてみます。
ただし、入門書はあくまでサブ課題で自分で進めるように指示を受けます
メインの課題は以下でした。
- 逆引き書にある標準関数のうち
str
,mem
がつく関数を自分で作ってみなさい- 作るときは1つの案ではなく2つ以上の案を出すこと
- 納期を決めて作ること
- 実装を始める前にまずはコメントで処理を書いてみること
かなり実践を意識して指示を出したのだと思います。
当時の親方は現場を教え込ませるために上記の条件をつけたのだと思います。
#C言語部屋の卒業試験はやっぱり
卒業間近になるとポインターについてみっちり学習が始まります
例えば以下のような内容でした
- ポインタ変数の中身に入っているアドレスをインクリメントした場合のアドレス値はいくつになる?
- 配列を使用した場合のアドレス操作は?
- 関数ポインタを理解しなさい
上記はまず卓上で値を計算し、その後実際にプログラムを動かして正解かを確認するなどを反復しました。
そのようなことを繰り返していると自然とポインタについては理解できるようになってきました。
#最後に
C言語は他の言語に比べてはっきり言って泥臭い処理が多いです。
その分基礎を知っていないとバグやメモリ破壊などが起きた場合のデバックがかなり困難な言語になっているため
挑戦する際はコピペ実装を行うことはあまり考えずに、自分のロジックや知識を生かせるようにしっかりと基礎を固めることが大事だと思います。