君たちはどんなシゴトがしたいか

新卒エンジニアの妄想日記

「Pythonで自動化」ハッカソンの学び

こんにちは、

 

昨日、おとといの2日間、ハッカソンに出場してInstagramのフォロワーを自動で取得するプログラムをチーム開発したのでまとめます。

 

最近は就活が忙しくてイベントに参加できていませんでしたが、久しぶりにコードを書きたい!ということで出場を決めました。4人1チームで組んで、合計8組の小規模な学内ハッカソンでした。チームマッチングがランダムで、今まで交流がなかった学生と知り合えたのがよかったかな。

 

肝心の成果物の方は、残念ながら期間内の完成ならず。完成率は60%くらいでした。

 

開発したプログラムは説明がややこしいので省きます笑

 

開発の反省点・改善点を列挙します。

  • 開発期間を考慮した上での開発アイデアの選定
  • 開発アイデアの共有(要件定義)
  • チームメンバーの技術スタックの共有・人員配置
  • 開発スケジュールが抽象度高すぎ
  • 成果物プレゼンを人に丸投げしたこと

 

まず開発アイデアの選定に時を遡りましょう。2日間という非常に短い期間で成果物を完成させなければいけないことを重要視するべきでした。他のグループは自分たちよりも少しスケールが小さい開発物が多かったので、彼らと同じようにすれば時間内に完成できたかもしれません。

そして要件定義が甘かった。開発を進める中で、開発してるものにズレが生まれていました。詳細な要件が全員で共有できていなかった。これはいい教訓になりました。作ろうとしてるものはしっかりチームで共有する。ユーザーから見たUIの視点、プログラムからの視点、UMLの使い方を学んでいく必要がありそう。というか要件定義をしっかり学ぶべきだな。

 

チームメンバーの技術スタックに応じた人員配置も改善できる点です。

今回はPythonでの開発ということで、言語未経験のメンバーもいれば、開発経験があるメンバーもいました。そしてロジックが得意なメンバーもいれば、UI作成が強い学生もいました。これらの得意不得意は開発を進めて、初めて分かってきましたが、開発の前に技術スタックの共有を詳細に行なっておけば、もっとスムーズに開発できたかもしれません。

具体的に何を共有すべきか、次のように考察します。触れたことのある言語・ワークフレーム・開発ツール(GitHub等)、要件定義に沿ったキャパシティ・達成自信度です。

開発に移る前にこれらのことを共有しておけば、仕事の振り方も改善できたと感じます。

 

上記の人員配置ともつながる点ですが、開発スケジュール管理も甘かったですね。どれだけ多くの時間を開発・プレゼン準備に割くのか、開発時間のうちどれだけ環境設定・ロジック開発・UI開発に割くのか、これらを詳細に決める必要があると感じました。開発を進める中で、実装の難しいロジックがあったり、環境設定が難解で一部PCでプログラムが作動しないことがありました。どちらの例も時間内に結局解決せずPlan Bで行きました。Plan Bがあるものについては時間をかけすぎずに、タイミングを見計らって諦めるのも重要でした。時間をかけても解決できる見通しがなければ、時間の浪費になってしまいます。しかし、開発途中で見切るをつけるのは難しく、メンバーによっては(自分にも起こり得る)1つの課題に執着してしまうこともあります。これを防ぐために事前にある程度、何にどれくらい時間を割くのかを決めておくと冷静に開発を進められます

 

最後の(私の個人的な)反省はプレゼン準備をチームメンバーに丸投げしたことです。

ハッカソンにもよると思いますが、必ずしも成果物がきっちり作れてることが成功と見なされる訳でもありません。開発期間終了後の成果物発表で、開発のビジョン、現在の課題や今後の改善点、展望を示れば未完成でも入賞することは大いにあり得ます。

今回の開発で私はコードを書く役割が非常に大きかったです。開発に時間を取られてチーム全体に気を配るのを忘れていた(というか投げやりになっていた)、できてないであろうに、多分どうにかなっているだろうと楽観的観測をした。ハッカソンでは多くの場合時間との勝負で、多くのチームは開発に時間を掛けようとして、プレゼン準備を一時的に手の空いたメンバーに投げたり、成果物提出の間際になって作り出したりします。しかし、観客が長時間目にするのはプロダクトではなくプレゼンテーションであり、開発物本体だけでなく、それが生まれた理由、文脈を大事にします。プレゼンを無碍にすることは、起承転結の結だけ見せてるのと一緒だな〜と今回プレゼンしてて思いました笑。盛り上がりがない。これからは要件定義の段階でプレゼンを作り始めるか、プレゼン作成の時間もしっかりスケジュールに入れる必要があると気づきました。

 

ここまで改善点ばっかり書いてきましたが、よかった点ももちろんありました。

Webスクレイピングにちょっと強くなった。Instagramのページから情報を取得したんですが、Instagramってすごいスクレイピング対策されているんです!

スクレイピング初心者なのに、いきなり難易度高めのスクレイピングをしたので結構鍛えられたと感じました。

もう1つのよかった点はチーム開発する上でのGitHub力が向上したこと。チーム開発の経験はいくつかありますが、これまではPCを横に並べて開発したり、Live Shareでコーディングしたりと、GitHubの活用を避けてきました(複雑で苦手意識があった)。今回はチーム開発経験豊富な仲間がいたのでWikiやプルリク、Mainブランチと他ブランチの関係、イシューを使った開発など、多くのことを学ぶことができました。絶賛開発中の別のチームプロジェクトでもすぐに活用できることを学べたのが非常によかったです。

 

てことで、今日は以上!!