SSブログ

練習問題の解答からみるエンジニアのレベル [プログラマー現役続行]

長年行っているJava研修(Java 8研修も含む)はテキストとして『プログラミング言語Java第4版』『Java SE 8 実践プログラミング』を使用しています。また、今年から始めたGo言語研修『プログラミング言語Go』を使用しています。どのテキストにも、プログラミングの練習問題が豊富に含まれています。

基本的にプログラミングの練習問題は事前に解いてもらいます。そして、研修の場で解答の確認を行います。つまり、ソースコードを研修の場で開くわけです。私自身は事前に解答のソースコードを見ておくことはしませんので、研修の当日に受講生のソースコードを見ることになります。

練習問題であってもソースコードの可読性という視点でも分類はできますが、解答できているかというレベルで分類すると次のようになります。
  • 全く解けていない
  • 一見すると解いているように見えるけど、バグがある
  • 練習問題が求めているものと解答が異なる
  • 解いているが、動作の確認が目視になっている
  • テストコードも整備されてきちんと解かれている

全く解けていない

練習問題にもさまざまな難易度があるので、サービス問題ともいえるやさしい問題から難易度が多少高いものがあります。練習問題なので、難易度がものすごく高いものはあまりないです。それでも、「解けていないのはどういうこと?」と思われる難易度の低い問題を解いていない人は、全体として解けていない問題が多くなります。
※ ソフトウェア・スキル・インデックスでいえば、レベル1(初心者)と2(見習い)の間でしょうか。

一見すると解いているように見えるけど、バグがある

実は、これがおそらく最も多いです。研修の場で初めて私自身が受講生の解答を見るのですが、エディターやIDEでコードを開いて見た瞬間に「何か臭う」と思い、よく読むとやはりバグがあるのです。そこで、解答を作成した受講生にどこかおかしくないかと聞くと、最も多い返事が「だいぶん前に書いたので忘れました」という回答です。研修は一月に1日だけなので、進捗によっては一か月前もしくは二か月前に書いたコードとなります。

練習問題の解答のソースコードは短いものが多く、「忘れた」と回答したら済まされるという思考はソフトウェアエンジニアとして正直許されません。そのような回答をされると私が言うのは、「覚えているかどうかではなく、今読んで理解して問題点を見つけなさい」です。
※ ソフトウェア・スキル・インデックスでいえば、レベル2(見習い)と3(初級職人)の間でしょうか。

練習問題が求めているものと解答が異なる

これも意外と多いです。つまり、練習問題の設問内容をきちんと読まずに、間違った解答もしくは機能が少ない解答となっています。多くは、練習問題で複数の機能が要求されているのに、全部を実現していない場合です。そして、どうして全部実現していないのかと聞くと、「練習問題の内容を読み落としていました」という回答が圧倒的に多いです。そもそも、練習問題はせいぜい2,3行で書かれています。それでも、最後まできちんと読まずに解いてくるわけです。
※ ソフトウェア・スキル・インデックスでいえば、レベル2(見習い)と3(初級職人)の間でしょうか。

解いているが、動作の確認が目視になっている

すべての練習問題でテストコードが容易に書けるわけではありませんが、容易に書ける練習問題でも、動作の正しさを、実行して目視で確認するだけと言うものです。そして、バグがあるけれどテストケースが少ないためにそのバグに気づけていないことが多いのは、目視で結果を確認するようになっている解答です。
※ ソフトウェア・スキル・インデックスでいえば、レベル2(見習い)と3(初級職人)の間でしょうか。

テストコードも整備されてきちんと解かれている

これは何も言うことはありません。
※ ソフトウェア・スキル・インデックスでいえば、レベル3(初級職人)でしょうか。

研修の練習問題であっても、「許される無知の範囲は開発経験年数に反比例する」で書いたのと同じように、経験年数が長いほど期待される解答のレベルは高くなっていきます。