• ベストアンサー

求められるプログラミングのレベルについて

 プログラマ中級者の者です。  独学で始めたプログラミングですが、そこそこの実力がつき、情報系の専門でもないのに、プログラマの仕事をしています。  さて、時に私は上司から難しいコードを書くように言われます。  例えば、今日は正規表現であるタグにマッチする方法を書いてほしいと言われました。もちろん、単純に「<href a=".+">」にマッチすればいいというものではなく、いろいろと要求や条件があります。確かに無理矢理作ろうと思えば作れることもないと思うのですが、100パーセント完璧にこのコードで目的の文字列だけにマッチするか、と言われると自信がありません。  さて、ここでお聞きしたいことは、どうすれば正しい正規表現を書けるかではありません。  この世に完璧なコードというのは存在するのでしょうか。  一万回くらい試してやっと出てきた例外が出てくる場合、どうすればいいのでしょうか?  この精度の問題で最近は悩んでいます。  他の方々はどれくらいの精度でお仕事をされているのか、参考までに教えていただけませんか。  また、もし、ただ壁にぶつかっているだけで嘆いているだけにすぎないと思われる方がいたら、そうおっしゃっていただけるだけで一つのアドバイスになります。

質問者が選んだベストアンサー

  • ベストアンサー
noname#49664
noname#49664
回答No.5

40代、私もまったく専門ではありませんが、気が付けば開発が本業になってしまいました。といっても、個人でやっているので割と小さな規模の案件ばかりなのであまり参考にはならないかも知れませんが・・・。 完璧なコードというのは、場面場面において「ある」という場合もあれば、「ない」という場合もあるように思えます。特に、正規表現。困りますね、これは。「ほぼ間違いなくチェックできる」ものはありますが、「完璧に絶対間違いなくチェックできる」もの、すなわち「完璧なコード」というのは、おそらくありえないんじゃないでしょうか。 私の場合、クライアントがどのようなものをイメージしているかを探ることから始めます。たいていの場合、クライアントはコンピュータの専門家ではなく、Webの技術者でもありません。彼らが欲しているのは、「完璧なコード」ではなく、彼らが「イメージしているものにぴったりはまるコード」です。そのイメージは、いくつか参考とするサイトを見で思いついた程度のものであったり、時には自分でWeb設計の専門書などを読んで勉強した上でのものだったりします。 私は自営ですので、こういっては何ですが、「必要以上にすぐれたコード」は書きませんし書こうとも思いません。考えるのは、「彼らがどのレベルのものを要求しているのか」です。例えばこちらでイメージしたものを納品し、「もっと精度を」と要求された場合、それにかかる工程数と費用を見積もり、「それだけの負担を負っていただけるならできます」と説明をします。 私にとって、「ソフトウェアの品質」は、私が決めるものではなく、クライアントが決めるものであると思っています。どこまで費用と時間をかけて、どれだけの品質を求めるのか。それに応じたレベルのソフトウェアを作るのが私の仕事と考えています。客が求めてもいないやたら高品質なものを長時間かけて作り、それに見合うお金がとれないのではプロとはいえませんし、それに見合う大金を請求したのではクライアントに振られるでしょう。「良きもの、必ずしも善ならず」です。 質問者さんの場合、会社勤めのようですので同じにはいかないでしょうが、基本は「どこかから営業が仕事を取ってきて、そこに金額に応じたものを納品する」ということではあるわけでしょう。そこから、誰に、どの程度の品質のものを作らせるか、ということが割り振られているわけです。そのことを、もっと管理責任者と話し合うことで、目標にすべきレベルが見えてくるんじゃないでしょうか。 必要なのは、「あなた」が求める品質ではなく、「クライアント」が求める品質です。それを、あなたが「クライアントの代りに作っている」だけなんですから。

big-west
質問者

お礼

 なるほど、目からウロコが落ちるような内容でした。  確かによくビジネスは客商売と言いながら、自分は顧客を見ていなかったような気がします。  プログラマは社内業務が大半なので、顧客のことよりも、作品のことにエネルギーを注ぎがちになります。  でも、これから上を目指すのであれば、顧客が何を考えているのかも考えないといけないのですね。  当たり前のことかもしれないですが、大事なことに気づかせてくれてありがとうございます。

