プログラミングを覚えたいという老若男女に分け隔てなく伝えたいこと、それは「ひたすらプログラムを書いてください」という言葉に尽きる

「ちょうど一年前に~、この道を通った夜から、昨日の事のように~今はっきりと想い出す~」などとTHE 虎舞竜ロードなんか思い出しちゃったりする世代なのであるが、およそ1年前にプログラミングに関する書籍の選び方に関する記事を書いてみた。まったく反響もなく(笑)、まあそれはそれでいいんだけど、プログラミング初心者・プログラム初学者がどのようにしてプログラムを学習していくのか、というのは、IT系の業界がこれだけ伸びてきて、かつコンピュータサイエンスがこれだけ発達してきても未知数の部分が多い気がする。もちろんこれにセオリーなどないわけだが、私なりの考えをまとめてみたい。 “プログラミングを覚えたいという老若男女に分け隔てなく伝えたいこと、それは「ひたすらプログラムを書いてください」という言葉に尽きる” の続きを読む

高校時代の数学の先生の教えに倣い「プログラミングは頭じゃなく手で覚えるのです」を説く

高校時代の数学の先生は授業中に剣道着のまま竹刀を持ち歩いて数学を教えていたという人で(今なら問題になってるかも?)、言ってみれば文武両道的な感じだった。実際に剣道部顧問もされていたので有段者だったとは思う。件の先生とはあまり交流を持たなかったので詳しいところは聞いていないけれど……。 “高校時代の数学の先生の教えに倣い「プログラミングは頭じゃなく手で覚えるのです」を説く” の続きを読む

セキュアソフトウェアプログラマ試験

SANSが、Secure Software Programmer試験を日本でも実施するらしい。
そういうのがあるんですね。

ていうか、試験はあくまでも試験だと思うわけで。実用的な試験かどうかという問題もある。
あるいは知識と心構えの確認試験であって、実際のC言語のプログラムコードやx86なアセンブリコードを書いたりするわけではない…だろうな、おそらく。そんなことしたらCASL以上に受験者激減って感じ。

■SANS、安全なプログラミングスキルを認定する国内試験を実施へ
http://www.itmedia.co.jp/enterprise/articles/0807/01/news120.html

受験料は5万7000円で、10月には同試験の受験予定者を対象としたトレーニングプログラムを実施する。来年以降は試験を年2回開催するほか、.NET環境向けの試験も導入するという。合格率はC言語が約75%、Javaが約68%となっている。

ぎゃふん!
57,000円!?
労(と負担)多くして得るものナシ、的ヨカンが満載だな…。

プログラミングセンス

決して自分にプログラミングのセンスがあるとは思わないが、プログラミングとは合理化だと思って久しい。
自分が若いときにやっていた例では、64KBメモリしかないシステムを、拡張しつつ64KBを維持するという仕事があったが、これはすなわち、いかに合理化するかに神経を注ぐだけだ。
自分というのは、こういう条件下で伸ばしていくものだと思う。

DBから、あるテーブルを検索する。特定範囲の日時を条件に、特定のIDを持つレコードを検索する。擬似コードを使って説明する。符号の細かい判断(>か>=かなど)やエラー処理例外処理などは、ここでは気にしない。

“select id from テーブル where day > 開始日 and day < 終了日;”;
for (検索されたレコードがある間) {
  if (id == 特定のID) {
    ”発見”;
    break;
  }
}

このコードを見たときに、この人はシステムのそれぞれに出来ることをちゃんと考えない人(考えられない人、ではない)と思ってしまう。SQLで実現可能なこと、プログラミングで実現可能なことをちゃんと理解しないと、無駄な処理、無駄なコードを埋めまくって、単にパフォーマンスを落とすだけになる。
もちろんDB側で処理させるとパフォーマンスが落ちるからプログラム側でやるのだ、というならわかる。が、例えばPerlやPHPのようなスクリプト系言語で処理させる場合、DB側での処理とスクリプトエンジンを使った処理では、どちらに分があるかは一目瞭然だと思う。データベースシステムは通常C/C++言語で実装され、バイナリで動作している。コンパイルされないスクリプト言語は、せいぜいよくて中間コードだ。

それにしたって、せいぜい、こう書くのが普通だろう。

“select id from テーブル where day > 開始日 and day < 終了日 and id = 特定のID;”;
if (レコード発見) {
  ”発見”;
}

人のコードをコピーペーストしてつぎはぎし、その場をしのぎながら動けばいいというコードを作る人は、たぶん何も考えていないと思う。
単に、確実に動いている部分を持ってきて、貼るのだ。だからインデントもコーディングスタイルも醜悪になり、結果enbugしやすい状況を招き、最終的に自分でdebugできなくなるか無駄な時間を掛けていくという負の循環を引き起こす。

決して、自分がプログラミングセンスを有しているとは思わない。
重要なのは、どう合理化/効率化を考えながらプログラムを書くかだと思う。

プログラミングができないSE

ITproのこんなニュース。

■【IT Service Forum 2007】プログラミング軽視が使えないシステムを生む
http://itpro.nikkeibp.co.jp/article/NEWS/20071127/288167/

開発できないSEどころか、問題解決ができない、つまり、直面する問題の何が原因でどう解決する/できるかがわからない、あるいは時間が掛かりすぎる人が多いのは事実だと思う。

寺嶋氏の提唱が必ずしもよいかどうかは不明だが、プログラムが書けないSEなんてのは、料理の作れない料理長と変わらないと思う。必ずしも全員が料理長の能力を持っている必要はないと思うが(そんなチーム構成は冗長度も構成維持費も高すぎる)、普通のコックはうまい料理と料理に対する熱意、創作意欲、発想力があってしかるべきだし、料理や味のトラブルについても洞察力を発揮できてしかるべきだと思っている。