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

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

1
小規模プロジェクトのGitワークフロー/プラクティス(pngのフローチャート)
私は個人的なワークフローを考え出そうとしています。リリースの架空の寿命のフローチャートを作成しました。ある開発者が公開githubリポジトリにプッシュし、友人が何らかの機能を手伝ってバグを修正しました。 これはバージョン管理の合理的なアプローチですか? 主なアイデアは、パブリックリポジトリを整理することです。 新しいリリースはそれぞれ、終了時にマスターブランチで最終的にタグ付けされるまで、独自のブランチになります。 すべての作業は、異常を防ぐために、実際のリリースブランチではなく、「機能」または「ホットフィックス」ブランチで行われます。 高レベルのブランチへのマージは、常にリベースまたはスカッシュされます(混乱を避けるため)。 やり過ぎだとしても、大事なプロジェクトに必要なスキルを習得することが全体的な目的なので、気にしません。唯一の問題は、私が間違っているか不必要なことを完全にやっていることです。 編集2:元のフローチャートの悪い考えを修正し、ナビゲートしやすくしました。

1
例外処理のベストプラクティスまたは推奨事項 [閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私のプログラムの主な問題は、コード構造/組織とエラー処理の2つだと思います。Code Complete 2を読んでいますが、潜在的な問題を扱うために読むものが必要です。 たとえば、Webサイトで、ユーザーがjavascriptを介してデータを改ざんした場合にのみ何かが発生する可能性がある場合、そのことについて記述しますか?また、いつエラーをキャッチしませんか?入力として文字列とintを期待するクラスを作成し、それらが文字列とintではない場合、それを確認しますか、それとも間違ったパラメーターを渡した呼び出しメソッドにバブルさせますか? これはここでの単一の回答では答えられない広範なトピックであることを知っているので、私が探しているのは、適切な例外処理の実践を教えるとして一般に受け入れられている本またはリソースです。

11
マイクロ最適化-BAD対ゲーム開発
ゲーム開発では、ビジネスアプリケーションC#に多くのC / C ++があります。C / C ++開発者は、1行のコードがアセンブリにどのように変換されるかについて懸念を表明するのを見てきました。.NETでは、まれにILに入る人もいます。 C#では、「マイクロ最適化」は眉をひそめ、まれであり、通常は時間の無駄です。これは、ゲーム開発では当てはまらないようです。 この矛盾を具体的に引き起こすのは何ですか?ゲームは常にハードウェアの限界を押し上げていますか?はいの場合、ハードウェアが向上するにつれて、より高いレベルの言語がゲーム業界を引き継ぐことを期待する必要がありますか? ゲーム開発言語としてのC#の実現可能性に関する議論を探しているのではありません。私はそれがある程度行われたことを知っています。マイクロ最適化に焦点を当てます。具体的には、ゲーム開発とアプリケーション開発の違い。 ゲームによる更新私は、近代的で大規模な開発を意味します。EG MMORPG、Xbox、PS3、Wii ...

5
コーディング標準の均一性が高すぎる可能性はありますか?
均一性が大きすぎるということはありますか?私が仕事をする場所には、命名規則、アーキテクチャ、活用するフレームワークなどを含む標準があります。しかし、最近、より多くのスタイルを検討することについて多くの批判がありました。 たとえばif、複数行と1行でステートメントを記述する場合、たとえばの??代わりにc#null結合演算子を使用して== null、インデントなどのスペースの量を指定します。 私はこれが個人的なスタイルの選択にもっと入り始め、チームや会社全体で均一である必要はないようです。ある人が他の人がより明確に読むと考えるものはそうではないかもしれません。この「余分な」均一性に価値はありますか?

3
例外またはエラーコード
(主に)ネイティブクライアント(Windows、C ++)と通信するWebサービス(SOAP、.Net)を構築しており、クライアントにエラーを伝える最良の方法は何かを考えています(例:ログインサービスが利用できないSomethingBadHappenedまたはユーザーが見つからないなど)、クライアントに例外をスローするか、上記を行うために何らかのエラーコードモデルを使用するかを決定できませんでした。 クライアント側の処理であなたが好むもの:エラーコードを受け取るか、エラーの理由を含むServerFault例外を処理しますか? 1)なぜ例外を考えているのか:サーバー側のコードをより均一にするから 2)エラーコードを考えているのはなぜか:クライアント側の観点からより理にかなっていると考えるから 2)が本当に当てはまる場合、例外よりもエラーコードを探したいのでしょうか?それはここですか? また、ネイティブクライアントではなくマネージドクライアントと通信している場合、答えは変わりますか?

