ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

3
関数型プログラミングで管理可能なコードを書く方法は?
私は関数型プログラミング(JavaScriptとNode.jsを使用)を開始しましたが、見た目からは、作成しているコードは、オブジェクト指向のパラダイムの一種。 OOPを使用すると、コードを簡単に管理し、拡張可能にするためのプラクティスに精通しています。しかし、関数型プログラミングでも同様の慣習があるのは確かです。

4
Cポインターの優先順位はどのように決定されますか?
私は理解に苦労している2つのポインタ宣言に遭遇しました。優先ルールの私の理解は次のようになります。 Operator Precedence Associativity (), [ ] 1 Left to Right *, identifier 2 Right to Left Data type 3 しかし、これを与えられても、次の例を正しく評価する方法を理解することはできないようです。 最初の例 float * (* (*ptr)(int))(double **,char c) 私の評価: *(ptr) (int) *(*ptr)(int) *(*(*ptr)(int)) 次に、 double ** char c 2番目の例 unsigned **( * (*ptr) [5] ) (char const *,int *) *(ptr) …
14 c  pointers 

5
128/256/4096バイトオフセットに丸められたVARCHARサイズを使用する理由はありますか?
データベーススキーマでは、VARCHARサイズがバイトオフセット128/256または4096に丸められることがよくあります。これも以前に行ったことがあり、その背後にあるアイデアはおそらく効率的なものでした。 しかし、今日そうする正当な理由はまだありますか?最近ではVARCHARサイズとして '50'、 '100'、または '200'をよく使用します。これらはより自然で、通常はユーザーに対する検証チェックでも表示されるためです。

1
アスペクト指向、サブジェクト指向、およびロール指向プログラミングの違いは何ですか?
これら3つのパラダイムを説明する多くの論文があることは知っていますが、模式的な説明を探しています。 ここにはアスペクト指向プログラミングの非常に良い説明がいくつかありますので、Stack Overflowの人々が配信に慣れているような質の高い答えを得るためにこの質問をしています。

5
単体テスト-はじめに
ユニットテストを始めたばかりですが、そのすべてのポイントを本当に理解しているかどうかはわかりません。チュートリアルと本をすべて読んでいますが、2つの簡単な質問があります。 ユニットテストの目的は、実際に書いたコードをテストすることだと思いました。ただし、テストを実行できるようにするには、元のコードを変更する必要があるようです。この時点では、実際に作成したコードではなく、テスト用に作成したコードをテストしています。 ほとんどのコードは外部ソースに依存しています。ただし、コードをリファクタリングすると、元のコードが破損したとしても、外部ソースはテストケース内の単なるマックアップであるため、テストは正常に実行されます。単体テストの目的に反しませんか? ここで口がきけない場合は申し訳ありませんが、誰かが私を少し啓発できると思いました。 前もって感謝します。

8
複雑さをいつ除去すべきか?
設計パターンが必要になる前に実装することにより、時期尚早に複雑さを導入することは良い習慣ではありません。 しかし、すべての(またはほとんどの)SOLIDの原則に従い、共通の設計パターンを使用すると、機能と要件が追加または変更され、設計が必要に応じて保守可能かつ柔軟に維持されるため、多少の複雑さが生じます。 しかし、その複雑さが導入され、チャンピオンのように機能するようになったら、いつそれを削除しますか? 例。クライアント用に作成されたアプリケーションがあります。元々従業員に昇給を与えるいくつかの方法がある場所で作成されたとき。戦略パターンとファクトリーを使用して、プロセス全体をきれいに保ちました。時間が経つにつれて、アプリケーション所有者によって追加または削除される特定のraiseメソッド。 時間が経ち、新しい所有者が引き継ぎます。この新しい所有者は頑固で、すべてをシンプルに保ち、昇給する方法は1つしかありません。 戦略パターンに必要な複雑さはもはや必要ありません。現在の要件からこれをコーディングする場合、この余分な複雑さは導入しません(ただし、必要に応じてほとんど、またはまったく作業をせずに導入できることを確認してください)。 戦略の実装を今すぐ削除しますか?この新しい所有者が昇給の方法を変えることはないと思います。しかし、アプリケーション自体は、これが起こる可能性があることを実証しています。 もちろん、これは新しい所有者が引き継ぎ、多くのプロセスを簡素化したアプリケーションのほんの一例です。数十のクラス、インターフェース、ファクトリーを削除し、アプリケーション全体をよりシンプルにすることができました。現在の実装は正常に機能し、所有者はそれで満足していることに注意してください(そして、議論された複雑さのために、私は彼女の変更を非常に迅速に実装できたことに驚き、そしてさらに幸せです)。 この疑いのほんの一部は、新しい所有者が私をもう使用しない可能性が高いためです。大きな収入源ではないので、他の誰かがこれを引き継ぐことを本当に気にしません。 しかし、私は2つの(関連する)ことを気にします コードを理解しようとするとき、新しいメンテナーが少し難しく考える必要があることに少し気を配ります。複雑さは複雑さであり、私に続く心理マニアを怒らせたくありません。 しかし、競合他社がこの複雑さを認識し、仕事に時間を費やすためにデザインパターンを実装するだけだと考えていることをさらに心配しています。次に、この噂を広めて、他のビジネスを傷つけました。(私はこれが言及されたと聞いています。) そう... 一般に、以前は必要だった複雑さは、それが機能し、複雑さに対する歴史的に実証された必要性があったとしても削除されるべきですが、将来必要になるという兆候はありませんか? 上記の質問が一般的に「いいえ」と回答されたとしても、プロジェクトを競合他社(または見知らぬ人)に引き渡す場合、この「不要な」複雑さを取り除くことは賢明でしょうか?

