「C/C++のポインタの機能」でトンデモ記事を書いた人物の正体を想像してみる
ZDNet Japan が経営するサイトに掲載された C/C++ 入門の特集記事の出来があまりにも酷いというので話題になっているようです(注:リンク先の元記事は既に一部訂正されています)。今日は、この記事を読んで、原稿を書いた筆者の人物像を想像してみます。
この問題について、ご存知無いかたは、まずはclausemitzさんのこちらの記事をどうぞ。
http://blog.livedoor.jp/clausemitz/archives/50888257.html
clausemitzさんが指摘しているように、この間違いかたは、初心者が犯しがちな、まさに典型的な間違いかたです。もし、私がCの入門者向けの本を書くとしたら、このプログラムは、そのまま掲載したくなるような、良くできた「ありがちな誤例」です。
なぜこんな記事が出来上がってしまったのか。幾つか想像できる事をあげてみましょう。
(長文注意。しかも、内容は薄いです。)
筆者はCで実用的なプログラムを書いたことが無い
まず言えるのは、筆者はCで実用的なプログラムを書いたことが無いだろう、ということです。
ポインタの概念がきちんと判っていないと問題の記事の2ページ目に早速出てきているように、Cの基本関数であるscanf系の関数が使えません。なので、入力がテキストで、それを処理するようなプログラムは作れないことになります。
入力がテキストじゃない実用プログラムも沢山あるとは思いますが、それでもこのレベルの間違いを犯す人が作成することは困難でしょう。
例えば、バイナリだけを扱うプログラムだったら、実用的なものにするためには、メモリの管理と複雑なデータ構造へのアクセスでポインタを使うことになるでしょうし、GUIを持つプログラムなら、フレームワークが大抵オブジェクト指向っぽくデザインされているので、ポインタとオブジェクトの概念の理解が必要になるでしょう。
いずれにしても、Cで大規模で実用的なプログラムを書くには、ポインタの理解が必要になります。記事から読み取れる筆者のポインタへの理解度では、そのレベルに達してはいないでしょう。
筆者は基本的なプログラミング能力を有している
問題のプログラムは、論理的には間違っていましたが、文法的には間違っていませんでした。コンパイラにこのプログラムを食わせても、(Warningは出るかもしれませんが)コンパイルエラーにはならないはずです。
つまり、筆者は実際にコンパイルしてみたか、もしくは、文法的なミスは無いことを確信していたか、ということだと思います。前者だと、少なくとも開発環境はあったということですし、後者なら、JavaなどCに類似の言語には十分に慣れていて、「この程度なら大丈夫だろう」とタカを括ったということなのでしょう。いったんビルドまでしてしまったら、ついつい実行テストもやってしまいたくなりそうなので、個人的には後者が有力な気がします。
何れにしても、全くのプログラミング初心者でないのは確かでしょう。