4
プログラマーの能力を最も正確に示すWebサイトはどれですか?
プログラマーを雇用していて、topcoder.comのトップ100のコーダーの1つ(stackoverflow.comのトップ100の1つ)のいずれかを選択できますか? 少なくとも私には、topcoder.comが問題を解決してコードを書く純粋な能力のより客観的な評価を与えるように思われます。同時に、明らかな技術的能力にもかかわらず、この人はソーシャルスキルのヒントを欠いている可能性があります-彼は純粋に「一人のコーダー」である可能性があり、他の人と助けたり仕事したりする能力がほとんどまたはまったくなく、移籍を支援するメンタリング能力を欠いている可能性があります他人への彼の技術的スキルなど 一方、stackoverflow.comは、少なくとも、問題のコーダーに対するピアの意見、および「チーム」の他の人に対する彼の存在と有用性と有用性の程度をはるかによく示すように見えます。同時に、スコアリングシステムは、多くの平凡な(または貧弱な回答)を投げただけの人が、ほぼ必然的に「評判」ポイントの正の合計を蓄積するようなものです。礼儀)5回以上のダウン投票の影響に対抗します。また、他の人は自分の評判ポイントを犠牲にする必要があるため、ダウン投票を(ある程度)落胆させます。同時に、技術的な貢献をほとんどまたはまったく行わない人は、いわば、ヒープの最上部に(たとえ近くに)着地するという評判を蓄積する可能性は低いようです。 それでは、この特定のコーダーがあなたの組織にとって有用であると思われる程度のより有用な指標を提供するのはどれですか?それらの中から選択できる場合、どのコーダーのセットをチームで使用したいと思いますか?

1
プログラミングにおける「解決」とはどういう意味ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 Resolve依存関係の挿入(インターフェイスへの実装の解決)、パッケージマネージャー(例:パッケージの依存関係の解決)、Web(例:ホスト名の解決)で、単語が使用される多くの場所で見ます。 では、コードのロジックを特別なものにして、誰かResolveが単純なConvert、Transformまたはさらには単語を選択するようにするのはGetなぜですか?

2
アンダースコアで変数/メンバーを開始すると、コンパイラが困惑することがありますか?
私は高校以来、このような変数を定義することを教えられてきました。 int _a; または int __a; アンダースコアで始まる変数を使用して一時変数に名前を付けるコンパイラーを最終的に困惑させるので、悪い慣習を検討する必要があります。 私の知る限り、これが名前の最後にアンダースコアを移動することを好む理由です: int a_; ただし、アンダースコア開始変数を使用するコードがたくさん見られます。そして、そのコードはVisual Studio 2010とg ++ 4.xの両方でかなりうまくビルドされます。 だから私は疑問に思う:これは最近の問題ではないのですか?最新のコンパイラは命名規則について賢いですか?

8
すべての列挙型を1つのファイルに含め、複数のクラスで使用するのは悪い習慣ですか?
私は意欲的なゲーム開発者であり、時折インディーゲームに取り組んでいます。しばらくの間、最初は悪い習慣のように思われたことをしていましたが、ここで経験豊富なプログラマーから答えをもらいたいです。 enumList.hゲームで使用するすべての列挙型を宣言するファイルがあります。 // enumList.h enum materials_t { WOOD, STONE, ETC }; enum entity_t { PLAYER, MONSTER }; enum map_t { 2D, 3D }; // and so on. // Tile.h #include "enumList.h" #include <vector> class tile { // stuff }; 主なアイデアは、1つのファイルでゲーム内のすべての列挙型を宣言し、使用する必要があるファイルで宣言するのではなく、特定の列挙型を使用する必要があるときにそのファイルをインポートすることです。これは、物事をきれいにするためです。1つの列挙にアクセスするためだけにページを開くのではなく、1か所ですべての列挙にアクセスできます。 これは悪い習慣ですか、何らかの形でパフォーマンスに影響を与えることができますか?

7
リファクタリングとオープン/クローズの原則
最近、きれいなコード開発に関するWebサイトを読んでいます(英語ではないため、ここにはリンクを入れません)。 このサイトで宣伝されている原則の1つは、オープンクローズド原則です。各ソフトウェアコンポーネントは、拡張用にオープンにし、変更用にクローズする必要があります。たとえば、クラスを実装してテストした場合、バグを修正するか、新しい機能を追加する(たとえば、既存のメソッドに影響を与えない新しいメソッド)ためにクラスを変更するだけです。既存の機能と実装は変更しないでください。 通常、インターフェイスIと対応する実装クラスを定義することにより、この原則を適用しますA。クラスAが安定(実装およびテスト)になったとき、通常はあまり変更しません(おそらく、まったく変更しません)。 コードに大きな変更を必要とする新しい要件(パフォーマンス、インターフェイスのまったく新しい実装など)が到着した場合、新しい実装を作成し、成熟していない限りB使用Aし続けBます。B成熟したときに必要なのは、Iインスタンス化の方法を変更することだけです。 新しい要件がインターフェースの変更も示唆している場合、新しいインターフェースI'と新しい実装を定義しますA'。ですからI、A凍結しており、残る実装限りとして生産システムのためI'およびA'それらを交換するのに十分安定していません。 そのため、これらの観察を考慮して、Webページが複雑なリファクタリングの使用を提案していることに少し驚いていました。 オープン/クローズド原則の実施と、ベストプラクティスとしての複雑なリファクタリングの使用の提案との間に矛盾や矛盾はありませんか?または、ここでのアイデアは、クラスの開発中に複雑なリファクタリングを使用できるということですAが、そのクラスが正常にテストされたら、凍結する必要がありますか?

