こころがホッコリー

ただイカしたRubyistになりたい人生だった。

paizaで提出後にコードレビューをすることで、学びを増幅させる

paizaという、与えらえた問題に対してコードを書き、提出時にテストをしてくれるサービスがあります。
(本当は、コードを書いて提出し、それをもって企業にエントリーできるようになるサービスですが、もはや私の認識は上記の通りです)

paiza.jp

これ、ものすごい当たり前のことを書いているようですが、
コードを書いた後の振り返りって、すごく大事なんです。
paizaは時間制限がありますから、ラピッドプロトタイピング的な、
多少は可読性や効率を落としたコードを書いてしまいがちです。
なぜなら、私がウロウロしているランクぐらいまでなら、それでも100点を取れるためです。

ですが、提出して点数を取るだけでいいんでしょうか?
せっかく、貴重な時間を割いてコードを書いているわけですから、
もう少しだけ時間を割いて、学びを増幅させませんか?

提出後に自分で、自分のコードのレビューを行う

提出後、自分のコードをじっくりとレビューしてみましょう。
本当はもっと短く書けるところや、既存の関数があるのに冗長な書き方をしているところがあるはずです。

文章だけではフワフワしているので、実際にコードで比較してみましょう。
paizaの問題でありがちな、標準入力で1行で書かれた任意のパラメータ二つを格納する、というコードを考えてみます。
最初の提出時は、こんなコードになっているかもしれません。

params = gets.chomp
array  = params.split(" ")
m = array[0].to_i
n = array[1].to_i
puts m
puts n

なんか長いな〜、愚直だな〜 という印象を受けます。
そこで、Rubyの公式ドキュメントを徘徊していると、

  • どうも map というメソッドと、それを短く書く記法 (&:) が存在するらしい......
  • 他の言語でも多重代入という仕組みがあり、これを使えば複数パラメータの代入を1行で書けるかもしれない

ということに気がつくかもしれません。
セルフコードレビューを経て、リファクタリングされた後のコードは下記の通りです。

m, n = gets.chomp.split.map(&:to_i)
puts m
puts n

だいぶ短くなりましたね。

こんな感じで、paizaのように時間に追われてコードを書くことがあっても、
後でコードの振り返りを行うことで、学びを更に深めることができます。
どんな些細なことでも、積み上げれば力になる。 私はそう思っています。

こんな利用の仕方もできる paiza や、CodeIQ というサービスは、本当に素敵だなと思います。
(※ ここのところ、paiza絡みの記事が続いていますが、私はpaizaの回し者ではありません)