LoginSignup
14
4

More than 3 years have passed since last update.

AtCoder過去問を使って新人にSwiftを練習させてみると良かった

Last updated at Posted at 2020-12-08

はじめに

チームに入ってきた新人が、Swift/iOS開発をN予備校などでやったものの、
関数もかけない状況というのが判明しました。

AtcoderでSwiftを練習させてみたので振り返りです。

訓練のフォーマット

  1. A問題を5問とく。B問題を1問とく。
  2. 全部完答したら、ACした他の人の回答をみる。初めてみるAPIを調べる。
  3. 自チームのプロジェクトでそのAPIを全文検索して、何をしているか議論してみる。

A問題を5問とく、B問題を1問とく

A問題を説いていくことで、程よい達成感を得てもらい、慣れたらB問題で少し考える問題にも挑戦してもらいます。

問題を説いてSwiftをガシガシ書いてもらいたいというフェーズです。
やってない問題はAtCoder Problemsで確認します。

全部完答したら、ACした他の人の回答をみる。初めてみるAPIを調べる。

他の人の回答が見られるのは、AtCoderの良さの1つだと思います。
提出結果の全ての提出からSwiftを選択して見ていきます。(Swiftは人少ない!w) 

スクリーンショット 2020-12-08 20.26.46.png

自分の書いた答えと、他の人が書いたコードを比べてみてもらいます。

その中で、自分の見たことのないAPIを調べてもらいます。(僕が説明したものもあります)
新人が見たことのないやつというのは、mapfilterreduceなどです。

自チームのプロジェクトでその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での初心者教育のよかった点

  • ちょうどいい問題の大きさで、プログラミングで問題を解く楽しさがわかる
  • 他の人のコードを見て学べる
  • 業務外でも勉強するきっかけになる (ちゃんと勉強しているらしい!)
  • 仕様を読んで、実装する訓練になる

実務でも重要な点が詰まってますね!

おわりに

初心者がプログラミングの教本や入門動画を見ただけだと、いざ書いてみると全くできないことが多いと思います。

競技プログラミングでは、読んで、理解して、プログラムという流れが細かいリズムで体験できるので、プログラミングに慣れるのに適していると感じました。

14
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
4