自分の実装を何度も書き直すことはプログラミング能力を伸ばすのに有効
@nabeemichi です。
プログラミングをしていると、自分で実装したソースコードを何度も実装し直します。 プログラミングをやったこともない新人時代は、先輩からダメ出しを喰らいまくって何度も実装しなおしました。
ちょっとした不具合修正するためにどんだけ時間がかかったことか…
そしてどんだけ自分のソースコードをDeleteで消しまくったことか。 でも、同じ機能に対してプログラミングを消しては書いて、書いては消して、と何度も書き直すことでプログラミングに対する考え方も変わってくるのです。
効率的なプログラミングについて考えるようになる
何度も書き直していると、書き直しのためにDeleteボタンを押すのも面倒になってきますから、どんだけ書かなくていいかを考え始めます。 プログラミングは無駄なロジックがない方が早く動きますし、メンテナンスも楽です。 つまり書かなければ書かないほど、不具合が発生する確立も減り、タイピングする労力も減るのでいいわけです。
一度実装が終わり、期待する結果を出せる機能に対して、何度も書き直しを行っているとこれを考え始めるようになります。 なぜなら、アルゴリズムや期待する結果を出すための実装方法をすでに確立しているため、他のことを考える余裕が生まれるのです。
最初の実装の場合はこうは行きません。
まずは実現できるのか?
本当に期待する結果を出すことができるのか?
というこを考えるのが優先事項になるため、効率とか言ってられません。まずは形にするのが最優先で考えるべきです。
なので時間や思考回路といったリソースを割り当てる対象が、期待値出せるかどうか?にピンどめされます。
ですが、何度も実装しているとリソースを割り当てる対象が変わってきて、効率的な実装に変わるのです。 更に先に進むと、もっとマニアックな場所にリソースを投入し始めるので、切り上げるタイミングは見計らう必要があります。
教科書に書いてあることだけやってても効率的なプログラミングができないことを思い知る。
何度も書き直しをしていると、自分の書いているソースコードを暗記し始めます。 したくてするのではありません。暗記してしまうほど、見たり消したり、同じこと書き直したりしていうる状態になってるのです。
技術書なんかに書いてあることを取り入れて効果的に実装してやる!
と思って、意識高い系プログラマになってしまったときに、一般的に出版されている技術書なんかを見ながら意識高い系実装をしてしまうと、 崩壊する部分が一瞬で頭をよぎり始めます。 なぜなら、暗記してしまっているので気づかないことなどできないのです。
このことにより、
技術書やWEBで見つけた意識高い系の方法は、自分の直面している問題と違うのではないのか?
と考え始めます。 問題や課題が違う場合は、自分がつくったものが崩壊し、効率的なプログラミングを考えていたのに全く効率的にならないということを経験することができます。
小さなことまで気がついて調べるようになる
ある程度余裕が出てきて、それなりに効率化され始めてくると、些細なことも気にし始めます。
例えば、メソッド名や普通の変数は小文字で書くのに、大文字で書く変数があって、なんでなんだろう?
とか、考え始めます。
ある程度余裕が出てくるからこそ、このような小さなことに対しても「なぜ」と考える癖が出てきます。
これをすると、他人が書いたソースコードを修正するときにも、「なぜ、この書き方なんだ?」と疑問を持つことができ、原因を調べるようになります。 これはリグレッションを防いでくれる最も有効的な考え方になるでしょう。
自分のクズさに気がつく
何度も書き直していると、前日までの自分のクズさに気づきます。
昨日の俺はどうやったらこんがクソな実装できるんだ?
と不思議に思うようになります。そして、成長を実感することができて、ディスプレイを見ながら嬉しくなり、ニヤけてしまいます。
「俺って、、、できるようになってるんじゃね?」
こう思ってしまうと、やばいです。たいてい、こうゆうときは誰かに見られてます。向かいの席に座ってる同僚がドン引きした顔をしていること間違いなしです。
プログラミングができるようになるためには効率いい。
どんどん新しい機能を作りまくるというのもいい方法かもしれませんが、
何度も同じ機能に対して書き直すことで、プログラミングスキルの上達は早くなります。 なぜなら、PDCAを回しやすいからです。 効率化するためにはどうするか? 失敗した場合は、前回の実装との比較もしやすい。期待値はすでに固定されているし。
実際、これに似た現象は、大学受験勉強でも起きます。 たくさんの問題集をやるよりも、1冊の問題集を完璧にするほうが成績は伸びます。 同じ問題を説いても必ず溶けるとは限らないし、間違った問題を放置せずに、この間違った問題に対してPDCAを自分で回さないとできるようにならないのです。 間違ったという現象を放置せずに、なぜ間違ったのか?次回はどのように考えれば間違わないのか?を考えて、できるようになることでスキルは伸びます。