タグ

ブックマーク / blog.sigbus.info (4)

  • ダメなコードを改造しなくてはいけなくなったときは、ダメさを片っ端から潰していくしかない

    仕事としてプログラミングをしていると、ときどき、どう見てもダメなコードを扱わないといけないことがある。そういうコードでも動いている以上はそれなりの価値を提供しているわけだけど、ときどき触るのすら嫌悪感を感じるようなものがある。 なぜ嫌悪感を感じるのかといえば、自分で最低限だと思っている想定すら守られていないからだ。常識の通じない人たちの書いたコードには身の毛もよだつような何かがある。 コーディングスタイルが統一されていない インデントが狂っている 到達不能なデッドコードがたくさんある 無意味なコメントやコメントアウトされたコードがある コメントの文章が文章としておかしい コピペの繰り返しがたくさんある ネストが恐ろしく深い 関数が絶望的に長い 無意味に複雑 こういったコードを触らなくてはいけなくなったとき、そのままで編集するのはかなり難しい。コードの内容以前に、不自然な部分でいちいち引っか

  • コードを削除したら喜ぶべき。知らない人がみたら意味不明なコードが残っていませんか?

    昔はよくわかっていなくて、今は身にしみてよくわかっていることの一つは、追加した行数がマイナスのパッチは素晴らしいということだ。コードは削除できるなら消したいし、自分の書いたコードであれ、誰かが消してくれたらとてもよいことだと思う。 昔はがんばって書いたコードはなるべく「活用」したいと思っていた。活用というのはつまり、捨てるのはなんとなくもったいないから、そのコードをなるべく消さずにすませたいということだ。 しかし無理にコードを生かしておくことの意味など何もない。 コードの履歴などは全部いったん置いておいて、ある時点のソースコードを初めて見たものとしよう。そのソースコードが、そのプログラムが実装するべき機能を実装するために十分かつ最小限のコードであるのと、十分かつ最小限のコードに加えて何かよくわからないコードのどちらかであるとしたら、どちらのほうがいいコードだと思うだろうか? 前者のほうがい

  • どのようにして僕はプログラマになったのか思い出してみた

    一番最初に僕がプログラミングをしてみたいと思ったのはコンピュータを手にする前からだったと思う。 あるとき小学校高学年の頃に読んでいた子供向けの雑誌の巻末に、巡回セールスマン問題のような懸賞問題が載っていて、最高得点を出した読者に景品が当たるなどというものをみて、それを手でひたすら試行していた。それを見た親が「これはコンピュータでバーッと計算するんじゃないか」みたいなことを言った。そのとき、そうか、こういうのはコンピュータを使えば手でやらなくていいんだ、機械的にパターンを試していくだけなんだからな、と思ったのだった。 その懸賞には相当時間を費やしたのだけど、結局景品はもらえなかった。当然だれかがプログラムを書いて、僕の手で求めた解よりよい解を一瞬で見つけてしまったんだろう(しかし僕は今でも、人間がやるかコンピュータでやるか微妙なくらいの問題をひたすら手でやるのはなぜかかなり好きではある)。

  • すべてのソースコードが手元にあるのに不要な抽象化を行うのはよくない

    「よい」とされているプログラミング手法のひとつに差分プログラミングがある。クラスを継承して親クラスとの差分だけのコードを書けば、親ですでに実装されている機能はそのまま使えて、かつカスタマイズもできるというやつだ。 たとえばGUIのボタンをカスタマイズしてマウスオーバーするとなにかちょっと特殊なことを行うボタンを作りたいとしたら、ボタンクラスを継承して、マウスオーバーのイベントハンドラをちょいちょいとカスタマイズしてやればよい。差分プログラミングは大変素直でよいプログラミング手法のような感じがする。 よいのはよいと思う。 しかしこういういい例だけをみてそれをどこでも真似しようと思ってしまうと、不必要な抽象化を積み重ねる困ったプログラマになってしまう(そういう人は結構たくさんいる)。自分でプログラムを書く場合には、よくできたクラスライブラリやフレームワークをお手にして抽象化を行うのは、ほとん

    kirine
    kirine 2014/12/29
  • 1