その他の回答 (7)

  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.8

世の中に難しいコードとはめったに存在しません。 難しく考えるから、難しくなると思います。 精度を上げるには、 1.実装ロジックの品質を上げる(=バグ率を下げる)。 2.業務ロジックの正規化を行う(=パターン化を行う)。 という2つの方向性があり、具体的に 1の場合は、できることなら定数以外でリテラル値を使用しないなど 簡便で分かりやすいコードを心がける。 2の場合は、再利用可能なようなロジック構成をするために、 UMLなどの図表を用いた設計を行ったり、 条件文の関数化を行い、ソース上での業務と実装との切り分けを心がける。 ※業務ロジック(外部設計レベル)にバグがある場合、どうしようもありませんが。 パターン化して通らないデータがあるとすれば、 パターン化しきれていないということです。 テストの精度を上げるためにも、 一つ一つ丁寧に作り上げることが、 最短でなおかつ最上の道だと思っています。 条件分岐しだいで存在しうるすべてのパターンを抽出できますが、 正規表現などをパターン抽出するのは非常に困難だと思います。 しかし、正規表現の言語仕様をきっちり抑えていれば不可能ではないはずです。 ということで完璧なコードは存在します。

big-west
質問者

お礼

 今回は質問してみて、非常に勉強になりました。  完璧なコードは「存在する」という立場、「存在しない」という立場、それぞれの立場で、仕事の取り組み方が違うのですね。  自分も目の前の仕事だけではなく、仕事観そのものも見直さなくてはいけないのかな、と思いました。  みなさん、たくさんのコメントありがとうございます。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.7

立場が似ているからかも知れませんが、私も#5の方と同意見です。 コストも品質のうちですので、過剰品質はときとして低品質と同じぐらい悪になります。 例えば、アミューズメント系のソフトウェアなどでは、内容にもよりますが、ごく稀に異常終了するけど3,000円の方が、非常に安定しているけど30,000円のものより評価されるでしょう。

big-west
質問者

お礼

 そうですね。  自分はまだまだ経験不足なので、イレギュラーな状況の想定があまりできません。  これからも経験を積んで、いろいろな例外に対処できるようになりたいです。

big-west
質問者

補足

 申し訳ありません。  返事をエディタで書いて、コピペでウェブに貼り付けているのですが、張り間違えてしまいました。この返事はそもそもはNo.6さんのためのものでした。  No.7さん用のものを貼り付けなおします。 ##########  なるほど。  精度の問題と金銭の問題をつなげて考えるような思考は自分にはありませんでした。  こうした考えを持っている方が2人以上いるとなると、そういうソフトウェア評価方法もあるのだな、と考え直さなくてはいけません。

  • maguro999
  • ベストアンサー率21% (59/273)
回答No.6

正規のデータが来たときに正しい処理ができるのは 当たり前ですが 想定外なイレギュラーなデータが来たときにいかに 処理ができるかが問題ですね。 テストするにもその想定外なデータでいかにテストができるかも 重要です。 想定外ですからこっちが思ってもいないようなデータを利用者側が 入れてくることなんて当たり前で結構「ヤバっ」こっちはそんなのイレギュラーすぎて 考えてもいなかったって事もありますね。

big-west
質問者

お礼

 そうですね。  自分はまだまだ経験不足なので、イレギュラーな状況の想定があまりできません。  これからも経験を積んで、いろいろな例外に対処できるようになりたいです。

  • W_H
  • ベストアンサー率47% (21/44)
回答No.4

プロではない学生ですが、参考までに。 やはり完璧なコードはないかな?っとも思います。ただし、条件がいろいろ制限されたりするならば、完璧とも言えるコードは存在すると思います。(例えば、入力した値に+1するプログラムは不完全だが、数字しか入れれない条件や変換をつければ完璧となる。) ごちゃごちゃでもいいので、汚くてもいいので、まずは結果さえ正しく出ればいいかな?っと思います。 何度も不具合を直して、ごちゃごちゃして読みにくくなっても、成功すればいいので、例外が出てきたら、すぐに処理を追加すればいいです。 複雑なプログラムほど、不具合の一つや二つ出てきます。出てくるたびに冷静に、神経質にならずに対応していけば、自然と結果が完璧に近いコードになると思います。

