エンジニアを風林火山で分類

この記事面白いです。エンジニアの性質にピタリと当てはめることができました。
自分の開発チームは、風林火山そろっているでしょうか?

小野和俊さんのブログ「スターエンジニアの要素」から引用

臨機応変性とか先進性とか、私が今まで出会ってきたスターエンジニアの要素について、このところずっと考えてきた。その内容をまとめたものが次の表である。

分類 能力
風のエンジニア 迅速な設計/実装によってチームを加速させる風のエンジニア。
風のエンジニアがいない開発チームでは、他に先駆けて新製品やサービスをリリースすることが困難になる。
林のエンジニア 突発的なトラブルが発生しても冷静に対処し、チームに乱れぬペースを提供する林のエンジニア。
林のエンジニアがいない開発チームはトラブル発生時に何をすべきかの正確な判断を行えず、混乱に陥りやすい。
火のエンジニア 新しい技術/方法/ツールの積極的な導入によってチームやその成果物の競争力を高める火のエンジニア。
火のエンジニアがいない開発チームは同じやり方を繰り返すことはできるが、進歩する機会が少ない。
山のエンジニア 密なエラーチェックと堅牢なプログラミングによって成果物の安定性を高める山のエンジニア。
山のエンジニアがいない開発チームは常に品質の低さからくる不安にさいなまれる。

(希望的なことも含めて)私は火のエンジニアというつもりです。
私の職場では、林のエンジニアは、どちらかというとマネージャー的な人の役割です。
林と山が少ないんだな。きっと。


初心者に対するプログラミング教育

新入社員に対して、プログラミング教育を実施してきました。感想は惨敗です。
私の想像以上に、根底から知らないものなんだと痛感しました。
それは分かったつもりで、0からでも分かるようにと意識していたつもりだったのですが、私が当然と思って話している内容が実は知らないということがあり、最終的に理解が浅いまま先に進んでしまったようです。

受講者のレベルにもよると思いますが、私が教えたのは、プログラミングが全くの初めてという人をベースにしています。
そのような受講者の場合、プログラムそのものがなんなのか分かっていなかったり、構文なのか自分の記述なのか、はたまたサンプルなのかが分からないといったことになりました。いくつか例を挙げてみます。

変数やメソッドのネーミング
変数というものがなんなのかは、当然詳しく説明するのですが、変数名が自分でつけた名前だということ気づかないまま説明が進んでしまったことがありました。
よくよく説明しながら、なにが分からないのかを引き出していくと、「なぜここではiという変数なのに、ここではstrという変数なのか」とか変数名が色々と変わることに混乱していたのです。「変数名というのは自分で名づけられるものだ。」ということを説明してやっと理解してもらえました。
変数や関数という考え方は、数学でも1次関数y=ax+bで、xでyの値を定義するという感覚があると思うのですが、これの理解に手間取るとどう説明してよいのやら。。。と思ってしまいました。
メソッドの仮引数と実引数
これは私も手抜きで説明したのがいけなかったのですが、実引数と仮引数で変数名が違っているのに理解ができないことがありました。

public static void main(String[] args){
int i = 10;
show(i);
}
public void show(int n){
System.out.println("parameter is " + n);
}
このような記述で、なぜiがnになるのかが分からないのです。仮引数と実引数があるということを説明していれば、こんなところでつまづくことはなかったと思います。
やっていることの意図が分からない
サンプルとして扱っている範囲が分からないまま、安直な例を出すと帰って混乱していました。例えば関数・メソッドの説明として、足し算を行うメソッドaddメソッドを定義したとします。
そうすると、「なぜaddメソッドを定義する必要があるのか、足し算ならば、+演算子で記述できるのに、なぜ?」と言われました。
必要性を感じさせないまま、新しいことを教えるのは理解しにくいものなのだと思いました。たとえば、ifで記述できるのになぜswitchがあるのか。メソッドを作成する必要性はなにか、こういった必要性を理解してもらわないと、新しいことは吸収してくれないのです。
メソッドがない状態で苦労してもらって、その上で「メソッドを使えばこんなに楽になったよ。あぁよかったね。」と体感してもらうことが大事なのだと痛感しました。

無駄な事を教えていないつもりですが、無駄でないだけでなく必要だ。と感じてもらわないといけないのです。
もし、私が次回講習をするとしたら、疑問点・問題を明確にし、それを解決する手段を説明したいと思います。


Java学習の良書 サーバーサイド入門

Javaサーバーサイド技術を一から学ぶのには、この書籍が良いと思います。

即解JSP & Servletプログラミング入門―JSP2 & Tomcat5対応
即解JSP & Servletプログラミング入門―JSP2 & Tomcat5対応
基本的なところから深い知識まで
詳しく図つきで解説しています
他の書籍では簡単に書いて済ましてしまうような内容もできるかぎりもらさず一通り書いてあるように感じます。
ServletからではなくJSPからやるのが特徴的です。技術の順序からして逆のような気がしますが、初心者が学ぶに当たってはJSPからの方が学びやすいと思います。この点については私も賛成です。
JSP、JSPのディレクティブや、カスタムタグ、Strutsと実践的に必要となることを詳しく紹介していると感じます。