最終更新時刻:2008年7月7日(月) 7時00分

1

カットアンドペーストでプログラミングするやつらを「ぺたぺただん」と呼ぼう

公開日時:
2007/01/04 17:59
著者:
danjo

最近、仕事の関係で2つのJavaのコードをさわった。同じような目的の処理に対して、
全く違うアプローチをとっている点が面白かったので感想と提案をしてみる。

プログラムは両方ともバッチ処理で、データベースとファイルの間で入出力を行う

ためのものだった。私はそれぞれのプログラムの検収と機能追加を行った。

プログラムの概要は以下。

  • DBとファイルの間でデータの入出力を行う
  • 類似した処理が複数ある(対象テーブルが違うが同じような処理が必要)
  • Javaで実装

実装に要求される詳細な用件は違うものの、基本的なロジックは同じものになる。

このプログラムに対して、2人の技術者が開発を担当した。

技術者の特徴は以下。

  1. 技術者A
    • プログラム開発の経験豊富
    • 技術的なトピックについての知識欲旺盛
    • スクラッチから作成
  2. 技術者B
    • プログラム開発の経験少ない
    • 技術的なバックグラウンドはなし
    • 別の開発者Cが以前作成したプログラムを流用して作成

上記技術者A、Bが作成したプログラムX、Yの概要は以下。

  1. バッチX
    • プログラム内の機能別に適切に設計されたクラス設計
    • SQLはJavaソースとは別の定義ファイルに記述
    • DBアクセスについてはDAO用の数クラス、数メソッドのみを作成
      (JavassistによりDAOクラスのメソッド呼び出しをフックし、メソッド名から定義ファイル内のSQLを取得する)
    • レコード内容は対象テーブルの定義によらず同一クラスのインスタンスに格納
      (BeanUtilsのLazyDynaBeanを使用)
  2. バッチY
    • 1クラス、mainメソッドのみで実装

      (全対象テーブルを一発処理)
    • 同じ処理の繰り返しをJavaコードの繰り返しで記述
    • SQLはコード内で固定で記述。
      (文字列連結でSQLを組んでいるため、SQLの検証も面倒)

検収の段階では、X,Yとも機能に対する要求は満たしているのでその点で差はないと思う。

(実は開発範囲が広いXの方がバグ総数は多かった)

次に私がX,Yに対して機能追加を行ったのだが、Xの内容は勉強にもなるので読んでいくのが楽しかった。

そしてYのプログラムはもう見たくないと思った。

さて、今回提案したいのは、バッチYのようなプログラムを私達はもう見たくないので、それを減らしていくために社会的にマイナス方向のインセンティブをあたえていくのがいいんじゃないかということだ。

手段としては、特定のコーディングパターンに対してカッコわるい名前づけを行うことはどうだろうか。

(例:暴走族→珍走団)

上記のバッチYの例でいえば、「同じ処理の繰り返しをコードの繰り返しで記述」というのはカットアンドペーストで

プログラムを作ったのだろう。そういうプログラムを書いたプログラマを「ぺたぺただん」と呼ぼう。

きっと彼らは次の開発のときはぺたぺたしないはずだ。

※このエントリは CNET Japan ブロガーにより投稿されたものです。シーネットネットワークスジャパン および CNET Japan 編集部の見解・意向を示すものではありません。

このエントリーへのコメント

7

haruomitroiさんこんにちは。よろしくお願いします。

社内標準化という話ですと、それが行えていないのは私の力量不足ですね。恐縮です。

ところで、haruomiさん場合はそのような事象はありましたでしょうか。差し支えなければ、良い実装を社内標準にこぎつけるまでのプロセスについて教えていただければと思います。

  danjo on 2007/05/30

6

プログラマXさんの仕事にしても、「ものすごく」高度な内容ではないように思うのですが、なぜそれがさっさと標準化と研修の対象にされてしまわないのか、それが「名人芸」のように思われているという現状が貧しいと思います。

  haruomi on 2007/05/30

5

danjoさん
ご回答ありがとうございます。

なるほど。理解しました。
まったく反対の状況を経験したのでブログ内の状況を正しいとは思えず、聞いてみました。
立場によって見方は大きくかわると思いますし、言語によっても違います。
今回はバグをつぶすことに主眼を置いた内容であれば、可読性を重視されるべきでしょう。
バグは作ったもっとも理解しているはずですので、作った側の主張も聞いてみるともっと理解が深まりそうですね。

