diff --git "a/\347\267\264\347\277\222\343\201\256\345\212\271\346\236\234.md" "b/\347\267\264\347\277\222\343\201\256\345\212\271\346\236\234.md" new file mode 100644 index 0000000..2f93185 --- /dev/null +++ "b/\347\267\264\347\277\222\343\201\256\345\212\271\346\236\234.md" @@ -0,0 +1,31 @@ +## コーディング練習をはじめてからの変化 + +LeetCodeのarai60(リンク貼る)を解き、ソフトウェアエンジニアリング協会(リンク貼る)の方々に添削していただいています。 + +現在40問ほど進めており、まだ完成しておらず未熟なところもありますが、今までのところ主にどのような変化が起きているかを書きたいと思っています。 + +コーディング練習の具体的なやり方については、以下(hayashiさんのリンク貼る)にとても良くまとまっている記事がありますので、ここでは割愛させていただきます。 + +### 1, コードを読む時、処理を頭の中できちんと追えるようになった + +以前は、コードを読む時に適当に読み飛ばしたりすることが多かったですが、きちんと頭の中で処理を追えるようになってきました。実際に実行する前に頭で処理を追って、「今のままだとここでエラーが出るな」と気付けることも多くなってきました。 + +これは、協会内のDiscordサーバーでお互いのコードレビューをすることによっても鍛えられたと思っています(コードレビューを積極的にすることが奨励されています)。他の人のコードを見て、「自分ならこう書くな」「このコードは好まないな」「このコードは良いな」という、いろんな選択肢が以前より多く思い浮かぶようになりました。 + +サーバー内では、みなさまそれぞれいろんな言語で実装されてます。自分はPythonしか経験がなくGo言語などは最初全然読めなかったですが、知らない言語でも徐々に処理が追えるようになってきました。 + +### 2, 大規模なコードベースも少しずつ読めるようになった + +この練習の目標として、入出力が一致するコードを書けるようになることはほんの一部で、大規模なコードベースを読んで、目的に沿って変更したりする能力を身につけることのほうが重要だと思っています(odaさんのスライドのリンク)。適宜CPythonのソースコードを読むことが推奨されており、以前より大規模なソースコードに対して怯まず読めるようになりました。 + +協会のサーバーで、以前Pythonのlong型の足し算がどのように行われているかという話題になりました。こちらについて、CPythonのコードの調査を自分もやってみたところ、30-40分ほどでできるようになりました。(講師陣の方は15分ほどなので、もう少し速くないといけないですが) + +### 3. 専門家がするような動作が徐々にできるようになった + +ソフトウェアエンジニアリングの専門家と同じような動作をすることが、この練習の大きな目標の一つです。 + +まず、コードをみた時の反応をある程度の範囲(専門家の範囲)に収めるというのが重要とされています。この目標達成のため、コードにつくコメントを予測してみることが推奨されています。自分は、他の方のレビューをする時も、GitHubのコメントを隠す機能を使ってコメントを予測していますが、以前よりも他の方と気になることが一致することが多くなったと思っています。ここは関数化できるな、とか、これは読みにくいな、といった反応が以前よりも一致していると感じています。 + +また、ドキュメントを頻繁に見るのも専門家の動作の一つなので、これも普段の練習で推奨されています。普段の業務でも(ソフトウェアエンジニアではないのですごくコードを書くわけではないのですが)、ドキュメントを見ないとなんか不安だなと思うようになってきました。 + +これらは、このスライド(小田さんのスライドのリンク)にあるように、ある種の「反応」だと思っていて、「無意識に、自然とこうしたくなる」という欲求が前より強まったと感じています。