どうも、LIG技術研究会です。久しぶりの投稿になります。
今回は、LIG技術研究会のメンバーで「競技プログラミング」に挑戦しました。ふだんコーディングしている中で、ロジックについて考え、悩み、知恵熱を出すことが多々あります。それは自分の脳スペックが足りていないんじゃないか、であればスペック上げればいいじゃないか! ええじゃないか! ということです。
挑戦した結果、とても良いものを得ることができたので、どのように取り組んだかを説明したいと思います!
競技プログラミングとは
競技プログラミングでは、参加者全員に同一の課題が出題され、より早く与えられた要求を満足するプログラムを正確に記述することを競う。
引用元: 競技プログラミング
つまり、プログラミングで解ける問題が出題され、問題を一斉に解き始め、回答するまでの早さを競います。
イメージしづらい方は、謎解きやパズルのようなものと思ってもらえればいいと思います。アルゴリズムや数学的な問題をいかに早くクリアできるかが重要となってきます。実際に競技プログラミングの大会があったり、採用などの試験として用いられることもあります。
活動内容
1時間の活動時間のうち、1つの問題に制限時間30分で挑戦し、残りの30分で画面共有してソースコードを見せながら自分が立てたロジックについて説明します。
説明することで自分の頭の中が整理できたり、逆に理解できていない部分が明確になります。自分のロジックを相手に説明することで伝える力を養ったり、自分の中にはない新たな観点を見出すのが目的です。
感想
各メンバーのコメント
- 他の人のコード見るのが勉強になる
- 人によって変数名ぜんぜん違う
- 同じ答えなのに組み立て方が違う
- 配列操作をよくする
- 説明して自分の頭を整理できるのが良い
- 引っかかった場所が同じで共感したりする(それなー的な)
- もっと良いコードにしてぇなぁって思う
- 時が過ぎるのが早い
- 時間を決めて進めたので、集中して取り組めた
- ロジックを組んだり、配列操作をしたり、リファクタリングしたり、頭をフル回転させて答えに辿り着こうとコードを書いていく過程が楽しかった
- JavaScriptの知識が増えた(主に関数や配列操作)
- 一般的にJavaScriptの変数名はキャメルケースが良いとされてますが、自分は無意識でスネークケースを使ってる場面があることに気付いた
- 良い関数の切り出し方
- 連想配列にした方が良い場面などさまざまな気づきがあり、とても良い機会でした!!
- 自分のコードの無駄をすぐに指摘してもらえるのがありがたい
- 人に見られることが前提になり、読みやすいコードを書く意識が高まった(行数の少なさが正義、ではないなあと)
- 人の頭の中を覗いているような感覚で面白い
- 競争意識で変に緊張する
- ロジック書くのはやっぱり楽しい
実務ではマークアップやアニメーションの実装をする機会はよくあるのですが、競技プログラミングでは配列操作をよくするので、とても新鮮で、勉強になりました。また他の方のコードを見るのは新鮮で「この人天才だな」と思う機会も多くありました! まだまだJavaScript力が足りないなと再認識しました。
おわりに
人のソースコードを見ることはいろいろな発見があります。
ふだんは別々の案件に携わっているメンバーのソースコードを改めて見たり、自分の組み立てたロジックを説明したりするとても新鮮な機会になりました。頭をリフレッシュすることができたんじゃないかと思います。継続は力なり、ということで定期的に行い、お互いに成長できる文化を作っていきたいと思います。
レビューを通してリモートにありがちなコミュニケーション不足も解消できたら棚からぼたもち的なアレですね!
気が向いたら皆さんもぜひ挑戦してみてください!
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。