最近はお仕事でC#を使っています。
複数人で部分ごとにコードを書いているのですが…
まぁなんというかこの頃不満というかなんというか、
「この設計マズいんじゃないの?」と言いたくなるようなコードが非常に多い。
オブジェクト指向設計における所謂「アンチパターン」なるものを積極的に取り入れたようなコードが多いといいますか。
例えば…
・一つ一つのクラスがやたらデカい
とにかくデカい。どうデカいかというと変数の数がやたらと多い。
クラスによっては20も30も変数がある…
・メソッドの処理内容がやたらと巨大
とにかく巨大。
一つのメソッドに150行、もしくはそれ以上あるんじゃないかと思うほどのコードの量。
関数分けすればいいものを一箇所にまとめて記述しています。
そしてこの中にも以下の問題点が
・同じ処理を何回も記述している
関数化したりクラスにしてまとめればいいものを作らない。
わざわざコピペでもしているのか、同じ処理をあらゆるところに。
・というかそもそも自作クラスが存在しない
と言ったら語弊があるが、要は何が言いたいかというとクラスの使い方が明らかにおかしい。
例えば座標系を扱う場合はRectやVectorのようなものが定番として存在するが、
それすら使わない&自作しない。いちいち値型で定義している。
細かい機能をクラスにしない、全部直接記述している。
しかもクラスの内容に柔軟性や凡庸性が欠片もない。
以上のことに踏まえ、更に仮想関数、抽象クラス、インターフェースなどは一つも存在しないため、
毎回同じような処理を記述しなければいけない、非常に面倒くさい。
それで問題なく動けば何も言うことはないのですが、バグのオンパレード、毎日のように出現するバグ、バグ、バグ…
ちょっとでも例外的なデータが入ったらもう動かない、いろいろと危なっかしすぎる。。。
あとこれは個人的な好みの問題だが、メンバ変数なのにキャメル記法とパスカル記法が入り混じっているのも個人的には好きじゃない。
パスカル記法にするならpublic、キャメルならprivateと規則性が欲しいものです。
もう何点かあるがこの辺は宗教的な問題なので好き嫌いが別れますが、
1.フィールドで初期化するのが嫌い。初期化は常にコンストラクタに記述するのが個人的なジャスティス。
2.デフォルトでprivateになるとしてもアクセス修飾子は毎回記述したい。理由はprotectedとかpartialとかいろいろあるしデフォルトでなにが入るかは言語によって違うし。
まぁいくつかは好みの問題で済む問題ですが、
あきらかに設計的に問題があるのも事実で…
なぜ経験ある現場のプログラマーがこのような危なっかしい書き方をするのでしょうか…
個人的に考えた理由
その一
・知識が追いついていない、単純な勉強不足
ビット演算や暗号化の知識があるのに設計法がわからないはずがないという信頼の下、
これはないと信じたい。
その二
・設計考えるの面倒くさいですしおすし
どうせあとで仕様変更くるんだし、本格的にコーディングしても書き直すくらいなら…という考えから(?)
その三
・メモリの利用効率的に…
クラスを作るとメモリの使用量が増える、メソッド呼び出しのオーバーヘッドの速度が気になる。
いやいや、今のスペックでそれは気にしなくても…
謎である…
オブジェクト指向ェ…
Re: オブジェクト指向ェ…
現在就活中なのですが、ソフトウェア開発会社の求人を見ていると
「スキルや知識は不問、人柄や性格を重視します!」っていうところが少なくないですね
あまつさえ「プログラミングの経験は不問! 文系でもOK」なんて言うところもあります
それゆえ学歴だけはあってもプログラミングの知識やスキルが決定的に不足している人が現場に増えているのではないでしょうか~?
とはいっても専門学校であっても僕みたいにちゃんと努力を続けている人と、そうでない人とでは"同級生"とは思えない程実力に差があったりするんですけれどね(苦笑)
「スキルや知識は不問、人柄や性格を重視します!」っていうところが少なくないですね
あまつさえ「プログラミングの経験は不問! 文系でもOK」なんて言うところもあります
それゆえ学歴だけはあってもプログラミングの知識やスキルが決定的に不足している人が現場に増えているのではないでしょうか~?
とはいっても専門学校であっても僕みたいにちゃんと努力を続けている人と、そうでない人とでは"同級生"とは思えない程実力に差があったりするんですけれどね(苦笑)
Re: オブジェクト指向ェ…
あるある過ぎて困るwww
1つのメソッドに同じような処理が数千行にわたって延々と書かれていた時は我が目を疑いました。
書いた人曰く「この方が一見して何をしているのかが分かりやすい」らしい・・・。
「後でその処理に変更があった場合にその数千行を全て手直ししていくの?同じ処理はメソッドにまとめれば、その箇所だけなおせばいいんだけど・・・」と聞いたら、「その時はその時、とりあえず動けばジャスティス!」
・・・まぁ、そういうことらしいよ。
それ以上はつっこむ気にもならなかったので放置してる。
私も他人をどうこう言えるようなレベルではないけど、プログラマーにも色々居るってことです。
1つのメソッドに同じような処理が数千行にわたって延々と書かれていた時は我が目を疑いました。
書いた人曰く「この方が一見して何をしているのかが分かりやすい」らしい・・・。
「後でその処理に変更があった場合にその数千行を全て手直ししていくの?同じ処理はメソッドにまとめれば、その箇所だけなおせばいいんだけど・・・」と聞いたら、「その時はその時、とりあえず動けばジャスティス!」
・・・まぁ、そういうことらしいよ。
それ以上はつっこむ気にもならなかったので放置してる。
私も他人をどうこう言えるようなレベルではないけど、プログラマーにも色々居るってことです。
最後に編集したユーザー バグ on 2012年9月06日(木) 10:13 [ 編集 1 回目 ]
Re: オブジェクト指向ェ…
うん、こちらもクラス分けこそしてある…ただクラス分けてあっても中身が同じ事を書いてる
つまり同じ処理を行う別のクラスが大量にあって1つのクラスで問題があったら全部修正するのかというような感じなのが多く見られますね。
jayさんの経験不問は確かに多く見ますね。
文系はNGとか言われてしまうと学部類型上では文系だった私なんかはNGになってしまうんですけどもね(汗)
まぁ、当時そんな理由で断られた会社もいくつかはありましたけどもね
つまり同じ処理を行う別のクラスが大量にあって1つのクラスで問題があったら全部修正するのかというような感じなのが多く見られますね。
jayさんの経験不問は確かに多く見ますね。
文系はNGとか言われてしまうと学部類型上では文系だった私なんかはNGになってしまうんですけどもね(汗)
まぁ、当時そんな理由で断られた会社もいくつかはありましたけどもね