ソースコードのコピーに関して言わせていただくと、そそまま動くコードを使えるような内容であればそれほど問題ないんじゃないでしょうか?

問題はコピー&ペーストでできてしまうことにあると思いますが、そこは設計者に聞いてみたいところですね。

  troi on 2007/01/31

4

troiさんこんにちは。今後ともよろしくお願いします。

>どんなに優秀でもバグをつくったら仕事にならないと思いますが、いかがでしょう?
バグの内容や仕事の内容にもよるのかなと思います。
今回の件では私は検収する立場でしたので、リリースまでにバグを潰せれば問題はないので
バグのありなしよりも、バグが見つけられること、修正できることを重要に考えていました。
もし私が利用者の立場なら、あるバグのために仕事にならないこともあるかと思います。

>”コーディングが汚い”=悪いプログラム とはならないと思いますが、どのようにお考えですか?
コーディングが汚いのは悪いことだと思います。ただ、「悪い」と言う言葉は広い意味合いのある言葉なので、
たとえコーディングがきれいでも、汚いそれよりも悪い場合はあると思います。
深刻なバグを含む場合などはそうでしょうね。

  danjo on 2007/01/30

3

どんなに優秀でもバグをつくったら仕事にならないと思いますが、いかがでしょう?
”コーディングが汚い”=悪いプログラム とはならないと思いますが、どのようにお考えですか?

  troi on 2007/01/30

2

>流れがちゃんと把握できてメンテしやすければコーディングスタイルだわる必要はないと思ったりします。

その通りですね。ただ私の思いとしては、長期間的にみてそれがわかる目を養うためにコーディングに"楽しさ"を探していくことは大事だと思います。
#楽しさを仕事より優先してしまっては本末転倒です。

  danjo on 2007/01/14

1

実際にコードを共有してるわけじゃないし、コード量も違うと思うので、全てがそうとは言いませんが、以外とカットアンドペーストプログラミングも悪くないですよ。

理路整然にクラスやインターフェースを作り込みすぎて、階層化しすぎてEclipseなどのツールがないと追えないプログラムになってしまったり、結局、微妙に引数が違う個別メソッドが大量生産されていくだけとか。もしくは汎用性重視しすぎて使いにくいメソッドができたりとか。

要は流れがちゃんと把握できてメンテしやすければコーディングスタイルにこだわる必要はないと思ったりします。

(楽しい、という文脈が危険なんですよね。さして再利用もないコードで、正規化するのが仕事じゃないのに、とか。)

  えふしん on 2007/01/13

ブログにコメントするにはCNET_IDにログインしてください。

このブログについて

ブロガープロフィール

アーカイブ

2008年7月
  12345
6789101112
13141516171819
20212223242526
2728293031  

カテゴリ

ブログネットワーク

アルファブロガー

外資系エグゼクティブの日々はじめまして
外資系エグゼクティブの日々
末吉隆彦 ロケーションウェアの「空」と「実」サミット、サミット、そして今こそ!公衆無線LAN
末吉隆彦 ロケーションウェアの「空」と「実」
クロサカタツヤの情報通信インサイトメディアアートの夜
クロサカタツヤの情報通信インサイト
平野敦士カールのアライアンスInsightGoogle化する産業構造の変化にどう対応すべきか?
平野敦士カールのアライアンスInsight
佐々木俊尚 ジャーナリストの視点暗黙共同体へ−秋葉原事件で考える
佐々木俊尚 ジャーナリストの視点
福徳俊弘のリッチ&リーチメディア論すべてのメディアをネットが囲む時代へ
福徳俊弘のリッチ&リーチメディア論
江島健太郎 / Kenn's Clairvoyance長瀬弘樹という作曲家のこと
江島健太郎 / Kenn's Clairvoyance

読者ブロガー

電子政府パブリックコメントの抜粋終末期相談支援料:引き続き可能な事例あり
電子政府パブリックコメントの抜粋
パクトロス業務日誌CNET支店放送業界ってスゴイ!
パクトロス業務日誌CNET支店
Life with Mac and more.iPhoneに足りないサービス
Life with Mac and more.
朝之丞のTry and TestedPainter Xで行こう!
朝之丞のTry and Tested

