はじめに
チームに入ってきた新人が、Swift/iOS開発をN予備校などでやったものの、
関数もかけない状況というのが判明しました。
AtcoderでSwiftを練習させてみたので振り返りです。
訓練のフォーマット
- A問題を5問とく。B問題を1問とく。
- 全部完答したら、ACした他の人の回答をみる。初めてみるAPIを調べる。
- 自チームのプロジェクトでそのAPIを全文検索して、何をしているか議論してみる。
A問題を5問とく、B問題を1問とく
A問題を説いていくことで、程よい達成感を得てもらい、慣れたらB問題で少し考える問題にも挑戦してもらいます。
問題を説いてSwiftをガシガシ書いてもらいたいというフェーズです。
やってない問題はAtCoder Problemsで確認します。
全部完答したら、ACした他の人の回答をみる。初めてみるAPIを調べる。
他の人の回答が見られるのは、AtCoderの良さの1つだと思います。
提出結果の全ての提出からSwift
を選択して見ていきます。(Swiftは人少ない!w)
自分の書いた答えと、他の人が書いたコードを比べてみてもらいます。
その中で、自分の見たことのないAPIを調べてもらいます。(僕が説明したものもあります)
新人が見たことのないやつというのは、map
やfilter
、reduce
などです。
自チームのプロジェクトでそのAPIを全文検索して、何をしているか議論してみる。
学んだAPIがちゃんとプロジェクトでも使われているよ!ということを知ってもらうために検索してもらいました。
使い方やコードリーディングの練習のためです。
ここはどのように使われているかなど解説したり議論しました。
AtCoderでの落とし穴
Swiftが最初のA - Welcome to AtCoderという問題の例にありません!
初心者が解くのは難しいので、以下のコードを教えてあげる必要があります。
[AtCoder]Swiftでも競プロがしたい! - Qiitaより引用
// 標準入力からIntを読み込む
let a = Int(readLine()!)!
// 標準入力からInt配列を読み込む
let bc = readLine()!.split(separator: " ").map { Int($0)! }
// 標準入力から文字列を読み込む
let s = readLine()!
// bcは配列なので、bc[0]にb bc[1]にcが入っている
let sum = a + bc[0] + bc[1]
// スペース区切りで出力
print(sum, s)
AtCoderでの初心者教育のよかった点
- ちょうどいい問題の大きさで、プログラミングで問題を解く楽しさがわかる
- 他の人のコードを見て学べる
- 業務外でも勉強するきっかけになる (ちゃんと勉強しているらしい!)
- 仕様を読んで、実装する訓練になる
実務でも重要な点が詰まってますね!
おわりに
初心者がプログラミングの教本や入門動画を見ただけだと、いざ書いてみると全くできないことが多いと思います。
競技プログラミングでは、読んで、理解して、プログラムという流れが細かいリズムで体験できるので、プログラミングに慣れるのに適していると感じました。