インターン備忘録~その2~
tambourine(タンバリン)1dayインターン
先日書いた、インターン備忘録~その1~『tambourine(タンバリン)24Hインターン』の同企業さんが行っていた1dayインターンにも参加したので、そのお話です。
最近、ブログを書くとそれなりに見てくれていることに味を占めて、ここぞとばかりに書くことにハマっています。
内容は、1dayインターンの内容にまつわる話です。
企業さんの話やtambourine(タンバリン)24Hインターンの話はこちら
当日の流れ
インターンは夕方からのスタートで、最初の30分ぐらいは説明で50分作業+10分休憩を3セット、最後に成果発表とパーティー(?)の合計4時間」の構成になっていました。
インターンには約15人ほど参加していて、基本的に2~3年生の専門学生や大学生で、中には大阪から参加しに来たという方もいらっしゃいました。
ちなみに、メンター方は3人ほどいらっしゃいました。
Ready…?
今回のインターンは5~6人のグループに分かれて『モブプログラミング(mob programming)』と呼ばれるチーム開発の方法で行いました。
『モブプログラミング』とは、2012年頃にHunter Industies社が始めた開発方法で、1台のPCをモニター等に繋げて一人が手を動かしてコードを作成して、残りの人がそのコードに対してアドバイスをしたり、調べ事をしていく方法です。
自分の感じた『モブプログラミング』のメリット・デメリットは、
- メリット
1.フロー効率向上
2.情報共有、共通認識の形成 - デメリット
1.単純作業による時間効率
2.複数人による意思決定の問題
3.メンバーの出入りによる作業効率の悪さ
と考えました。
Let's インターン
いざ、4~5人の3グループに分かれてスタートです。今回は、『ボウリングのスコアを計算する』コードを作成しました。(ボウリングのスコア計算は自分で調べてみてください)
今回、話し合って参加者の得意な人が非常に多かった"JavaScript"で書きました。初めてでわけわかんなかった......でも、言語が違えど基本の「for文」「if文」のアルゴリズムが出来れば、あとはJSの書ける人に託せば完成できます。
自分の考えた最初のアプローチは、全て必要なとこをリスト(配列)にすれば行けるなーと軽く考えていました。
# python throw_ball = [] score = [] # 入力部 for i in range(1, 11): if i <= 9: for j in range(1, 3): x = input() a = int(x) if a != 10: y = input() b = int(y) else: b = -1 throw_ball.append([a, b]) if i == 10: for j in range(1, 4): x = input() a = int(x) y = input() b = int(y) if x+y >= 10: z = input() c = int(z) else: z = 0 throw_ball.append([a, b, c]) # 計算部 score_x = 0 strike = -1 spare = 10 for i in range(0, 10): if throw_ball.iloc[i, 1] != strike or throw_ball.iloc[i, 0] + throw_ball.iloc[i, 1] != spare: score_x += throw_ball.iloc[i, 0] + throw_ball.iloc[i, 1] elif throw_ball.iloc[i, 1] == strike and throw_ball.iloc[i+1, 1] != strike: score_x += throw_ball.iloc[i, 0] + throw_ball.iloc[i+1, 0] + throw_ball.iloc[i+1, 1] elif throw_ball.iloc[i, 1] == strike and throw_ball.iloc[i+1, 1] == strike: score_x += throw_ball.iloc[i, 0] + throw_ball.iloc[i+1, 0] + throw_ball.iloc[i+2, 0] elif throw_ball.iloc[i, 0] + throw_ball.iloc[i, 1] == spare: score_x += throw_ball.iloc[i, 0] + throw_ball.iloc[i, 1] + throw_ball.iloc[i+1, 0] score.append(score_x) print(score.iloc[i])
といった感じに頭の中で描いてましたが、もちろん周りを気にせず一人で作るのはこのインターンの意図するところではないので、妥協点を探りながら作っていきました。(上記のコードはストライクの連続等を加味していません。不完全のものです。)最初の50分、自分はアドバイス側だったので、アドバイスしつつ順調に仕上がっていきました。
しかし、最初の10分休憩で最大の難所が来ました。
グループ移動です。先ほど挙げたデメリットの1つですが、実際の現場ではない話じゃありません。ランダムで3つあったグループのうちの残り2グループの片方に移動になりました。軽く自己紹介を済まし、2回目の50分の作業スタートです。
ヤバい。正直、移動した先の班のコードを見て思った感想がこれでした。ストライク、スペアの判定に"flag"を用いて割と複雑な処理になっていました。そのため、まず理解に軽く時間を取られてしまいました。
残り時間は70分程度、上記のような自分があらかじめ考えていたコードに書き換えれば完成も余裕で間に合います。が、それをしてしまっては、モブプログラミングの意味がありません。現時点までに前の人たちが書いてくれたコードに手を加え、活かしていくのが課題です。しかし、うまく活かそうとしても自分の考えたコードが脳内をちらついてしまい、切り替えが難しかったです。
結果から言うと他の2班は完成したものの、その移動後の僕の班だけコードが完成しませんでした。印象としては、ストライクの連続したときの処理など、先のことを考えすぎてより複雑なコードになってしまい、自分で自分の首を絞めた感じがしました。あの場にいた班のメンバーは皆さんとても優秀な方でしたが、それゆえにいい妥協点が見つからず、一進一退を繰り返してしまった気がします。(あくまで自分の感想です)
感想
自分は、1年の夏休みにUnityで2Dシューティングゲーム(C#)を作り、12月頃にはサイトからスクレイピングした内容をマルコフ連鎖で文章生成してツイートするTwitterbotを作成しました。それは、つまずいたら意見を聞いたりしたものの基本は1人での製作でした。そのため、今回のような『モブプログラミング』によるチーム開発の難しさを体験することは初めてでした。でも、実際の現場はこのようなチーム開発をする機会は少なくないので、次やるときには今回の反省を踏まえたうえで、より効率よく作業ができればいいなと思いました。
以下に今回のインターンで思ったことを箇条書きにして、この記事を締めたいと思います。
良かった点
- めったにできないチーム開発を体験できた。
- コードを完成するという共通目的があったため、初対面でも打ち解けるのが早かった。
- 課題の難易度がちょうどいいものだった。プログラミングに触れたことある人ならもってこい。
- 最後に一緒にピザを食べるパーティー(?)みたいのがあって、そこで改めて今回参加した人たちやメンターの方とお話ができる。
思ったこと
こんな拙い文章の備忘録にもかかわらず、読んでくださった方、ありがとうございました。
もっと詳しく知りたい等意見ございましたら、twitterからDMくださると嬉しいです。
今回のインターン先の『tambourine(タンバリン)』さん
3/26(木)にオンライン説明会の開催を予定しているそうです。興味のある方は是非!!!!!!
オンライン説明会 | 人の役に立つ技術を追求したい新卒エンジニア大募集!
前回のブログ
うp主