「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に類似の言語には十分に慣れていて、「この程度なら大丈夫だろう」とタカを括ったということなのでしょう。いったんビルドまでしてしまったら、ついつい実行テストもやってしまいたくなりそうなので、個人的には後者が有力な気がします。

何れにしても、全くのプログラミング初心者でないのは確かでしょう。

筆者の文章には信用がある

また、筆者が執筆活動をするのはこれが始めてではないはずです。

たとえば、筆者がフリーランスの方で、プログラミング関連の記事を書くのが始めての人だったとしたら、記事を受け入れる編集部(?)なり何なりで最低限のチェックが入るため、この品質の記事がそのまま掲載されることは無いでしょう。

個人ではなく、会社で仕事を受けていた場合は、会社内で複数人のチェックがあったはずなので、なおさらです。

仮にも天下のZDNetサイト内に記事を持てて、しかもノーチェックで通されるぐらいなのですから、筆者に十分な信用があったのは間違いありません。

まとめると……

以上をまとめると、筆者は「C言語で実用的なプログラムを書いたことは無いけど、Javaとかは一通り理解していて、プログラミングの記事を幾つか書いたことがあったため、編集部には信用のあった人」ということになります。

結局、「やっちゃったなー」というのが一番適切な感想なのかもしれません。