3
クラス内の属性を事前に初期化することをお勧めしますか、それとも途中で追加することですか?
これが絶対に二日酔いの質問である場合は申し訳ありませんが、ベストプラクティスがどこにあるのか興味があり、Googleで良い答えを見つけることができないようです。 Pythonでは、通常、空のクラスをスーパーキャッチオールデータ構造コンテナー(JSONファイルのようなもの)として使用し、途中で属性を追加します。 class DataObj: "Catch-all data object" def __init__(self): pass def processData(inputs): data = DataObj() data.a = 1 data.b = "sym" data.c = [2,5,2,1] これにより、コンテナオブジェクトは基本的に何でも保存できるため、非常に大きな柔軟性が得られます。したがって、新しい要件が生じた場合は、DataObjオブジェクトに別の属性として追加します(コードで渡します)。 しかし、最近、コードの読み取りが非常に難しくなるため、これはひどい慣行であると私(FPプログラマー)に感銘を受けました。すべてのコードを調べて、DataObjが実際に持っている属性を把握する必要があります。 質問:柔軟性を犠牲にすることなく保守性を高めるために、これをどのように書き直すことができますか? 関数型プログラミングから採用できるアイデアはありますか? 私はそこにベストプラクティスを探しています。 注:1つの考えは、遭遇することが予想されるすべての属性でクラスを事前初期化することです。例えば class DataObj: "Catch-all data object" def __init__(self): data.a = 0 data.b = "" data.c = [] def processData(inputs): data = …


3
メインメソッドは、オブジェクトの作成とメソッド呼び出しのみで構成する必要がありますか?
私の友人から、ベストプラクティスは、mainメソッドを含むクラスには名前を付けMain、mainメソッドのみを含めることがベストプラクティスだと言われました。また、mainメソッドは入力のみを解析し、他のオブジェクトを作成し、他のメソッドを呼び出す必要があります。Mainクラスとmainメソッドは、何かをやるべきではありません。基本的に、彼はmainメソッドを含むクラスは次のようにすべきだと言っています: public class Main { public static void main(String[] args) { //parse inputs //create other objects //call methods } } ベストプラクティスですか?

6
印刷の使用法/ヘルプ(--help)のベストプラクティスと考えられるものは何ですか?
UNIXのCLI用のツールを作成する場合、プログラムにヘルプや使用法を出力するにはどうすればよいですか? 私は通常を使用しますがfprintf(stderr, "help text here");、それにはいくつかの問題があります。 まず、を使用すべきかどうかはわかりませんstderr。大丈夫ですか、それとも使用すべきstdoutですか? ご想像のとおり、ヘルプテキストは非常に長く、ツールのオプションの数によって異なります。今、私は通常、"strings like that\n"2番目のパラメータにいくつかを入れます。ただし、これにより、ソースコードが50行以上のヘルプテキストで埋められます。簡単に管理できるものではありません。代わりに何をすべきですか? ツールがCまたはCに似た言語で記述されていない場合、可能であればhere-docsを使用する傾向があります(最も顕著なのはPerlです)。私はCでそれを使用できませんが、私が使用できるようなものがありますか? 私はそれを入れて検討していたheaderfile.hの内側には#define HELP "help text here"、私は野生の中でそれを見たことがない、私は実際にそれを使用する必要があるかどうかわかりません。 理想的には、テキストを外部ファイルに入れて含めることができます。#includeただし、そのために使用するのは間違っているようです。どうすればいいですか? アイデアは、ヘルプテキストを用意して、簡単に管理できるようにすることです。ソースコード内に配置することは、あまり便利ではありません。

3
例外や冗長性なしに入力検証を実行する方法
特定のプログラム用のインターフェイスを作成しようとすると、通常、検証されていない入力に依存する例外をスローしないようにします。 よくあることは、次のようなコードを考えたことです(これは単なる例であり、実行する機能は気にしないでください(Javaの例))。 public static String padToEvenOriginal(int evenSize, String string) { if (evenSize % 2 == 1) { throw new IllegalArgumentException("evenSize argument is not even"); } if (string.length() >= evenSize) { return string; } StringBuilder sb = new StringBuilder(evenSize); sb.append(string); for (int i = string.length(); i < evenSize; i++) { sb.append(' …

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