😊

コーディング練習会に参加してみて

に公開

はじめに

2025年の2月頃から「ソフトウェアエンジニアリング協会」の方々にArai 60を題材にコーディングを見てもらっていました。5月に一通り完了したのでまとめておきます。

練習の目的

参加マニュアルからの引用です。

半年ほどで、世界標準のソフトウェアエンジニアのコーディング能力を身につけることを目指している。言葉によって説明するのは難しいのでいくつか例を挙げる。

- 計算量のような雑な評価ではなくコードの優劣の評価をして適切なものを選択する能力
    - 言語のバージョン間の差異、言語仕様か環境依存かなどを含めて気を配れる能力
    - 自分の外部があるという認識と、外部の状況を調べたことがあるか
        - 他者の発見
    - 様々な概算を用いた見積もり
        - 例えば、計算量は計算時間を見積もる手段であるから計算量だけ見積もられると違和感がある
    - 管理のしやすさ
    - 理解が浅いと読めないコードが出来上がる
        - 可読性とは説明的な変数名をつけることではない
- 手作業でできることをコンピュータにお願いできる
    - 何も見ずに書けるし修正できる能力
    - LeetCode medium を10分前後で解く
    - 入出力と計算量が一致したコードが書けるのでは不十分
    - コードを思ったように変形させられるかの自由度
    - ライブラリーの中身を問われたら短ければ書けて欲しい
    - 他人に読みやすいように書く能力
- 大規模なコードを読解し理解する能力
    - 頭の中でシミュレーターを高速かつ高精度に走らせる能力

合わせてスタートラインに立つためにはどうするのかにも目を通していただけると良いと思います。

具体的な練習方法

標準的な進め方はこちら
私は以下のように取り組みました。

1ステップ目 問題を解く

何も見ないで解きました。5分間手が止まったら答えを見ました。
私はLeetCode、AtCoderなどをあまりやってこなかったので、方針が立たない問題が3割くらいありました。特に序盤はまったく書き方が分かりませんでした。
この練習は問題を解けるようになることが目的なので、1ステップ目はあまり時間をかけすぎないように気をつけました。

2ステップ目 コード、ドキュメントを読む

このステップは他の参加者のコードを読みました。
また、気になった点は積極的にコメントをしました。
使用する関数やライブラリについてのドキュメントもこのタイミングで読みました。

3ステップ目 3回解く

自分が気にいった解法でコードを3回書きました。
自分が理解できているコードはスラスラかけて、理解できていないコードはどこかで詰まるので、詰まったときには2ステップ目に戻りました。

4ステップ目 レビュー

3ステップまでを提出し、講師や他の方々のレビューに対応する。
また、私は他の人へのレビューを積極的に行いました。
他の人へコメントをする際に、自分の感情を言語化することや参考になりそうなドキュメントを貼るようにしていました。

参加した感想

コードを書くことにハードルを感じなくなりました。
「もしこれを手作業でやったら?」と頭の中でロボットが動くイメージをしてからコードに落とし込む、という癖がつきました。コードを書くことが体を動かすようなものと実感しました。
また、コードを書くときの観点が増えました。(計算量はどうか、入力を破壊していないか、数ヶ月後の自分や他の人が読んだときに分かりやすいか、もしエラーが起きたらユーザーを困らせないか、変なデータが入ったらどう動くかなど)

また、「コードを読む」ことも学べました。
講師の方から、

問題が解けることを喜ばないほうが良い
書く能力よりも読む能力が足りていない。
脳内のデバッガーを走らせる

というアドバイスがあり、40問目くらいからは書くことよりも読むことに力を入れていました。
コードの意図や動きを自然言語で説明できるくらい、頭の中で具体的な作業として「絵」が浮かぶくらいまで正確に読む、という感覚を掴むことができました。
この感覚を得てから、コードはただの文字列ではなくなりました。直感的でないコードには気持ち悪さを感じるようになりました。その結果、自分の書く時のミスは1/10くらいになり、一度読んだコードはだいたい再現できるようになりました。

さらに詳しく知りたい方へ

また、対面勉強会が2025年7月6日に予定されています。
協会の活動目的・ソフトェアエンジニアリングに関する説明や模擬面接デモなどがあります。
二回ほど参加させていただいたのですが、とても学べることがあり有意義だったのでおすすめです。
https://x.com/nodchip/status/1935674726892089749
https://x.com/ainsophyao/status/1936188587508445297

Discussion