タグ付けされた質問 「programming-practices」

プログラミングプラクティスは、ソフトウェアの開発で一般的に使用される、またはあまり使用されないプラクティスです。これには、アジャイル開発、かんばん、コーディングのショートカットなどが含まれます。

3
IEnumerable <T>ではなくList <T>を使用する必要があるのはなぜですか?
ASP.net MVC4 Webアプリケーションでは、IEnumerablesを使用して、実装ではなくインターフェイスにプログラムするというマントラに従っています。 Return IEnumerable(Of Student) 対 Return New List(Of Student) リストはクエリを強制的に実行し、IEumerableは実行しないため、人々はIEnumerableではなくListを使用するように言っています。 これは本当にベストプラクティスですか?代替手段はありますか?インターフェイスを使用できる具体的なオブジェクトを使用すると、奇妙に感じます。私の奇妙な気持ちは正当化されますか?

5
偶然によってプログラミングを克服する方法は?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 The Pragmatic Programmerの本では、作家はプログラミングを偶然の一致の概念に言及しています。それが何であるか、なぜそれが引き起こされるのか、あなたが遭遇するかもしれない危険は何かを説明し、戦争中の地雷原と比較します。 古い白黒の戦争映画を見たことはありますか?疲れた兵士は慎重にブラシから飛び出します。前にクリアがあります:地雷はありますか、それとも安全に渡れますか?地雷原であることを示す兆候はありません。標識、有刺鉄線、クレーターはありません。兵士は銃剣とひるみで彼の前の地面を突いて、爆発を期待します。ありません。それで、彼はしばらくフィールドを苦労して進み、彼が行くにつれて突き、突きます。最終的に、フィールドが安全であると確信して、彼はまっすぐになり、誇らしげに前進し、破片に吹き飛ばされるだけです。 兵士による地雷の初期調査では何も明らかにされませんでしたが、これは単に幸運でした。彼は誤った結論に至り、悲惨な結果をもたらしました。 開発者として、私たちは地雷原でも働いています。毎日私たちを捕まえるのを待っている何百ものtrapがあります。兵士の話を思い出して、私たちは誤った結論を出すことに注意する必要があります。偶然のプログラミング(幸運と偶然の成功に頼る)を避け、意図的にプログラミングを行うべきです... しかし、私は彼らが「それを克服する方法」問題を説明する方法に本当に満足していません。ええ、あなたはコードを書く前に先を考えなければなりませんが、それをどのように実践するのですか?私が考えることができる唯一のことは、既存のオープンソースプロジェクトに機能を追加することです。ここでは、「今何をしているのか」と「他のコードの動作」の両方に関する知識が必要です。独自のプロジェクトを書いているとき。 編集: 投稿の要約: 次の動きを推測しないで、それが正しいことを証明してください 必要に応じて、可能な限り単体テストとリファクタリング 機能の追加-コンパイル-テストを頻繁に行う 初心者にコードを説明できない場合、おそらく偶然のプログラミングでしょう。 ところで、答えを受け入れるのは難しいです、本当に難しいです。すべての答えは本当に素晴らしいです:)

16
デバッグに時間がかかりすぎている
昨日、約6週間(オンとオフ、つまり)作業してきたWebプロジェクトのv1.0リリースを公開しました。私は自分の時間を正確に記録していませんが、私の経験によると、プログラミングに費やした時間のうち、半分がデバッグに費やされたと推定します。デバッグに15〜20時間ほど費やしていると推定します。これは、新しいコードの作成やプロジェクトの早期終了に費やすことができた貴重な時間です。また、5週間以内に大学1年生になることも特に助けになりません。 大事なことは、デバッグに時間を費やすのは気分が悪いことです。デバッグに費やしたすべての時間は、プロジェクトの開発中にかなりバカなミスを犯したことを実感させてくれます。ミスは修正にかなりの時間を要しました。 将来これが起こらないようにするにはどうすればよいですか?デバッグに50%の時間を費やしたくはありません。10%のデバッグに費やし、残りは新しいコードの作成に費やします。この目標を達成するのに役立つテクニックは何ですか?

