• ベストアンサー

プログラムの「生産性」について

最近、「貴方の『生産性』はどれ位ですか?」 と良く聞かれます。 「1日で最高何ステップ作れますか?」 と尋ねられます。 私の場合、「こことここは心臓部は同じだからパラメータを設ければ関数にできる」 とか考えてコーディングしてしまうので どうも他人より、半分以下の数値となってしまいます。 もはや、「関数化・サブルーチン化」なんて過去の遺物となってしまったのでしょうか? 関数を1個作っている時間があったら10カ所コピペするのが主流なんでしょうか?

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

  • ベストアンサー
noname#134807
noname#134807
回答No.4

個人的な意見(回答)になりますが。 生産性をステップ数で把握するのはナンセンスですし、余りにも古い考え方です。 関数化は当然必要で、コピペは主流なんてことはないです。 コピペしてステップ数を多くしても、それはスパゲッティコードであって、最終的には生産性を落とすものだと考えます。 コピペした箇所にバグがあった場合などを考えると、プログラムのフェーズは生産性が高いでしょうが、テストフェーズで必ず大変な目にあいます。 ですが、顧客サイドやマネージャークラスでは生産性を測る手段に乏しく、ステップ数で判断したいと思ってしまう傾向もあると思います。 ですので納得させるのは難しいのですが、 生産性はステップ数で測れるものではない プロジェクトは複数人で進めるものだから、個人のスキルだけが高くてもうまくいくとは限らない と説明した上で、それでもステップ数を知りたいなら、と話をするようにしています。

その他の回答 (4)

  • higeG
  • ベストアンサー率22% (4/18)
回答No.5

> もはや、「関数化・サブルーチン化」なんて過去の遺物となってしまったのでしょうか? 逆です。 生産性を1日あたりのステップ数で勘定する方が過去の遺物です。 アセンブリ言語時代の考え方ですね。 他の方が挙げられているように現在は再利用性の高いプログラムを組む方が生産性が高いです。

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.3

「貴方の『生産性』はどれ位ですか?」 「1日で最高何ステップ作れますか?」 う~ん、質問者さんほどのベテランなら、この質問が、これだけだと何の意味も持たないことはわかっているとおもうんだけど、 たとえば、ある課題に対して、「解決のロジックを文章と図でどれだけすぐに記述できて、他の人に説明できるか?」が、プログラムの生産性なんだから。 例えば、オブジェクト指向なら、どんなオブジェクトをどのように相互作用させるかがほぼ全てだから、これできてれば、あとコードするだけだし。基本オブジェクトの属性とメソッド暗記してれば、キーパンチの早さだよねステップなんて。 『ステップってなんですか?ダンサーじゃないしぃ~』とこころでつぶやきながら そのあたりを突っ込んで、質問をより具体化させてみたらどうかな?

回答No.2

> もはや、「関数化・サブルーチン化」なんて過去の遺物となってしまったのでしょうか? いいえ。現役です。 > 関数を1個作っている時間があったら10カ所コピペするのが主流なんでしょうか? いいえ。まったく同じ内容のコードが多数存在することは避けるべきです。 保守性を保つために関数を作るやりかたが良いと思います。 しかし・・・コピペするほうがステップ数を稼げるのは当然です。 それを生産性と言えるかどうかは微妙です・・・。

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

例えば、(数字は適当ですが) 1日に2000ステップ作れるとします。 このときに重要なのは、 1 あるソフトを2000ステップで作る(1日で作る) 2 同じソフトを効率化して1600ステップで作る(4/5日で作る) ことが同じかどうかです。 当然「2」は一日当たりの作成ステップ数が同じなら、余った時間で他のソフトの作成に取りかかれますよね? 質問者さんが気にしているのは、 3 あるソフトを2000ステップで作る(1日で作る) 4 同じソフトを効率化して1600ステップで作る(やっぱり1日で作る。考えながらなので2000ステップ行かない) 時の、評価だと思うんですが…。 2と4を比べると、2の方が断然評価が上がりますよね? そこをアピールすれば良いのでは。 なんか、回答になっていなくて済みません。

BLK314
質問者

補足

基本的に4です。 「関数にまとめよう」とか考えている時間があったら 手を動かす(コピペ)という時代なんでしょうか? 個人的には 「なんで同じ処理があちこちに散らばっているんだ!」 と腹が立つんですが・・・・ 古い人間だからでしょうか?