5
AntはJavaビルドの「メインストリーム」のままですか?
開発者IDEでコンパイルされたクラスを単純化するバッチコマンドファイル(windows .bat)を、より包括的なAntビルド(つまり、CVSから取得、コンパイル、jar、アーカイブ、電子メールなど)でゆっくりと置き換えています。 Antで多くの時間を学習(および問題のデバッグ)に費やしてきたので、これらのタスクに使用するのが最も快適です。しかし、Antは、私が最初に学習を始めたときと同じように広く使用されているのか、それとも「世界は新しいものに(そしておそらくよりスマートに)変わったのか」と疑問に思います。(たとえば、Mavenビルドマテリアルが配布されるようになりましたが、これは使用したことがありません。) この質問の実際の重要な点は、新しい開発者にAntを学ぶように勧めるかどうか、またはビルドのために他の何かを学ぶべきかどうかです。 私は決してトレンドを熟知しているわけではないので、他のJava開発者から彼らが最高のビルドツールだと思うこと、そして新しい開発者が学ばなければならないと思うことを聞くのは素晴らしいことです。
14 java  training  maven  builds  ant 

1
WindowsはDjangoコミュニティの「二流市民」ですか?
私は現在、最初に自分自身をホストし、その後顧客が自己ホストできるようにする予定のWebアプリケーションの研究開発を行っています。 私の仕事は、Webフレームワークを評価して、最初に最大の生産性と保守の容易さを提供するかどうかを確認することです。また、お客様が制御する環境への展開を簡単にサポートできます。 私たちのチームは、ASP.NET(MVCおよびWebforms)およびRuby on Railsの経験があります。 Railsでの経験では、Windowsの展開は非常にタブーなテーマであり、IRCまたはStackOverflowに関する質問はすべて、「なぜLinuxではないのか」という急な反応に遭遇します。ただし、この場合、ターゲット市場はWindowsまたはLinuxサーバーを実行している可能性があります。 これはDjangoの土地でも同じですか? ゴミのパフォーマンスは可能ですか? 痛みをなくすことは可能ですか? それは合理的であると見なされ、Linuxを実行したくないという完全に愚かなアイデアとして扱われていませんか?

5
なぜそれほど多くのfor(;;)コンストラクトが表示されるのですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 私の考え方では、forループを使用して、既知の範囲または決定可能な範囲を反復処理します。 String[] names = //something; for ( int i = 0; i < names.length; i++ ) { //do stuff } これは(iの範囲を除いて)と同等です: String[] names = //something; int i = 0; while (i < names.length ) { // do stuff i++; } 言い換えれば、forループは、一般的に使用されるwhile構造の単純な(非常に有用な)構文糖です。 しかし、私for(;;)は機能的にと同等であるウェブ上の多くの構造を見ていますwhile(true) これの理由は何ですか?無限forループが無限whileループよりも優先されるのはなぜですか? // whileループをまったく使用しないjavaテキストも見ました!次のような巨大な構成要素につながる: String input = …

