プログラミングにはセンスが必要なのかもしれない。と思った話

f:id:hrmch-ioii:20180619225033j:plain

@nabeemichi です。

最近はフリーランスとして、いろいろな開発者と開発をすることがあるけれでも、

他の人の作った機能を拡張しようとしたら、死ぬほど拡張しずらく、なんでこんなカテゴライズのしかたで実装してしまったのだろ? という事象でにであった。

その時の僕の素直な感想は、

センスがない。

ってことだ。

センスがないってことはどうゆうことなのだ?

センスがないって言っても何も解決策がでてこないので、少し深掘りすることにする。

プログラミングの機能拡張性を考慮した実装で最も最悪なのが、

機能拡張する可能性を考慮しておいていないことだ。

スピード重視の実装ならそれでもいいかもしれないが、

機能拡張や、細かなピボットによる機能修正なんて絶対起こるから、

ある程度考慮しておかないといけない。

機能拡張性をある程度考慮するということは想像力が必要

である。

今の機能をみて、

少ししたら、こうなるかもなー! だって自分がユーザーだったら、このケースではこんなことしていもん

と想像しながらプログラミングしていくことが必要になる。

もしくは、

これがあるんだったら、こうゆう機能あってもいいよな?

という考えをしながら設計、実装を行う必要がある。つまりは、未来を想定しながら実装するのだ。

未来を想定しながら実装するから抽象化やカテゴライズがうまくいく

のである。

別にDDDとかの開発手法の本なんか読んでも、開発工数が減ったり、プロジェクトがうまくいくわけじゃない。

大事なのは、

自分たちの今の現状(チーム構成とか、技術とか、ビジネス上どうゆう場面であるとか)を把握して、

ちょっと先を考えてプログラミングするということだ。

現状と今後進んでいく目標をもとに、ソースコードを抽象化し、カテゴライズすれば、それなりに実装速度もあがるし、 ピボットしやすくなる。

スピード重視で実装して、いざピボットしようと思ったら、ちょっとしたピボットのハズなのに作り直したほうが早い!

とかいうことも普通にありえる。

で、結局ここで言っているセンスってのはなんなのか?

というと、考えられないってことになる。

現状を把握して、起こりうることを想定して実装できないのがセンスがないということだ。

できればいいや!とか、技術使えればいいや!という考えでプログラミングしてる。

しかも、こういう考えの人は技術に関しては詳しかったり、有名企業で出身だったり。。。

知識や経験があるのに、プロダクトのことやビジネスのことを考えてないから、センスが育たないのだ。

現状を把握して、目標を明確化して、これから起こりうることを想定しないと、良いプログラミングはできるようにならない。

知識や経験があるのにセンスがない。センスがないのに、知識や経験って役に立つのか?

もう、履歴書とか経歴とか見てすごいやつ!とか言って採用することが無意味なこと気づいていただきたい。

大切なのは思考回路であるのだよ。