関連するQ&A

  • VB6イルミネーションプログラムその3

    いつもお世話になっています。 テキストボックスに1~255までの数字を入力し、コマンドボタンをクリックしたら、入力した数字を2進数に変換してランプを点灯するというプログラムを考えています。 例えば、テキストボックスに170と入力し、コマンドボタンをクリックしたら以下の様にランプが点灯するプログラムです。 ●○●○●○●○ 10101010 170の2進数 色々と調べ目的とする動きはするのですが、別の方法として値を引数にして2進数に変換した値でランプを点灯する処理を手続き(サブルーチン)として分離するという処理はどのようにすればよいのでしょうか? 現コードは以下です。(未熟ですので、コメントが見苦しくすみません…) Private Sub cmd1_Click() '変数の宣言 Dim Kazu As String Dim Binary(7) As Integer Dim Nishin As Integer Dim Value As String Dim Index As Integer 'テキストボックスへ入力した文字列を数値型に変換し、格納 Nishin = Val(txtKazu.Text) '2進数への変換処理 For Index = 0 To 7 Step 1 'Nishinに入力された数値を2で除算し、8ビット分の余りを繰返し求め格納 Binary(Index) = Nishin Mod 2 'Nishinの除算の商を求め、格納 Nishin = Nishin \ 2 Next Index '各余りを下から順に並べる処理 For Index = 7 To 0 Step -1 '変数Binaryを変数Kazuの型である文字列型へ変換し、連結して格納 Kazu = Kazu & CStr(Binary(Index)) Next Index '2進数の結果をランプコントロールへ反映 CWBtn(0).Value = Mid(Kazu, 8, 1) CWBtn(1).Value = Mid(Kazu, 7, 1) CWBtn(2).Value = Mid(Kazu, 6, 1) CWBtn(3).Value = Mid(Kazu, 5, 1) CWBtn(4).Value = Mid(Kazu, 4, 1) CWBtn(5).Value = Mid(Kazu, 3, 1) CWBtn(6).Value = Mid(Kazu, 2, 1) CWBtn(7).Value = Mid(Kazu, 1, 1) End Sub サブルーチンって??と思い、サイトや参考書を色々と見たのですが、サンプルコードなどを見ても理解出来ませんでした。 未熟で理解が浅いのですが、役割として「離れた箇所の文の並びを実行し、元の場所に制御を戻す」という様な感じですよね…元の場所で実行せず、わざわざ離れた箇所で実行するメリットもピンときません… 宜しくお願いします。

  • 1行ずつではなくまとめてファイル出力したいのですが

    Cは初心者です。というかプログラム自体ずぶの素人です。 パラメーター1パラメーター2パラメーター3を使って計算をし、結果として パラメーター1,パラメーター2,パラメーター3,数値2,数値3,数値4,数値5,数値6,数値7 というような形式で1行ファイル出力をし、 パラメーターを変えて(for文)またファイル出力をし、とかなりの回数繰り返す計算をしております。 (元々AWKで動いていた自作プログラムの移植です) 現在、 #include <fstream> ofstream file1("c:\\data.csv",ios_base::app |ios_base::out) ; file1 << parameter1 << "," << parameter2 << ~中略~ << "," << value1 << "," << value2 << "," << ~中略~ "\n" ; のようにファイル出力しているのですが、ファイルサイズがでかくなってくると、もの凄く遅くなります。 ひょっとして、ファイルオープン→ファイル末尾まで開く→1行書き込む→ファイルクローズ→ の繰り返しで、だからファイルが大きくなると遅くなるのではないかという気がしているのですが、 何行も(1000行とか1万行とか5万行とか)一気に出力する方法はないでしょうか? まず、どうやってデータを溜め込み、次にどういう出力方法があるのか、教えていただけないでしょうか。 parameter1~Value7(本当は倍以上ありますが)をそれぞれ全て配列にし、ファイルをオープンして閉じずにfor文で書き込む、なんてのも考えたのですが、どうしたら良いか判らずギブアップです。 もうちょっとスマートに、file1のところを配列にするとか、file1にどんどんデータを書き加えて巨大な一文にしてしまうとか、何か方法はないでしょうか? なお、cはマイクロソフトが只で配っているVisual Studio の VisualC++ Express Editionを、よく判らないまま使用しております。 先週ダウンロードしましたので、おそらく最新版だと思います。 ポインタの辺りは、理屈は解りましたがスラスラ使いこなせるということはなく、他人のソースを見てもよく判らない状態です。 というか、どこまで書き換えて良い文字で、どこまでが標準関数(?)等の書き換えられない文字かもよく解っていないレベルです。 よろしくお願いいたします。

  • プログラム門外漢にご指南おねがいします

    プログラミングに詳しい知り合いがおらず、どうかご相談させてください。iPhoneアプリが大好きでプログラムを勉強したいと思うようになりました。そこで勉強をかねて職場の作業の自動化をできないかと考えています。 毎日更新されるウェブサイトの情報(金額や重量の表)に決まった計算を加え、スタッフの携帯電話に送信(プレーンテキスト)するという作業があります。現在はウェブサイトの表を、計算式を設定したExcelを経由し算出した数値をメールへ、コピペを繰り返して行っています。この一連の作業の完全自動ができればと思っています。 門外漢の私にも実現を目指せるものでしょうか。どのような勉強(言語?)が必要で何から始めるのがよいか、おすすめの参考書など、ご教示いただけないでしょうか。どうぞよろしくお願い致します。 ◯目的 毎日更新される特定ウェブサイトの決まった箇所に計算を加えて複数の携帯電話に送信したいです。人が関わらずに毎日決まった時間に作業が実行されるのが理想です。勉強がうまくいけばいつかiPhoneアプリをつくってみたいです。 ◯私について 現在ごく単純なHTMLが理解できる程度です。最近FileMakerを使って簡単な関数やスクリプトを本を見ながら作成したのですが、この作業がとても面白かったのでプログラムに興味をもちました。

  • select関数の使用方法について

    こんにちは。 以下のような流れでコーディングしています。 int recv_test(sd, tmout, rmsg) { fd_set fdset; struct timeval timeout; FD_ZERO ( &fdset ) ; FD_SET ( sd , &fdset ) ; timeout.tv_sec = 0; timeout.tv_usec = 0; ret = select( sd+1 , &fdset , NULL , NULL , &timeout );  ・・・・ } 第1パラメータ(sd)には、socket(AF_INET, SOCK_STREAM, 0)の戻り値を設定します。 これをコンパイルすると、select関数の箇所で、下記のエラーが発生します。 cc: "recv_test.c", line 97: warning 604: Pointers are not assignment-compatible. cc: "recv_test.c", line 97: warning 563: Argument #2 is not the correct type. select関数のパラメータが不正なのでしょうか? お気づきの点がありましたら,ご教授ください。 よろしくお願いいたします。

  • あなたのC言語コーディング規約

    勤務先・学校・趣味でC言語を使用してプログラムをしている方の多くは組織内で決めているコーディング規約に沿ってプログラムをしていると思います。 しかし、全てに関して規約化されていることは少なく、ある程度プログラマの裁量に任せていることがあると思います。 そこで、質問です。 「あなたの中で決めているコーディング規約は何ですか?」 「また、その理由は何ですか?」 私が決めているコーディング規約を一例挙げると以下の通りです。 (基本は他人が見ても直ぐに理解できるように心がけてます。) ------ □変数名の前には必ず型を現す文字を書く 理由:観ただけで型が分かるから。 例 :int型は、iData    char配列は、stData    ポインタは、pData □関数の復帰値は、一旦必ず変数に代入する。 理由:代入しないとデバックがしにくい。 例 :iRetCode=func();    switch(iRetCode){      case文    }    の、ように色んな値を試すときに不便。 □if文には、極力「!」(NOT)は使用しない。 理由:複数の論理和・積などが入った場合ややこしいので    elseで代用する。(真の時の処理はわざと書かない) □if文の判定には必ず定数値を左辺に持ってくる。 理由:if(iData=0)とかの"=="を"="にしてしまうミスを防ぐため。    (コンパイラによっては、警告が出るものもありますが…) 例 :if(0=iData)など □while(1)は、基本的に使用しない。 理由:無限ループに陥らないようにするため。 ------

  • 三菱Qシリーズ

    三菱のQ02にデバイスネットカードQJDN91を装着して通信を行い設備を動かしております。 1日に1回でるかどうか位の頻度なのですが、CPUエラーが起こります。 エラーの内容ですが、 エラーコード 4140 エラーメッセージ OPERATION ERROR LED状態(RUN) 点灯 LED状態(ERROR) 点滅 CPU動作状態 停止※エラー発生時のCPUの動作状態をパラメータで設定可能です。 ◆異常内容と原因 入力データが特殊な数(“-0”,非正規化数,非数,±∞)で演算を行った。 ◆処置方法 エラーの共通情報をMELSOFT製品で読み出し,その数値(プログラムエラー箇所)に対応したエラーステップをチェックし,修正する。 となっております。 まず、ヘルプに「※エラー発生時のCPUの動作状態をパラメータで設定可能です。」 とあるのですが、このエラー時にCPUを続行させたいのですが、できるのでしょうか? PCパラメータから「エラー時の運転モード」を全て「続行」にしているにも関わらず、停止してしまいます。 次に、エラーを起こしているデバイスですが、特定できるのですが「-0」という値はどうしても入ってきてしまいます。スレーブ側での対応は不可の場合、マスタ(PLC)側で回避する方法はあるのでしょうか?データは浮動小数点実数で取り込んでおります。 比較命令部分でエラーを起こしている為、入力と同時にCPUエラーで停止になります。 演算結果でのエラーであればプログラムで対処しようがあるのですが・・・ 対処方法があれば、教えてください。

  • 生産されなくなったステロイドを生産するには?

    私は20代半ばのアトピー患者で、ステロイド2群(非常に強い)レベル の塗り薬を全身に5年間塗り続けています。 この5年間調子は生活できる程度なのですが、皮膚は薄くなるし 薬も利かなくなるしで参ってます。 そこで質問なのですが、5年間のブランクにより体内で 生産されなくなったステロイド(副腎皮質ホルモン)を生産するには どのような事を日々行えばよいでしょうか?(運動、食事etc・・・) 具体的にこの運動はこうだ! とかこの栄養素がこうだ! という事をご存知の方は教えていただきたいです。 脱ステは考えていません。

  • 藻類の純生産/総生産について

    植物は光合成と同時に呼吸も行っているため、総基礎生産量(総光合成量)から呼吸量を差し引いたものが純基礎生産量(純光合成量)となります。 私は、今年の夏、底生珪藻の総基礎生産速度を現場で測定しました。今、その時の底生珪藻の純基礎生産速度を求める必要が発生しました。 純基礎生産速度を求める実験をこれから行う時間はないので、純生産/総生産の比を文献等より引用し、測定した総生産速度にその比率を乗じて、少々おおざっぱでもよいので純基礎生産速度に換算できたらよいと思っています。 そこで、沿岸域の珪藻の純生産/総生産の比がどれくらいのものかについて書かれている文献を探しています。(もちろん種によって異なるとは思うのですが。) これに関することについて知っている方、もしくは、そういう文献を見たことがあるという方がいらっしゃったら、教えていただけませんか?? ちなみに、底生珪藻についてのデータがなければ、植物プランクトンのデータで代用することも考えています。植物プランクトンのデータでも良いのでもしわかれば教えて下さい。お願いします。

  • 生産性

    宜しくお願いします。 生産性のある社員とない社員の特徴はありますか? また、人手不足のなか、どのような社員が生産性がありますか?

  • 生産者

    よく、「ダービーは全てのホースマンの目標」というようなことを聞きます。 しかし一般的に考えて、例えばフォーティナイナーとかアジュディケーティングとか、いわゆるダート血統、短距離血統の馬で東京の芝2400mをこなすのは難しいでしょう。 それでもこれらの種馬をつける生産者がたくさんいます。確かに先の馬は非常に優れた、いわゆる「くずのでない血統」で、おそらく収支もプラスにしてくれるケースが多いと思われます。 ということは、こういった馬を種馬として決定するときは「全てのホースマンの目標」であるダービー向けではなく、馬主さんに喜んでもらえる、買ってもらえるような馬を作る、ということで決定しているんでしょうか?もちろんサンデー系の馬は種付け料が高い、というのは分かりますが、それだったらサドラーズウェルズ系とかなら芝の2400mはこなせそうですよね。 この辺のところ、生産者の方々はどのように考えて種馬を決定しているんでしょうか?

専門家に質問してみよう