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

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

8
Linqが.NETプログラマーに気のめいるような影響を与えていますか?
私たちの多くは、jQueryを使用してクエリ文字列を取得するなどの非常に正気でないことを行う方法を尋ね始めた約1年前に、jQueryでこの現象を見始めました。ライブラリ(jQuery)と言語(JavaScript)の違いは、多くのプログラマーで明らかに失われ、多くの不適切で複雑なコードが必要のない場所に書き込まれます。 たぶんそれは私の想像だけかもしれませんが、ソートされた配列の範囲を見つけるなど、人々がLinqで同様の非常識なことをするように求めている質問の数が増えていると確信しています。Linq拡張機能がその問題を解決するのにどれほど不適切であるかを克服することはできませんが、さらに重要なことは、著者が理想的な解決策が実際にそれについて考えずにLinqを含むと仮定したという事実です(私が知る限り)。私たちは歴史を繰り返しており、言語(C#/ VB.NET)とライブラリ(Linq)の違いがわからない新世代の.NETプログラマーを育てているようです。 この現象の原因は何ですか?誇大広告ですか?カササギの傾向?Linqは魔法の形としての評判を獲得しましたか?実際にコードを書く代わりに、正しい呪文を発声するだけでいいのでしょうか?私はそれらの説明にはほとんど満足していませんが、他に何も考えられません。 さらに重要なのは、それが本当に問題なのか、もしそうなら、これらの人々を啓発するための最善の方法は何ですか?

8
条件の割り当ては条件の一部ですか?
Cで2つの文字列を連結する関数を書きたいと仮定しましょう。それを書く方法は次のとおりです。 void concat(char s[], char t[]){ int i = 0; int j = 0; while (s[i] != '\0'){ i++; } while (t[j] != '\0'){ s[i] = t[j]; i++; j++; } s[i] = '\0'; } ただし、K&Rの本では、特にwhileループの条件部分にできるだけ多くを含めて、異なる方法で実装しています。 void concat(char s[], char t[]){ int i, j; i = j = 0; while (s[i] …

5
Java Swingクラスをいつ拡張する必要がありますか?
継承の実装に関する私の現在の理解では、IS-A関係が存在する場合にのみクラスを拡張する必要があります。親クラスがさらに異なる機能を持つより具体的な子タイプを持つことができるが、親で抽象化された共通要素を共有する場合。 私のJava教授が私たちにすべきだと勧めていることのために、私はその理解に疑問を抱いています。彼は、JSwing私たちがクラスで構築しているアプリケーションのために 一つは、すべての拡張する必要がありますJSwingクラス(JFrame、JButton、JTextBox(部品サイズ、部品ラベルなどのような)別のカスタムクラスに、など)と、それらに関連するGUIカスタマイズを指定します これまでのところこれでいいのですが、彼はさらに、すべてのJButtonが独自のカスタム拡張クラスを持つべきであり、唯一の識別要素はラベルであるとアドバイスしています。 たとえば、GUIに2つのボタンOkayとCancelがある場合。彼は、以下のように拡張することを推奨しています。 class OkayButton extends JButton{ MainUI mui; public OkayButton(MainUI mui) { setSize(80,60); setText("Okay"); this.mui = mui; mui.add(this); } } class CancelButton extends JButton{ MainUI mui; public CancelButton(MainUI mui) { setSize(80,60); setText("Cancel"); this.mui = mui; mui.add(this); } } ご覧のとおり、唯一の違いはsetText機能にあります。 それでは、この標準的な慣習はありますか? ところで、これが議論されたコースは、Javaのベストプログラミングプラクティスと呼ばれています [教授からの返信] そこで私は教授と問題について話し合い、答えに挙げられているすべての点を挙げました。 彼の正当性は、サブクラス化がGUI設計標準に従って再利用可能なコードを提供することです。たとえば、開発者が1つのウィンドウでカスタムボタンOkayとCancelボタンを使用している場合、同じボタンを他のウィンドウにも配置する方が簡単です。 理由はわかりますが、それでも継承を利用してコードを脆弱にしているだけです。 後で、開発者はボタンを誤って呼び出して変更setTextする可能性がありOkayます。その場合、サブクラスは単に迷惑になります。

7
エラー抑制に対する引数
私たちのプロジェクトの1つで、次のようなコードを見つけました。 SomeClass QueryServer(string args) { try { return SomeClass.Parse(_server.Query(args)); } catch (Exception) { return null; } } 私の知る限り、このようなエラーを抑制することは、元のサーバーの例外から有用な情報を破壊し、実際に終了する必要があるときにコードを継続させるため、悪い習慣です。 このようなすべてのエラーを完全に抑制するのが適切なのはいつですか?

5
別のクラスのClassCollectionを作成することをお勧めしますか?
Carクラスがあると言いましょう: public class Car { public string Engine { get; set; } public string Seat { get; set; } public string Tires { get; set; } } 駐車場に関するシステムを作成しているとしましょう。私は多くのCarクラスを使用するので、クラスを作成しCarCollectionますFindCarByModel。 public class CarCollection { public List<Car> Cars { get; set; } public Car FindCarByModel(string model) { // code here return new Car(); …

16
プログラミング時に他の数値ベースを使用する理由
同僚と私は、10以外のベースで数字をプログラムするために誰かが邪魔にならない理由を考え出すことに心を曲げてきました。 私はおそらくあなたが作業している正しいベースに変数を置くことでより長い方程式を最適化できることを提案しました(たとえば、残りのない何かの5つのセットしか持っていない場合はベース5を使用できます)が、私はわからないそれが本当なら。 何かご意見は?

7
コピー/貼り付け/スパゲッティプログラマを変換して光を見る方法は?
この質問はこれに触発されました。他の質問はローカライズされていると見なされていましたが、根本的な問題は業界では非常に一般的なものだと思います。私はこれを読んで私がこのものを作り上げていると思う開発者が何人かいることを知っています、そして彼らは誰もが自分の仕事を気にかけ、学びたい方法を返信するかもしれませんが、他のプログラマーSEの投稿を見るだけです(適切な場合)私はそれが普遍的に真実ではないことを知っています。 たとえば、チームに(または大多数)の標準操作手順がコピー/貼り付けであり、十分な関数呼び出しと変数を追加するだけですべてが解決できると考えている人がいるとします。この人はTDD、DRY、SOLIDのことを聞いたことがなく、仕事で忙しい40時間を超えて、一度も1つの方法論/実践/デザインの本を読んだことがありません。 過去に、私(および他の人)は、どのようにOODを教えるのかと尋ねてきました。しかし今、私はそれが正しい質問ではないと考えています。本当の問題は、そのような人/チームにどのようにアプローチし、物事のより良い方法に興味を持たせるかです。どのように彼らに学ぶよう促しますか?それがなければ、彼らの机に戻っていつもやってきたことを完全に満足していれば、すべての教育、会議、講義、議論は役に立たないようです。 私はそのような多くの人々と仕事をしています。彼らは実際には非常に優秀な人物ですが、「コーディングが終わったので、リファクタリングしてDXMを幸せにするために複数のクラスに分割するだけです」と聞いたときは嫌いです。きれいで、読みやすく、保守可能なコードをリファクタリングしませんが、そうしないとonlyられるだけです。私は彼らが学習できることを知っていますが、やる気の一般的な欠如があるように見えます。 私が仕事を提供するとき、それは一般的にずっと少ないバグを持ち、私が所有する仕事は決してクラスの5000行の怪物になりませんでした。他の人は、「あなたのコードは私たちのものよりもずっときれいで読みやすい」というようなコメントをするので、違いがわかります。しかし、同時に、彼らは何をしていても40時間の報酬を受け取ると信じているので、QAに3日間丸ごと入れてはいけないバグを探しても気にしない最初の場所。または、1つのクラスを変更するのに1週間かかるため、非常に多くの依存関係があり、最終的には触れることになります。ただし、「そのクラスは別の方法で記述されている必要があります」と表示されることはありません。 これらの状況で何かできることはありますか?成功した人はいますか?または、そのような考え方をプロジェクトの重要ではない部分に分離し、損害を最小限に抑えることが最善ですか? 注:「モチベーションの欠如」と言うとき。彼らは単に思いやりをやめたので、仕事をしたり、良い仕事をしたりする動機が不足しているとは思いません。私たちのチームのほとんどは、実際はまったく反対です。彼らは間違いなく製品を気にします。夜と週末に働く人がいます。私が乗り越えようとしているのは、習慣とスキルを改善することです。彼らは実際にはそれほど仕事をする必要はありません。「40時間」のことで、この投稿は少しネガティブに聞こえたと思います。

7
コードモンキーであることの何が問題になっていますか?(または、コードモンキーとは何ですか?)[終了]
プログラマーは、軽的な方法で「コードモンキー」であることについて話す傾向があります。「そこでは動作しません、あなたはただのコード猿になります!」。 私は2つの仕事のオファーを持っています。1つは小さな会社で、もう1つは非常に大きな会社(同じ給料)でです。私の友人は私が大企業のコードモンキーになると言ったばかりで、小さな会社は私を「コードモンキー」に変えるよりもやりがいがあることを直接知っています。 「コードモンキー」プログラマと「本物の」プログラマの違いを本当に理解していません。詳しく説明してください。プログラミングが大好きなので、コンピュータープログラミング(コードモンキー)に座るという考えは悪くないようです。プログラマーがプログラミングを楽しんでいる場合、「コードモンキー」とはどういう意味ですか?


6
値を別の表現に変換し、それを元の場所に変換するコードは悪いですが、どのように?[閉まっている]
私は悪いプログラミング習慣に関する記事を読んでいました。 言及した- 値を別の表現に変換してから元の位置に戻す「ヨーヨーコード」(例:小数を文字列に変換してから小数に戻す、または文字列をパディングしてからトリミングする) 彼が与えた特定の例がプログラムを書くのに悪い方法である理由を私は理解していません。値を使用できるように状況が必要な場合は、元に戻すことは問題ないようです。 誰でもこれについて説明できますか?

1
raw、weak_ptr、unique_ptr、shared_ptrなど…賢明な選択方法は?
C ++には多くのポインタがありますが、C ++プログラミング(具体的にはQt Frameworkを使用)で5年ほど前に正直に言うと、古い生のポインタのみを使用します。 SomeKindOfObject *someKindOfObject = new SomeKindOfObject(); 私は他にも多くの「スマート」ポインターがあることを知っています。 // shared pointer: shared_ptr<SomeKindofObject> Object; // unique pointer: unique_ptr<SomeKindofObject> Object; // weak pointer: weak_ptr<SomeKindofObject> Object; しかし、私はそれらをどうするか、生のポインタの比較で彼らが私に何を提供できるのかについて少しも考えていません。 たとえば、次のクラスヘッダーがあります。 #ifndef LIBRARY #define LIBRARY class LIBRARY { public: // Permanent list that will be updated from time to time where // each items …

8
ここで例外をスローするのはアンチパターンですか?
コードレビューの後、デザインの選択について議論したところです。あなたの意見は何でしょうか。 このPreferencesクラスは、キーと値のペアのバケットです。NULL値は正当です(重要です)。特定の値がまだ保存されていない可能性があり、要求されたときに事前定義されたデフォルト値で初期化することにより、これらのケースを自動的に処理したいと考えています。 説明したソリューションでは、次のパターンを使用しました(注:これは実際のコードではなく、明らかに-説明のために単純化されています)。 public class Preferences { // null values are legal private Map<String, String> valuesFromDatabase; private static Map<String, String> defaultValues; class KeyNotFoundException extends Exception { } public String getByKey(String key) { try { return getValueByKey(key); } catch (KeyNotFoundException e) { String defaultValue = defaultValues.get(key); valuesFromDatabase.put(key, defaultvalue); return defaultValue; } …

1
私はJavaScriptをよく知っていますが、コーディングインタビューを爆弾します[非公開]
だから、私は現在、フロントエンド開発者としての新しい地位を探しています。私はJavaScriptを非常によく知っており、クロージャ、カリー化、プロトタイプ継承、デザインパターン、アプリのパフォーマンス、およびフロントエンドアーキテクチャ全体について詩的にワックスをかけることができます。しかし、それでも私は就職面接を爆撃することになります。(FYIインタビューしている仕事のほとんどは、何らかのMVCフレームワークでSPAを構築するためのものです) 通常、コーディングテストは、私がプロとして出会ったことのない小さなコードスニペットです。ある種の数学の問題を解決する関数を書くように。携帯電話を片手に持ちながらコードを書こうとすることや、見知らぬ人に画面を見たり、入力するすべての文字を見たりするという厄介さは別として、私は通常、この種のものを現実の世界では見ません。 これは私が不足している深刻なスキルセットですか、面接官は無関係な質問をします。関数型プログラミングとアルゴリズムチョップに取り組むべきだと思いますが、Web(または印刷物)に多くの良いリソースが見つかりませんでしたか?

8
堅牢なコードの作成とオーバーエンジニアリング
あなたは、あなたがオーバーエンジニアリングなしで可能な限り最も堅牢なコードを書いていることをどうやって知っていますか? 私は自分のコードが取ることができるあらゆる可能なパスについて考えすぎていることに気づき、それは時々時間の無駄のように感じます。それはあなたが書いているプログラムの種類に依存すると思いますが、決して起こらない状況を考慮に入れて私の時間をあまり使いたくありません。

9
将来の校正コード
私が仕事をしている開発者は、「将来のためにこれを追加しました」または「いつか欲しいと思うので、これを行うのは良い考えだと思う」といつも言っています。彼らが将来の変化を予測しようと積極的に取り組んでいるのは素晴らしいことだと思いますが、それは不必要であり、決して必要ではないかもしれないので非生産的なコードを書くリスクがあると考えるのは仕方がありませんそれのために新しい)。適切で整理されたコードを書くだけでは、将来の校正の議論は無効ですか?

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