企画特集

「未来の、その先」をどう提言していくか「未来の、その先」をどう提言していくか
クラウドコンピューティングが導く新しいシステム
DELL連載第4回〜「Microsoft System Center」DELL連載第4回〜「Microsoft System Center」
PowerEdgeサーバに最適な運用管理ソリューション後編
今知るべき仮想化情報今知るべき仮想化情報
インフラからアプリケーションまで、これを知らずに仮想化は語れない

新着コメント

“iPhone G3”? Where manufacturers?...
【コピペ】 iPhone G3発売日は笑えた! 
投稿者:yamada.ricky
今は反省してます!どうか拙エントリーをお許しください。...
【コピペ】 iPhone G3発売日は笑えた! 
投稿者:尊仁
BeLLさん、コメントありますがございます。 文章が解りにくかったかもしれませんが、私が言いたかったの...
iPhoneに足りないサービス 
投稿者:PowerYOGA
あんた、何が言いたいのかわからない。 Blog書く前に、文章力をつけてきてくれ...
【コピペ】 iPhone G3発売日は笑えた! 
投稿者:christine
機種変更でも ****@i.softbank.jpになりますけど 全体的に携帯のメールが使えないわけじゃないです。...
iPhoneに足りないサービス 
投稿者:BeLL

ブログネットワークとは?

CNET Japan ブログネットワークは、元はCNET Japanの一読者であった読者ブロガーと、編集部の依頼により執筆されているアルファブロガーたちが、ブログを通じてオンタイムに批評や意見を発信する場である「オピニオンプレイス」、また、オピニオンを交換するブロガーたちが集うソサエティです。

広い視野と鋭い目を持ったブロガーたちが、今日のIT業界や製品に対するビジョンや見解について日々熱く語っています。

あなたもブログを書いてみませんか?

CNET Japanやその他サイトが提供するITニュースやコンテンツへの意見や分析、 ビジネスやテクノロジーに対するビジョンや見解について語っていただける方を 募集しています。ご応募はこちらから

ブログの投稿・管理

ブログの投稿はこちらから(※ブロガー専用)

ブログアワード2007開催決定!

今年最も活躍したブロガーを表彰します。詳細はこちらから

αマークって?

これは、CNET Japan 編集部の依頼に基づいて執筆されているCNET Japan アルファブロガーによるブログの印です。

Good!って?

CNET Japan ブログネットワーク内で拍手の代わりに使用する機能です。ブログを読んで、感激した・役に立ったなど、うれしいと思ったときにクリックしてください。多くGood!を獲得した記事は、より多くの人に読まれるように表示されます。

レビュー

オンリーワンの個性を極めた超薄型テレビ--日立 Wooo UTシリーズ
日立製作所の超薄型液晶テレビWooo UT 770シリーズは2008年6月にラインアップが増強され、さらに日立らしい
[レビュー]“この手があったか”と思わせるパワーユーザーも納得のPCオンデマンド--「VALUESTAR G タイプR Luiモデル」+「Lui RN」詳細レビュー
「VALUESTAR GタイプR Luiモデル+PCリモーター」は、設置場所にとらわれずにPCを使える、NECが新しく提案
[レビュー]東芝「dynabook SS RX」(前編)--社内モバイルのメリットを享受する
世界最軽量の薄型ノートであるdynabook SS RXシリーズに新モデルが登場した。東芝が「モバイルの理想形」と
[レビュー]通勤鞄に忍ばせたい軽さと装着感--マクセルのノイキャンヘッドホン「HP-NC15」
約150gという軽量と折りたためるコンパクトモデルで、通勤・通学に便利なノイズキャンセリングヘッドホン「
今週の新製品総チェック:ノートPCに変動あり--より小さく高性能へ
今週の新製品総チェック:ついに登場、全録レコーダー「SPIDER zero」
北京を見逃すな!--2008年夏、今買うべき「デジタルレコーダー」
今週の新製品総チェック:日本発売7月11日に決定、iPhone旋風が継続
ミニノートブームの本命登場か--日本HP「HP 2133 Mini-Note PC」