プログラミングの入門の書籍や動画での学習が終わったあと、何か作ろうとして挫折して技術力が足りないと思い入門書に戻ってしまうということはよくあることです。
かつての僕がそうでした。
入門書勉強→何か作ろうとする→挫折→入門書→入門書勉強→何か作ろうとする→挫折→入門書を無限ループしてました。
こういった無限ループは独学で始めた人が陥りやすい現象なので、問題だと思ってます。
問題はプログラミングの入門書はプログラミングの構文の勉強であって、プログラミングで問題を解決させるものではないからです。
そこで入門書を終えた人に最適なプログラミングの問題を書いておきます。回答はPHPで書いてます。
この3問がクリアできた人はもう入門書に戻る意味はないです。
プログラミングの入門後第一弾はFizzBuzz
FizzBuzzはよくアメリカのプログラミングのテストで使用されています。
僕も何回か就活のときにこの問題をやりました。
問題・1から100の数字を出力して、3で割り切れる数字の時は数字とFizz出力し、5で割り切れるときは数字とBuzzを出力し、3でも5でも割り切れるときは数字とFizzBuzzと表示しなさい。
プログラミングの基本的な条件分岐の勉強
この問題はfor文を使ったループ処理とif文を使った条件分岐だけで可能です。
プログラミングは主にif文で条件を分岐させたりfor文でループさせたりすることでほとんどできてしまいます。
入門書には関数にするとか、メソッドにするとかクラスがどうたらこうたら書いてると思いますがこの問題においては一切無視して大丈夫です。
後半の問題では使って見ますが、プログラムを綺麗に書くことや、関数やメソッドに分けること、別ファイルにすることなどはプログラミングが複雑になってからで構いません。
初心者はif文とfor文さえ使えれば、ソースコードは汚くともプログラミングはある程度かけます。
FizzBuzzのプログラミング回答
<?php for ($i = 1; $i <= 100; $i++) { if ($i % 3 == 0) { echo 'Fizz'; } if ($i % 5 == 0) { echo 'Buzz'; } if (!($i % 3 == 0) && !($i % 5 == 0)) { echo $i; echo 'Fizz Buzz'; } } ?>
プログラミングの入門後第二弾は閏年判定
FizzBuzzはある程度簡単にクリアしたいところですが、FizzBuzzができたら閏年(うるうどし)の判定の問題をやってみてください。
これもプログラミングの基礎ができていないと解けない問題です。
問題・西暦を入力したときに閏年か平年(閏年以外)か判定するプログラミングを以下の3つの条件をもとに書きなさい。
- 西暦が4で割り切れる年は閏年です。
- ただし、100で割り切れる年の場合は平年である。
- また、400で割り切れる年の場合は閏年である。
複数分岐条件の入ったプログラミング
2月が30日まで年のことを閏年と言いますが、それ以外の年を平年と言います。
条件としては閏年って西暦が4で割り切れて、かつ100で割り切れる年は平年で400で割り切れる年は閏年です。
先に少し解説しておきます、西暦を入れる変数を$yearにして、4で割り切れたときでかつ100で割り切れない数字で400で割り切れるときは閏年ですと書くとこのような条件になります。
if ( $year%4 == 0 && $year%100 != 0 || $year%400 == 0 )
閏年判定のプログラミング回答
<?php if ( $year%4 == 0 && $year%100 != 0 || $year%400 == 0 ) { echo "今年はうるう年です"; } else { echo "今年はうるう年ではありません。"; } ?>
プログラミングの入門後第三弾はバブルソート
最後はバブルソートです。
複数の数字を昇順に並べるという問題です。
この問題には、PHPであれば関数、Javaであればメソッドを使用して書いてみるのもいいかもしれません。
今まで関数やメソッドを使う意味がわからなかったかもしれませんが、コードがスッキリするのでみやすいです。
問題・以下の数字を並べ変えて昇順(数字が小さい順)に並べなさい。
3,2,1,4,15,18,13,99,77,66,1,100,0
バブルソートを考えるにはアルゴリズムを考える力が必要
バブルソートは初心者には難しいです。
なぜ難しいかというと、どうやったら配列の数字を比較できるのかということを考えなくては解けません。
このどの順番に、どうやって処理をするかというのをアルゴリズムといいます。
プログラミングをする時間の多くはアルゴリズムを考える時間と言っても過言ではありません。
プログラミングの上級者になれば頭の中でアルゴリズムを組み立てることができますが、最初はかなり難しいと思います。
そのため各プログラミング言語にはデバッグ関数という関数があります。
PHPの場合var_dumpという関数がありますので、コードを少し書いては動かしてみて変数の中身が合っているか間違っているか少しずつ試しながら書いていきましょう。
バブルソートのプログラミング回答
<?php $arr = array(3,2,1,4,15,18,13,99,77,66,1,100,0); for($i = 0; $i < count($array); $i++) { for($n = 1; $n < count($array); $n++) { if($array[$n-1] > $array[$n]) { $temp = $array[$n]; $array[$n] = $array[$n-1]; $array[$n-1] = $temp; } } } ?>
まとめ
この3問はもっといろいろな書き方がありますので、いろいろ試してみるのは勉強になります。
入門書が終わって、この3問(特に3問目)を書けなかったとしても理解できて次から類似した問題なら解けるようになったら脱入門です。
たまに入門書や入門サイトを見るぐらいで自分でプログラミングを書いていけるはずです。
次は転職なのかクラウドソーシングで仕事を受けるのかいろいろあると思いますが、ポートフォリオの作成です。
ではではよきエンジニアライフを送ってください!