4
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

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

はじめに

チームに入ってきた新人が、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での初心者教育のよかった点

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

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

おわりに

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
4
Help us understand the problem. What are the problem?