10
同僚にインスピレーションを与えて、より良いコーディング手法を採用しますか?
で、私の時代遅れの同僚の取り扱い質問を、様々な人々がいる同僚に対処するための戦略を議論したくないチームで自分のワークフローを統合します。 可能であれば、現代の技術やツールに無知で、おそらく少し無関心な同僚を「教える」ためのいくつかの戦略を学びたいです。 会社の別の部分で、最近まで比較的孤立して働いていたプログラマーと仕事を始めました。彼は幅広い分野の知識を持ち、最も重要なことには、多くの候補者が欠けているように見える、優れた問題解決スキルを実証しています。 しかし、私が見た実際の(C#)コードはVB6時代への先祖返りです。手続き構造、ハンガリー語表記、グローバル変数(の乱用static)、インターフェースなし、テストなし、ジェネリックの不使用、スローSystem.Exception...アイデアが得られます。 このプログラマーは私よりもかなり古く、少なくとも第一印象では積極的な変化を積極的に求めていません。私はそれが主にトピックがどのようにブローチされるのかという問題だと思うので、私は変化に抵抗するとは言いません。 プログラマーは頑固な人である傾向があり、銃を燃やし、コードのレビューと厳格に施行されたポリシーを厳格に施行することは、私が望む最終結果をもたらさない可能性が非常に高いです。これが新しいプログラマーである若手のプログラマーである場合、「メンター」スタンスを取ることについては二度とは思いませんが、経験豊富な従業員を無知な初心者として扱うことには非常に警戒しています(彼はそうではありません-彼はただ分野の特定の進歩に歩調を合わせました)。 穏やかな説得と非物質的なインセンティブを介して、この開発者のコ​​ード品質基準をデールカーネギーの方法で高めるにはどうすればよいでしょうか?敵対的な状況を作り出すことなく、微妙な段階的な変化をもたらすための最良の戦略は何でしょうか? 他の人々、特にリード開発者は以前にこのような状況にあったことがありますか?どの戦略が興味を刺激し、ポジティブなグループダイナミックを生み出したのでしょうか?どの戦略が成功しなかったので、避ける方が良いでしょうか? 明確化: 質問のすべての詳細を実際に読むことなく、個人的な感情に基づいて回答している人が本当にいると感じています。次の点に注意してください。これは暗示されるべきでしたが、現在明示的にしています。 この同僚は、年齢のおかげで私の「シニア」だけです。彼の肩書き、影響範囲、または組織での年数が私のものを超えるとは言わなかったが、実際には、それらのいずれも真実ではない。彼はLOBプログラマーであり、メイン開発ショップに夢中になっています。それでおしまい。 私は新入社員でも、若手プログラマーでも、一晩で会社を変革するという壮大な計画を持った他の未熟なバカでもありません。私は基本的にソフトウェアプロセスを担当していますが、「リーダー」として働いた多くの人が知っているように、責任は必ずしも組織図と正確に相関するとは限りません。 私は、どうやって自分の道をたどるのか、地獄に行くのか、満水になるのかを人々に尋ねているのではありません。私が望むなら、それを行うことができ、最終的な結果として、この人はresり、そして/または辞めます。私は変化を促進する社会的で協力的な方法を探していることを理解してみてください。 「...グローバル変数...テストなし...投げるSystem.Exception」という言及は、問題が単なる表面的または審美的ではないことを実証することを目的としています。比較的小さなCRUDアプリで機能するプラクティスは、大規模なエンタープライズアプリで必ずしも機能するわけではありません。実際、これまでのコードで実際に統合テストに合格したものはありません。 質問を額面通りに受け止め、私が話していることを実際に知っていることを受け入れ、実際に尋ねた質問に答えるか、先に進んでください。 PS前提に反論するのではなく建設的なアドバイスを提供してくれた人々に心から感謝します。現実世界の体験の方法でもっと多くのことを聞きたいので、私はこれをしばらくオープンにしておきます。

8
一般に、文字列キーの使用が一般に悪い考えと見なされるのはなぜですか?
これはしばらくの間私を悩ませてきました。ほとんどの場合、ハッシュテーブル、プログラマ、書籍、記事などの構造にデータを保存する場合、文字列値による構造内の要素のインデックス付けは悪い習慣と見なされます。しかし、これまでのところ、それが悪い習慣であると考えられる理由を説明するための単一のそのような情報源を見つけていません。プログラミング言語に依存していますか?基礎となるフレームワーク上で?実装について 役立つ場合は、2つの簡単な例を挙げます。 行がString主キーによってインデックス付けされるSQLのようなテーブル。 キーが文字列である.NET辞書。

8
Lie 2:コードは世界のモデルを中心に設計すべきですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 閉じた3年前。 最近、Three Big Liesのブログ投稿を読みましたが、2番目の嘘を正当化するのに苦労しています。 (嘘#2)コードは世界のモデルの周りに設計されるべきである コードが架空の世界の何らかのモデルまたはマップであることには価値がありません。一部のプログラマにとってこれがなぜこれほど魅力的であるかはわかりませんが、非常に人気があります。ゲームにロケットがある場合は、「ロケット」クラス(コードはC ++であると仮定)があり、これには1つのロケットのデータのみが含まれ、ロケットのような処理を行うことをご安心ください。どのデータ変換が実際に行われているか、またはデータのレイアウトはまったく考慮されません。または、1つのことはどこにあるのかという基本的な理解がなければ、おそらく複数あります。 この種の設計には多くのパフォーマンス上のペナルティがありますが、最も重要なことは、スケーリングしないことです。まったく。ロケット100個のコストは、ロケット1個の100倍です。そして、それ以上の費用がかかる可能性が非常に高いです!プログラマーでなくても、それは意味をなさないはずです。規模の経済。何かがもっとあるなら、それはもっと高くなくて、より安くなるはずです。そして、それを行う方法は、データを適切に設計し、同様の変換によって物事をグループ化することです。 特にこの嘘に関する私の問題はここにあります。 想像上の世界をモデル化することは、コードを視覚化して整理するのに役立つので、仮想的な世界のモデル/マップであるコードには価値があります。 「ロケット」クラスを持つことは、私にとって、クラスにとって完全に有効な選択です。「ロケット」は、AGM-114ヘルファイアなどのタイプのロケットに分類できます。これには、ペイロードの強度、最大速度、最大旋回半径、ターゲットタイプなどが含まれますが、発射されるすべてのロケットには位置が必要ですそして速度。 もちろん、100個のロケットを所有するには1ロケット以上かかります。画面上に100個のロケットがある場合、それらの位置を更新するには100個の異なる計算が必要です。2番目の段落は、100個のロケットがある場合、状態を更新するのに100未満の計算コストが必要だと主張しているように聞こえますか? ここでの私の問題は、著者が「欠陥のある」プログラミングモデルを提示しているが、それを「修正」する方法を提示していないことです。おそらく、ロケットクラスの類推につまずいているかもしれませんが、この嘘の背後にある理由を本当に理解したいと思います。代替手段は何ですか?

4
ドキュメントよりも例を優先してください。それは行動上の問題ですか?
新しいAPIやプログラミング言語、または単純なLinuxのマニュアルページに出会うたびに、私は常に(覚えている限り)それらを避け、代わりに新しい概念の理解を得るために例に頼りました。 無意識のうちに、私はドキュメンテーション/ APIを、それが単純明快で、不可解であるか、または単なる退屈でないときは避けます。プログラミングを始めてから何年も経ちましたが、今では公式の例よりも百万倍優れているので、不可解な/難しい文書を読むことを控えることでより多くの損害を引き起こしていることに気づき、自分の道を修復する必要があると感じていますドキュメントには、他の例よりも多くの記事があります。例が学習のための「主要な」ソースの代わりに「追加された」値として扱われるべきであることに気付いた後でさえ。 プログラマとしてこの悪い習慣を打破するにはどうすればいいのでしょうか?


1
Haskell製品コードでseqはどのくらいの頻度で使用されますか?
Haskellで小さなツールを作成した経験があり、特にinteract標準入力を処理して標準出力にパイプするフィルター(を使用)を作成するために、非常に直感的に使用できます。 最近、通常の約10倍のサイズのファイルでこのようなフィルターを使用しようとしましたが、Stack space overflowエラーが発生しました。 いくつか読んだ後(こことここなど)、スタックスペースを節約するための2つのガイドラインを特定しました(経験のあるHaskellers、正しくないものを書いたら修正してください): 末尾再帰ではない再帰関数呼び出しは避けてください(これは末尾呼び出しの最適化をサポートするすべての関数型言語で有効です)。 seq式が縮小される前に大きくなりすぎないように、部分式の早期評価を強制的に導入します(これはHaskell、または少なくとも遅延評価を使用する言語に固有です)。 seqコードに5回または6回の呼び出しを導入した後、ツールは再びスムーズに実行されます(より大きなデータでも)。ただし、元のコードはもう少し読みやすいと思います。 私は経験豊富なHaskellプログラマーではないのでseq、この方法で紹介するのが一般的なプラクティスであるかどうか、またseqHaskellの製品コードで通常どのくらいの頻度で表示されるかを尋ねたいと思いました。または、seqあまり頻繁に使用することを避けながら、スタック領域をほとんど使用しないテクニックはありますか?

5
コードサンプルとインタビュー?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私はここに来て以来、いくつかの質問を見てきましたが、答えでは、誰かが候補者を判断するためにインタビュープロセスの外でコーディングされたポートフォリオまたはコードサンプルを決して使用しないと断言しましたコードが他の誰かによって作成された。私はこれに驚いています。 私の見方では、誰かがその場で簡単な問題を解決するように頼んでも、そこから学ぶことはほとんどありません。私は、仕事が求められているGoogleのような会社で働いていません。誰かの時間を要求することができます。しかし、趣味で書かれたコードのかなりの部分から多くのことがわかります。 はい、盗作の可能性はありますが、彼らはそのコードについて1時間の議論をするために非常によく指導されなければなりません。その場合、彼らは3か月の保護観察を行うために非常に迅速な学習者である必要があります(その間、理由もなく予告なしにそれらを取り除くことができます)。彼らがすぐに、十分に公正な優秀なプログラマーになれば、私はだまされましたが、まだ優秀なプログラマーがいます。 最終的に、当社の費用と盗作の候補者の利益は非常にわずかです。 これにより、他の業界について考えるようになりました。アーティスト、写真家、デザイナーはすべてポートフォリオを使用しており、盗作についてあまり心配する人はいません。著者は、自分の時間に書いた章に基づいた本に資金を提供されます。面接では、建築家に来て家の設計仕様書を描いてもらうことはありません。 それで、私たちが違うのは何ですか?誰かをコンピューターの前に置いて、データマージまたは階乗計算機をコード化することが、インターネットのような日常的に使用するツールにアクセスできないことがあるのはなぜですか?コードポートフォリオのアイデアの何が問題になっていますか? まだ私を燃やしていない大きな間違いを犯す可能性がある場合に備えて、私は本当に知りたいと思っています。

11
アプリの完成にリファクタリングまたは集中
進行中にアプリをリファクタリングしますか、それとも最初にアプリを完成させることに集中しますか?リファクタリングは、アプリappの進行が遅くなることを意味します。 アプリを完了すると、後でアプリのメンテナンスが非常に難しくなる可能性がありますか? このアプリは個人的なプロジェクトです。「機能と設計を推進するもの」にどのように答えればよいのか本当に分かりませんが、現在のソフトウェアの非効率性を解決することだと思います。私も最小限の使いやすいソフトウェアが好きです。そのため、いくつかの機能を削除し、役立つと思う機能を追加しています。

17
なぜ正規表現は病的なほど魅力的ですか?
ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 図表1、図表2、他の例を思い出すのは難しくないと思います。 問題は、問題を解決する方法が複数ある場合、PHPプログラマー(私は通常StackOverflowでPHPタグを参照します)が正規表現に関連するソリューションのヘルプを求めます。 場合でも、それは、あまり経済的になる場合でも、 PHPのマニュアルは(示唆リンクを使用するために)str_replaceどんなのではなく、preg_*またはereg_*全く空想の置換規則が必要とされていない場合機能。 誰かがこれがなぜ起こるのかについての手がかりを持っていますか? 誤解しないでください。私の親友の何人かは正規表現であり、Perlを軽deしていません。私が手に入らないのは、オーバーキルが明らかな場合(文字列を切り替える正規表現)またはコードの複雑さが指数関数的に増加する場合(PHPで htmlからデータを取得するための正規表現)

3
C#でunsigned intを使用しないようにする必要がありますか?
最近、C#で符号なし整数を使用することを考えました(他の「高レベル言語」についても同様の議論が言えると思います) 整数が必要なとき、私は通常整数のサイズのジレンマに直面していないとき、例はPersonクラスの年齢プロパティです(ただし、質問はプロパティに限定されません)。それを念頭に置いて、私が見る限り、符号付き整数( "int")よりも符号なし整数( "uint")を使用する利点は1つだけです。それは読みやすさです。年齢が正の数にしかならないという考えを表現したい場合は、年齢タイプをuintに設定することでこれを達成できます。 一方、符号なし整数の計算では、あらゆる種類のエラーが発生する可能性があり、2つの年齢を減算するなどの操作を行うことが難しくなります。(私はこれがJavaが符号なし整数を省略した理由の1つだと読んだ) C#の場合、セッターのガード句は2つの世界の最高のものを提供するソリューションになると考えることもできますが、たとえば、年齢が何らかの方法に渡される場合、これは適用できません。回避策は、Ageというクラスを定義し、プロパティageのみをそこに置くことですが、このパターンでは、Meに多くのクラスを作成させ、混乱の原因になります(他の開発者は、オブジェクトが単なるラッパーであるときそして、それがより洗練されたものである場合)。 この問題に関する一般的なベストプラクティスは何ですか?このタイプのシナリオにどのように対処すればよいですか?

1
「exit(-1)」はどこから来たのですか?
「異常終了」を表すためにを使用することを推奨するexit(-1)、インターネット上の多くのレガシーソフトウェアや悪いチュートリアルに見られreturn -1ます。問題は、少なくともPOSIXでは-1、有効なステータスコードではなく、有効なステータスコードです。man 3 exitはのexit()値をstatus &amp; 0377親に返すことを示しています。つまり、に-1なり255ます。非POSIXシステムでEXIT_FAILUREは、移植性のために推奨されます。しかし、「-1は異常終了を意味する」と「EXIT_FAILUREは1以外の可能性があります」とは表示されません。 これを永続化するStackOverflowの質問の例を次に示します。ソフトウェア「unrealircd」も、プログラムのexit(-1)終了に使用するプログラムの例です。実際には、これにより、とのインターフェースが難しくなりますsystemd。 このアンチパターンはどこから来たのですか?あるコンテキストで有効ですか?

7
ペアプログラミングの潜在的な欠点は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 閉じた3年前。 ペアプログラミングは、今日では非常に有名です。 以下のようないくつかの利点があります。 バグの少ないプログラム。 ポストプロダクションのメンテナンスコストははるかに低くなります。 確立された慣行は挑戦され、新しいアイデアが生まれます。 プログラマーはお互いから学びます。 プログラマーはソフトスキルを開発します。 しかし、ペアプログラミングの欠点は何ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.