7
チーム内のさまざまなプログラミングスタイルに対処する方法
小規模な開発チーム(開発者3人のみ)があり、最近、新しいチームメンバーを獲得しました。彼は賢いコーダーですが、彼のコーディングスタイルは私たちのものとはまったく異なります。既存のコードベースには、ほとんどが読み取り可能で、クリーンで保守可能なコードが含まれていますが、新しいチームメンバーは多くのファイルをすばやく変更し、,いハックとショートカットを導入し、あらゆる場所で定義を使用し、間違った場所に関数を追加します。 私の質問は、他の人が以前にそのような状況を経験したことがあるかどうか、そして誰かが彼と話す方法に関するヒントを持っているかどうかです。

3
Javaのパッケージ命名規則のポイントは何ですか?
Javaが(おそらく仮定の)ドメイン名の逆をパッケージの名前として使用する理由を理解していませんが、一部の人々が使用するドメイン名と所有している製品との間にはほとんど関係がありません。多くの開発者はドメインさえ持っていません。 この命名規則がある場合、その理由は何ですか?
14 java  packages 

3
Web設定で接続文字列を設定するのは良い習慣ですか?
最近、仕事で同僚の何人かと議論しました。彼らは、.DLLに暗号化された文字列接続がある方が良いと言ったからです。そして、web.configで暗号化された文字列接続を暗号化しないのはなぜだと言いましたか?エンティティフレームワークは、たとえば、アプリケーションのWeb構成で接続の名前を検索するため、同じであり、より優れています。セキュリティポイントから、何がベストか、何がベストプラクティスかを知りたいですか?

3
構文と文法の違いは何ですか?
構文とセマンティクスの違いを理解しています- 構文:シンボルを組み合わせて有効な式またはステートメントを形成する方法。 セマンティクス:式またはステートメントを形成する記号の意味。 しかし、文法は何ですか?たとえば、ある構文は「文法的には間違っているが、構文的には正しい」と人々が言うのを時々聞きます。どういう意味ですか?

8
レガシーシステムを推進する管理を処理する方法
現在、私は有料のインターンシップに参加しており、過去5年間にわたって(異なる時期に)複数の開発者によって開発された古いシステムを維持する任務を負っています。経営陣は「システムは生命維持中」に同意しており、現在システムを使用しているエンドユーザーからかなり定期的にバグ報告を受け取っています。 現在、経営陣はプロジェクトをさらに1年間延長したいと考えており、その過程でユーザーベースのほぼ3倍になります。 インターン(または任意のエントリーレベルのポジション)として、「プッシュバック」する方法を教えてください。オープンエンドの文書ではありますが、私は懸念を述べた報告書をすでに書いています。変更を提案するためのプロトコルまたはドキュメントタイプはありますか?私は提案をする立場にありますか、それとも単に古いシステムをサポートし続けるべきですか? 明確にするために、ソフトウェア開発は私の会社の主要なビジネスではありません。そのため、内部プロトコルは存在しません。さらに、プロジェクトには正式な文書もまったくなく、要件文書もありません。開発は非常にアドホックです。

4
チェックインコードに競合マーカーを残すことの正当性はありますか?
競合マーカーを検討してください。すなわち: <<<<<<< branch blah blah this ======= blah blah that >>>>>>> HEAD この質問を投稿する動機となった特定のケースでは、担当のチームメンバーがアップストリームからブランチへのマージを完了したばかりで、場合によっては、これらをコメントとして、今までの内容に関する一種のドキュメントとして残していました解決しました。彼はそれをコンパイルされた状態のままにして、テストに合格したので、あなたが思うほど悪くはありません。 本能的には、私は本当にこれに異議を唱えましたが、悪魔が自分自身を擁護しているので、なぜ彼がそれをしたのかがわかります: マージの結果として変更されたものを他のチーム開発者に強調するためです。 特定のコードに精通している人は、コメントが示す懸念に対処できるため、推測する必要がありません。 アップストリームマージは適切な痛みであり、すべてを適切かつ完全に解決するための時間を正当化するのが難しい可能性があるため、いくつかの半完全なFIXME通知が必要です。 私の反対は本能的でしたが、それを合理的に正当化するか、自分の立場をより賢く見たいと思います。誰かが私にいくつかの例や、誰かがこれをやっていると悪い時間を過ごした経験や、それが悪い習慣である理由を教えてもらえますか(または悪魔の擁護者を演じてそれをサポートすることができます)。 私自身の当面の懸念は、関係するファイルの1つを編集し、変更を取得し、実際の競合を取得したが、コメントされたファイルも取得した場合、明らかに迷惑になることでした。そうすれば、本当に非常に面倒なファイルになっていたでしょう。幸いなことにそれは起こりませんでした。

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