
C言語を使って『写経』を研究する
お疲れ様です。Y研究員です。今回はプログラミングの『写経』です。
カーニハン&リッチーの伝統的な教科書から行のソートを写経しました。テストデータを作って動かしたところ、挙動が怪しかったのでデバッグしました。書き写したコードを眺めたところ、一文字の書き間違いを発見しました。やはり『写経』は動かして、正常動作を得るまでが大切です。書きっぱなしでは、かけた時間に対して学びが少なく、効率が悪くなります。こうなってくると『写経』のお手本には、テストデータと求める出力が用意されていると良いと分かります。
C言語の怖い例を見つけたので共有します。「お腹が痛くなる」選択肢で逃げたくなりますが、どうやら"2[buf]"と書いても配列bufの3番目の要素にアクセスできるらしいです。普通はbuf[2]と書きますね。コンパイラでエラーを出したり、実行時に止まってくれれば良いんですが、しれっと実行されてしまうのは「お腹が痛い」です。勉強になりました。
#C言語クイズ
— Yutaka Hirata (@yutakakn) January 3, 2023
実行結果はどうなるでしょう?#include <stdio.h>#include <stdbool.h>
int main(void)
{
char buf[5] = "2023";
char c1 = buf[0];
char c2 = 2[buf];
bool cmp = (c1 == c2);
printf("%s\n", cmp ? "true" : "false");
return 0;
}
さて『写経』に最適なお手本を探して検索したところ、新しいテーマを見つけました。それは、C言語のコンパイラです。文法を理解するよりも、大量のコードを書き写してデバッグする経験からC言語が学べるという説です。
習うより慣れる、英会話で言えばシャドーイングみたいな手法と理解しました。記事中にはもう少し簡単なCのPuzzle Bookも紹介されていました。カーニハン&リッチーのポインタを終えたら(+もう1章?)、次のテーマに移りたいと思います。
こうなってくると、何のためにC言語の『写経』をするのかが問題になります。ここでは、より良いプログラミングの『写経』とは何かを考える、がテーマです。改めての確認になりました。
ではまた!
いいなと思ったら応援しよう!
