ソフトウェアエンジニアリング協会のコーディング練習会[1,2]に参加しました。この活動の周知のために感想を書きます。
公式には以下のように説明されています[2]。
ソフトウェアエンジニアは、専門家集団であり、一般に専門家集団には共通基盤となる常識がある。この常識を身につければ専門家集団の成員として認められる。つまり、「知識、反応、行動、感覚、判断」を専門家の常識に合わせることをこの会では目標としている。
ソフトウェアエンジニアが働く上で当然身につけているであろう知識に加えて、仕事を行う上での考え方や感覚を身につけることを目指しています。
Arai60を解き、他の参加者の回答や関連する知識を調べ、他の参加者や講師の方からのコードレビューを受ける、という流れで進めました。並行して、他の参加者のコードレビューも行いました。 また、AIと書いたコードについて議論することもしました。
提示されている進め方では、何度か繰り返し書き、時間を測って書くことが推奨されています。しかし、自分は写経の有無や取り組み時間の記録は曖昧で、取り組み方が雑だった自覚があります。
以下のことを学ぶことができました。
そもそもエンジニアリング(工学)の目的は
事物や環境の構築を通じて価値を届けること
として説明されています[3]。つまり、エンジニアリングの目的は価値を提供することであり、コードを書くこと自体はその手段にすぎません。
その観点に立つと、コードの良し悪しは入出力の一致や計算量だけでは判断できません。将来そのコードを読む同僚や自分が、意図を自然に理解できるかどうかが重要です。
以前までは、自分だけが使うコードを書く場面が多かったこともあり、アルゴリズムには注意していても、冗長なロジックや変数名には無頓着でした。今回の練習会を通じて、仮想的な読み手を意識してコードを書くようになりました。
コードを読んで理解する能力や速度が、改善したように感じます。もともと他人の書いたコードを読むことに苦手意識があり、その改善が練習会に参加した目的の一つでした。 短く、完成されているとは限らない他人のコードを読むことは、良い訓練になりました。 AIがコードを大量に生成できるようになった現在、コードを読む能力は、書く能力以上に重要になっていくと個人的に考えています。まだ能力不足を自覚しているため、今後も訓練を続けたいです。
以前は思いついたままにコードを書くことが多かったですが、目的を考え、複数の選択肢から選んで書く(書こうとする)ようになりました。どの選択肢にも一長一短があり、目的に照らして判断することの重要性を学びました。 自分に見えている選択肢はまだ少ないですが、AIも活用しながら、徐々に自分で判断できる範囲を広げていきたいです。
練習会を通して、基礎的なアルゴリズムや知識に改めて触れることができました。見たことがある内容でも、自分で空で書けないものが多く、身についていないんだと感じました。 個別の知識量ではAIに及ばないとしても、AIの出力を評価するためには基礎的な理解が必要です。今後も基礎事項の習得には継続して取り組みたいです。
最近は分からないことがあるとAIに聞いておしまい、となりがちでしたが、ドキュメントやソースコードも確認するようになりました。実際にAIの出力が間違っている場合もあり、必要に応じて一次情報に近い情報を参照する習慣を持ちたいです。
今後も問題の難易度を上げるなどして、コーディング練習には継続的に取り組みたいと思っています。 同時に、問題を解いたり、教科書的な知識を身につけたりするだけではなく、自分が面白いと思う感情を大切にし、興味を持ったものを自分でとことん調べる姿勢を持ちたいです。
また、AIによってエンジニアに求められる能力は変化していくはずです。AIツールを積極的に使いつつ、AIが発展しても必要になる能力は何かを意識して練習に取り組もうと思います。
[3]のスライドはとても面白かったです。本筋と外れたことですが「すごいとありがとうは違う」という言葉が印象に残りました。自分自身が目指してきたのが「すごい」であってその方向に進むべきではないことをようやく理解できてきた気がします。
[1] ソフトウェアエンジニアリング協会