big-west
質問者

お礼

 確かにコメントを適切に書いてみて、ごちゃごちゃの状態で試行錯誤している段階です。  なかなか完璧には書けないので、ミスが出るたびにいろいろと試している状態です。  例外が出たら処理の追加というのも現段階ではやっているのですが、例外数が増えると行数が長くなって把握しづらいという問題も発生します。  いろいろと試行錯誤をしているところです。

noname#39970
noname#39970
回答No.3

1つの書式で全てをこなせる必要は 全くない 結果的に希望の動作をすれば良い 希望から見たら不完全なパーツも 補い合う物を組み合わせれば希望の物に也得る。 人そのものが完璧ではないのだから作る物も完璧にはならない しかし可能な限り完璧に仕上げておき、障害が起きてもすぐに対応できれば問題は深刻ではない。 1つだろうが複数だろうが 結果的に希望の動作をすれば良い。

big-west
質問者

お礼

 そうですね。  現段階では複数のコードで補いながら作っているという感じなのですが、こちらから見ても非常に効率が悪い印象なので、これをスマートに書ける方法としてよい正規表現がないかと考えているところなのです。  (おそらく、当部署内では自分はかなり正規表現に精通しているほうですが・・・)  余計なところにひっかかるので、それを限定しきたいのですが、それを書くとかなり長くなってしまうという問題です。

  • seasoning
  • ベストアンサー率25% (182/713)
回答No.2

>この世に完璧なコードというのは存在するのでしょうか。 もちろんありますし、プロならそれを要求されます。 >一万回くらい試してやっと出てきた例外が出てくる場合、どうすればいいのでしょうか? 私の仕事の場合、1万回程度で例外が出るようなら、まったく使い物になりません。 >100パーセント完璧にこのコードで目的の文字列だけにマッチするか、と言われると自信がありません。 100%は自信が無いし、例外が起るパターンも特定できないのであれば、ユーザも了承してくれないのでは? もし、どうしても1%ダメなのであれば、そのダメなパターンを特定してユーザに了承してもらいます。(運用で支障が無い程度なら) もちろん、100%の自信を持っていても、想定してなかったパターンでエラーが起る事は多々ありますけど。 「仕様を知らない素人は、最高のテスターだ」なんて言葉もあります。 まったく想定していないパターンを仕掛けてくる。。。

big-west
質問者

お礼

 なるほど、10000回以上なんて簡単に前提としているような場所もあるのですね。  自分も経験と読書経験からいろいろなパターンを想定はしているのですけれども、やっぱり想定していなかったエラーというのは、意外な時に起きたりします。  やはり、自分にはまだまだ修行が必要なようですね。  参考になりました。

noname#49428
noname#49428
回答No.1

それを利用するシーンによって変わってくると思います。 例えば、医療や金融機関など失敗やちょっとしたミスも許されないようなシステムだと、それこそ何万回というテストを繰り返します。 逆に、利用ユーザーが数人しかいないような小規模なアプリケーションは、テストに時間と費用を掛けるよりバグが発生した都度対応というようになります。 単機能のプログラムについては、ユニットテストを行います。 ブラックボックステスト~ホワイトボックステストで精度が変わってきますが、厳密なテストをする場合は網羅性や、限界値のテストが一般的じゃないでしょうか。 奥が深いので、詳しいことはテスト技法で調べてみて下さい。

big-west
質問者

お礼

 皆さん、返事が遅くなって申し訳ありません。  確かに業界や目的によってテストの精度も変わるのですね。  今回の質問でしたものは、実はそこまで大きくはないものでして、社内業務で使うものなので、ミスが出てきても適時対応すれば許されるものです。  テストの本もこれから読まないといけないですね。

関連するQ&A

専門家に質問してみよう