プログラミングスキルを客観的に測る
普段仕事でプログラムを書いていても、「自分は一般的にどれほどのスキルをもっているのか」とかは中々判定しづらいらいものです。
プログラミング言語の文法、書式など言語そのものの知識は、建築で例えると金槌やノコギリなどの工具の使い方 を「知っている」「知らない」の違いでしかなないのでそれほど問題にはなりません。「覚えるのがめんどくさい」という気持ちをなんとかできれば解決できます。
しかし、「やりたいこと(仕様書)から、実際に動くプログラムにする」スキルというのは、どれだけのスキルがあるのか客観的に判断しづらく、自分自身でもどれほどの能力があるのかよくわかりません。
そこで、それを客観的に調べられる方法を紹介したいと思います。
Fizz Buzz問題
まずは、この問題でプログラマーとして基本的なスキルがあるか判定してみましょう。FizzBuzz問題 とは、Jeff Atwoodが提唱した問題です。以下の仕様通りに動くプログラムを作成します。言語は何でもかまいません。
作成にかかった時間も判定材料の一つとなりますので、それも一緒に計測しておきましょう。
[FizzBuzz問題]
1から100までの数字を順番に画面へ表示する。ただし、
・3で割り切れる数字の場合 “Fizz”
・5で割り切れる数字の場合 “Buzz”
・3でも5でも割り切れる場合 “FizzBuzz”
を数字の代わりに表示する。
出力例
以下のように出力されていればOKです。スペースの都合上横に並べていますが、縦でも横でも問題ありません。
回答表示
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz
プログラムコード
HMのみなさんにもやってもらいました。得意な言語でやってもらった所、C,PHP,Javascript,VBSで回答をもらうことが出来ました。
C言語での回答
[c]
#include <stdio.h>
main()
{
int i;
for( i=1 ; i<=100 ; i++ ){
if( i % 15 == 0 ){
puts(“FizzBuzz”);
}
else if( i % 5 == 0 ){
puts(“Buzz” );
}
else if( i % 3 == 0 ){
puts(“Fizz”);
}
else {
printf(“%dn” , i );
}
}
return 0;
}
[/c]
phpでの回答
[php]
<?php
for($cnt=1; $cnt<=100; $cnt++ ){
if( $cnt%15 ==0 ){echo ‘FizzBuzz<br />’;}
else if( $cnt%3 ==0 ){echo ‘Fizz<br />’;}
else if( $cnt%5 ==0 ){echo ‘Buzz<br />’;}
else{echo $cnt.'<br />’;}
}
?>
[/php]
VBSでの回答
[vb]
Option Explicit
call prcSample
sub prcSample()
Dim lonCounter
for lonCounter = 0 to 100 step 1
if lonCounter mod 15 = 0 then
WScript.echo “FizzBuzz”
elseif loncounter mod 5 = 0 Then
WScript.echo “Buzz”
ElseIf lonCounter mod 3 = 0 Then
WScript.echo “Fizz”
Else
WScript.echo lonCounter
End If
Next
End Sub
[/vb]
Javascriptでの回答
[javascript]
<script type=”text/javascript”>
var i=1;
while(i<=100){
if(i%3==0&&i%5==0){
document.write(“FizzBuzz<br>”);
}else if(i%3==0){
document.write(“Fizz<br>”);
}else if(i%5==0){
document.write(“Buzz<br>”);
}else{
document.write(i+”<br>”);
}
i++;
}
</script>
[/javascript]
HTML+Javascriptでの回答
[html]
<!DOCTYPE html>
<html dir=”ltr” lang=”ja”>
<head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, user-scalable=yes, maximum-scale=1.0, minimum-scale=1.0″>
<title>テスト</title>
<meta name=”Description” content=”” />
<meta name=”Keywords” content=”” />
<link rel=”stylesheet” href=”style.css” type=”text/css” media=”screen”>
<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js”></script>
</head>
<body>
<script type=”text/javascript”>
jQuery(function($) {
var counter = 0;
(function loop() {
//codes…
if (counter < 99) {
setTimeout(loop, 500);
}
counter += 1;
$(“#num”).html(counter);
if(counter == 100){
$(“#txt”).html(‘オワタ’);
}else if(counter%3 == 0 && counter%5 == 0){
$(“#txt”).html(‘FizzBuzz’);
}else if(counter%3 == 0){
$(“#txt”).html(‘Fizz’);
}else if(counter%5 == 0){
$(“#txt”).html(‘Buzz’);
}else{
$(“#txt”).html(”);
}
})();
});
</script>
<div id=”num”></div>
<div id=”txt”></div>
</body>
</html>
[/html]
回答時間のめやす
回答時間別に簡単に判定すると、こんな感じかと思います(HM調べ)。回答にかかった時間は、判定ロジックの作成部分にかかった時間のみでOKです。
環境の準備(phpだと白紙のHTML用意など)は時間に含めません。
時間
判定
10分以内
問題ありません
10分~30分
プログラマを仕事にするとちょっと苦労するかも
30分以上、解けなかった
あきらめましょう
スキル判定サービス
もっと自分のスキルを詳しく知りたい!という方に、プログラミングスキルを判定する事ができるサービスをいくつか紹介したいと思います。
Top Coder
Topcoder は、プログラム作成のスキルの確認から競技までを幅広くを行っているサービスです。解いた問題の難易度、数により「rating」を判定され、自分がどれくらいのスキルを持っているかが数字で確認できます。また、他の人の回答を見ることができるので、自分の考え方を広げるチャンスにもなります。
また、プログラミングだけではなくUIやアイコンのデザインコンテストなんかも出題されています(賞金付き!)。
ランク名称
rating
Red
2,200 ~
Yellow
1,500 ~ 2,199
Blue
1,200 ~ 1,499
Green
900 ~ 1,199
Grey
0 ~ 899
White
点数なし(初参加)
このサービスで最高ランクのRed認定された方は「red coder」と呼ばれており、red coderは現在約240名(会員比率0.1%)で、日本人は約10名との事だそうです。目指せRed Coder!
このサービスで使用できる言語は、java,C++,C#,VB,Pythonですが、言語そのもの知識はあまり重要ではなく、他の方の記事によると
for文、if文が分かる
配列が扱える
文字列が扱える
関数がどういうものか分かっている
英語の問題が読める
くらいだそうです。
登録、参加費は無料です。問題については、1人で解くタイプの問題から、ほかの人とトーナメント形式で成果を競うタイプまで様々であり、トーナメントでは成績に応じて賞金ももらえるそうです。お小遣い稼ぎにどうでしょう?
CodeIQ
CodeIQ は、「ITエンジニア向けの実務スキル評価サービス」となっており、プログラミングからHTMLの知識まで、幅の広い範囲が出題されています。
このサイトでは、回答者の点数やランク付けなどは行っていませんが、大きな特徴として、「出題者から回答についてフィードバックがもらえる」事にあります。
ただ問題を解いて正解/不正解を確認するだけではなく、「なぜ、こうしたのか」「こうしたほうがもっとよくなるんじゃないか」という指摘がもらえるのはかなり参考になるかと思います。
リクルートがスポンサーになっているせいか、転職に関する記載がけっこう出てますが興味ない人はスルーしましょう。
まとめ
日本でもサービスがちらほら始まったスキル判定サービスですが、おすすめは他の回答者の回答を見たり、回答について議論ができるサービスとなっているTopCoderです。
英語というハードルはありますが、Web関係は英語をカタカナにしただけの単語が多いのでけっこうなんとかなったりします。ちょっと問題をのぞくだけでもやってみませんか?