ソフトウェア工学

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

10
すべての関数呼び出し/ブロックが個別のスレッドで実行されるプログラミング言語?[閉まっている]
私は現在、すべての関数呼び出し/新しいブロック(if句、ループなど)が別のスレッドで動作するという考え方で、楽しみのためにプログラミング言語を作成しています。新しいスレッドを作成する代わりに、標準では自動的にそれを行う必要があります。メインスレッドで実行する場合は、それを指定する必要があります。 私はマルチスレッドの並列プログラミングについて知らされていませんが、基本(未来、スレッドセーフオブジェクト)は知っています。したがって、そのような言語がどのように構文的に賢く見えるのか、そもそも可能であるのかと疑問に思っています 目標は、それを「有用」にすることではなく、それを楽しむことと学習体験のためのものです。 (投稿する場所が間違っている場合は申し訳ありません。もしそうであれば、私のような質問が許可されている適切な場所を教えていただければ幸いです。)

4
DDDでは、検証アプリケーションロジックですか、それともドメインロジックですか?
DDDを使用してフォームをモデリングするとします。フォームには特定の種類のビジネスルールが関連付けられている場合があります。おそらく、学生でない場合は収入を指定する必要があり、結婚していることを示す場合は子供をリストする必要があります。国を指定した場合は、有効な国が必要です。 この種の検証は、ドメインまたはアプリケーション層に存在しますか?私が検討していたいくつかの他の問題: Laravelなどの特定のフレームワークは、要求がコントローラーに到達する前に入力を検証できる検証ルールを提供します。そのレベルで検証が行われると、DDDが破損しますか? 国が有効かどうかを判断する場合など、通常は世界のすべての国のデータベーステーブルを照会するだけです。ただし、DDDでは、これは(私の理解から)ドメイン層で行われる可能性があります。ドメインレイヤーはDBへのアクセスを許可されていますか、または非SQL検索を使用して有効な国を決定する必要がありますか? アプリケーションとドメイン層の両方で入力を検証する必要がありますか?

2
Pythonでユニバーサル改行モードが非推奨になったのはなぜですか?
私はちょうどことに気づいユニバーサル改行ファイル操作の機能は、その方法アウトになるようです。 Python 3.5 openのmodeパラメーターのドキュメントには、非推奨であることが示されています。 'U' ユニバーサル改行モード(非推奨) 少なくともPython 3.2までさかのぼりopen、mode引数の使用法を文書化するときに、同様の「後方互換性のみ」の警告が含まれています。 'U' ユニバーサル改行モード(後方互換性のため。新しいコードでは使用しないでください) Python 2.7でも、同様の警告がのドキュメントに記載されていますio.open。 この理由は何ですか?
26 python  io  deprecation 

8
nullが悪である場合、値が有意に欠落する可能性がある場合は何を使用する必要がありますか?
これは、繰り返し繰り返されている規則の1つであり、私を困惑させます。 ヌルは悪であり、可能な限り避けるべきです。 しかし、しかし-私の素朴さから、私に悲鳴を上げさせてください-時には価値が意味なく欠けていることがあります! 私が今取り組んでいるこのアンチパターンに乗った恐ろしいコードから来る例でこれを聞かせてください。これは、中核となるマルチプレイヤーウェブターンベースのゲームであり、両方のプレイヤーのターンが同時に実行されます(ポケモンのように、チェスとは逆に)。 各ターンの後に、サーバーは更新のリストをクライアント側のJSコードにブロードキャストします。更新クラス: public class GameUpdate { public Player player; // other stuff } このクラスはJSONにシリアル化され、接続されているプレーヤーに送信されます。 ほとんどのアップデートには当然プレイヤーが関連付けられています-結局のところ、どのプレイヤーがこのターンにどのプレイヤーを動かしたかを知る必要があります。ただし、一部の更新プログラムでは、意味のあるPlayerを関連付けることができません。例:アクションなしのターン制限を超えたため、ゲームは強制的に結び付けられました。このような更新では、プレーヤーを無効にすることは有意義だと思います。 もちろん、継承を利用することでこのコードを「修正」できます。 public class GameUpdate { // stuff } public class GamePlayerUpdate : GameUpdate { public Player player; // other stuff } ただし、次の2つの理由から、これがどのように改善されるかはわかりません。 JSコードは、定義されたプロパティとしてPlayerのないオブジェクトを受け取るだけです。これは、値が存在するかどうかを確認する必要があるため、nullの場合と同じです。 別のnull可能フィールドをGameUpdateクラスに追加する場合、この設計を続行するには多重継承を使用できる必要がありますが、MIはそれ自体が悪であり(経験豊富なプログラマーによると)、さらに重要なことには、C#はそうではありません持っているので使用できません。 このコードのこの部分は、経験豊富で優秀なプログラマーが恐怖で叫ぶことになる非常に多くのコードの1つであるという感想があります。同時に、この場所でこのヌルがどのように何かを傷つけているか、代わりに何をすべきかを見ることができません。 この問題について説明してもらえますか?

1
コード分​​析の目的は何ですか?いつ使用する必要がありますか?
Visual Studioのコード分析について聞いたことがありますが、使用しませんでした。私はMSDNを読みましたが、それでもコード分析の実際の使用法を理解していません。 StyleCopと同じではありませんか? どこかで、FxCopも言及されました。コード分​​析との違いは何ですか? すべてのプロジェクトでコード分析を使用する必要がありますか?同僚が行ったコードレビューは不十分ですか?

9
「時期尚早な最適化がすべての悪の根源」についての誤解に対処する方法は?
私は、一般的な英語の意味で「最適化」とみなされるものに対して独断的に多くの人々に出会いました。そして、彼らは非常にしばしば「部分的な」引用「早すぎる最適化はすべての悪の根源」です彼らのスタンスの正当化として、私が話していることは何でも「時期尚早の最適化」であると解釈することを意味します。しかし、これらのビューは非常に馬鹿げているため、最も純粋な「単純な」実装からのあらゆる種類のアルゴリズムまたはデータ構造の逸脱、または少なくとも以前のやり方からの逸脱を排除します。「パフォーマンス」や「最適化」について聞いてからシャットダウンした後に再び「耳を開く」ように、このような人々にどのようにアプローチできますか?「この男は10行のコードに2週間を費やしたい」とすぐに思わせることなく、パフォーマンスに影響を与える設計/実装のトピックについて議論するにはどうすればよいですか。 さて、「すべての最適化は時期尚早ので、悪である」かどうかのスタンスがいるすでにここにカバーされてだけでなく、ウェブの他のコーナーで、すでに議論されている最適化は時期尚早ので、悪の場合に認識する方法が、残念ながら、現実の世界には、反最適化への信仰への挑戦に対してあまり開かれていない人々がまだいます。 以前の試み 数回、「時期尚早の最適化は悪い」↛「すべての最適化は悪い」と説明するために、ドナルドクヌースから完全な引用を提供しようとしました。 私たちは小さな効率を忘れてはなりません。約97%の時間です。早すぎる最適化はすべての悪の根源です。しかし、その重要な3%でチャンスを逃してはなりません。 しかし、見積もり全体を提供するとき、これらの人々は実際に、私がやっていることはPremature Optimization™であると確信し、耳を傾けて拒否します。それはまるで「最適化」という言葉が彼らを怖がらせるかのようです:数回、「optimiz(e | ation)」という言葉の使用を単に避けることで、拒否されずに実際のパフォーマンス改善コードの変更を提案することができました( 「パフォーマンス」も同様です-その言葉も怖いです)代わりに、「代替アーキテクチャ」や「改善された実装」のような表現を使用しています。このため、これは本当に独断的であり、実際に私が言うことを批判的に評価し、それを不要であるか、費用がかかりすぎると却下するのではないようです。

8
依存関係を他のプログラマーに非常に明白にすることを促進するプログラミングパラダイムはありますか?
私は、さまざまなアーティファクトをリンクする迷路のような依存関係を持つ多くのストリームとレイヤーを介して複数のシステムを調達するデータウェアハウスで働いています。ほぼ毎日、このような状況に陥ります。何かを実行しますが、機能しません。大量のコードを調べますが、数時間後には、今わかっていることのごく一部のプロセスマップを概念化することができました。後日必要になるので、誰かに尋ねて、この他のストリームを最初に実行する必要があることと、ここでチェックした場合(他のコード化された依存関係の巨大なスタックの一見arbitrary意的な部分を示す)、これを見た。とてもイライラします。 再帰的なレベルのコードや、さらにはデータにオブジェクトを深く埋め込むのではなく、オブジェクト間の依存関係をより明確に見えるようにするためにもっとや​​った方がいいだろうとチームに提案できた場合おそらく、よく知られ、試行され、テストされたソフトウェアパラダイムを参照することで、別のストリームが存在するために存在する必要があります。 私のチームにこの利点を説明するのはちょっと難しいです。彼らは物事をありのままに受け入れる傾向があり、システム全体を新しい方法で概念化できる利点を見るという点で「大きく考える」ことはしません。巨大なシステムをモデル化できるなら、効率的な場合、メモリの非効率性、ストリーム停止の一意の制約、重複キー、ナンセンスデータに遭遇する可能性が低くなります。元のビジョンに沿って設計する方がはるかに簡単で、後でこれらすべての問題に遭遇することはありません私たちは現在、過去の仕事では珍しいことを知っていますが、彼らは避けられないと考えているようです。 では、依存関係を強調し、理想の長期的な順守を確保するために、システムの一般的な概念モデルを促進するソフトウェアパラダイムを知っている人はいますか?現時点ではかなり混乱しており、すべてのスプリントは「こことこことここにこのものを追加するだけ」であるように見えます。

1
関数型プログラミング言語で分岐限定を実装する方法は?
すべての関数f:D-> Rのセットで分岐および境界検索を作成しようとしています。ここで、ドメインサイズは小さく(| D |〜20)、範囲ははるかに大きくなります(| R |〜2 ^ 20 )。最初に、私は次の解決策を思いつきました。 (builder (domain range condlist partial-map) (let ((passed? (check condlist partial-map))) (cond ((not passed?) nil) (domain (recur-on-first domain range condlist partial-map '())) (t partial-map)))) (recur-on-first (domain range condlist partial-map ignored) (cond ((null range) nil) (t (let ((first-to-first (builder (cdr domain) (append ignored …

3
ユーザーとユーザープロファイルを異なるテーブルに保持しますか?
いくつかのプロジェクトで、開発者が重要なユーザー情報を1つのテーブル(電子メール/ログイン、パスワードハッシュ、スクリーン名)に、残りの重要ではないユーザープロファイルを別のテーブル(作成日、国など)に保持することを好みます。本質的ではないということは、このデータがたまにしか必要ないということです。明らかな利点は、ORMクエリを使用している場合、より少ないフィールドをクエリすることは明らかに良いことです。ただし、同じテーブルに2つのエンティティをマップすることができます。これにより、不要なものを照会する必要がなくなります(より便利になります)。これらのものを2つのテーブルに保持することの他の利点を知っている人はいますか?

7
リンクされたノード構造を不変にする実用的な方法はありますか?
単一リンクリストを作成することにし、内部リンクノード構造を不変にする計画を立てました。 しかし、私は思わぬ障害に遭遇しました。次のリンクされたノード(以前のadd操作から)があるとします。 1 -> 2 -> 3 -> 4 を追加したいと言います5。 これを行うには、ノード4は不変なので、の新しいコピーを作成する必要があります4が、そのnextフィールドをを含む新しいノードに置き換えます5。問題は3、古いものを参照していること4です。追加されていないもの5。今、コピーし3、そのnextフィールドを置き換えて4コピーを参照する必要がありますが、今2は古いものを参照してい3ます... または、言い換えると、追加を行うには、リスト全体をコピーする必要があるようです。 私の質問: 私の考えは正しいですか?構造全体をコピーせずに追加を行う方法はありますか? どうやら「効果的なJava」には推奨事項が含まれています。 クラスを変更可能にする非常に正当な理由がない限り、クラスは不変でなければなりません... これは可変性の良いケースですか? 私はリスト自体について話していないので、これは提案された答えの複製ではないと思います。これは明らかに、インターフェイスに準拠するために変更可能でなければなりません(新しいリストを内部に保持し、getterを介して取得するなどの操作を行わないでください。リストの内部が不変でなければならないかどうかについて話している。

5
サーブレットでクライアントを識別する際に、Cookieの代わりにIPアドレスを使用できないのはなぜですか?
IPアドレスを介してCookieを使用することでいくつかの追加の利点があることはわかっていますが、私の質問は、クライアントがサイトに再度アクセスしたときにクライアントを識別する際にクライアントのIPアドレスを記憶できないのはなぜですか?コンテナがIPアドレスを使用してクライアントを記憶することは可能ですか?

2
コードの文書化の方法とソフトウェアの文書化が不十分な場合が多いのはなぜですか?
java apiなど、よく文書化されたコードの良い例があります。しかし、gitや企業の内部プロジェクトなどの公開プロジェクトのコードの多くは、文書化が不十分であり、初心者にはあまり適していません。 私のすべてのソフトウェア開発スティントでは、文書化が不十分なコードを処理する必要がありました。次のことに気づきました- コード内のコメントはほとんどまたはまったくありません。 メソッド名と変数名は自己記述的ではありません。 コードがシステムまたはビジネスプロセスにどのように適合するかについてのドキュメントはほとんどまたはまったくありません。 悪い開発者を雇うか、良い開発者を指導しない。シンプルでクリーンなコードを書くことはできません。したがって、開発者を含む誰にとってもコードを文書化することは困難または不可能です。 その結果、多くのコードを調べて、多くの人と話して物事を学ぶ必要がありました。これはみんなの時間を無駄にすると感じています。また、プロジェクトへの新規参入者向けのKT /ナレッジ転送セッションの必要性も生じます。 次の理由により、ドキュメントには値する注意が払われていないことを学びました。 怠惰。 開発者はコード以外は何もしません。 雇用保障。(コードを簡単に理解できる人がいない場合、簡単に交換できない可能性があります。) 期限が厳しいため、文書化する時間がほとんどありません。 ですから、会社やプロジェクトで優れた文書化の実践を奨励し、実施する方法があるのだろうかと思っています。プロジェクトの複雑さに関係なく、システムの適切なドキュメントとプロジェクトのコードを作成するために使用する戦略は何ですか?最小限のドキュメントが必要な場合やドキュメントが不要な場合の良い例はありますか? 私見、私は私達がプロジェクトが渡された後文書の検討があるべきであると感じます。単純で簡潔、説明的で使いやすいものでない場合、開発者または技術文書エンジニアがその責任を負い、修正する必要があります。私は、人々が最初の本のようにユーザーフレンドリーになることを望んではなく、ドキュメントの連を作ることを期待していませんが、何時間もの分析と無駄なKTセッションの必要性を排除すると期待しています。 この狂気を終わらせる、または軽減する方法はありますか?「ドキュメント駆動型開発」でしょうか?

5
ユーザー権限のチェックはどこで、MVCで誰によって行われますか?
モデルまたはコントローラーでユーザー許可チェックを行う必要がありますか?そして、誰が許可チェック、Userオブジェクト、またはUserManagementヘルパーを処理する必要がありますか? それはどこで起こるべきですか? コントローラーのチェックイン: class MyController { void performSomeAction() { if (user.hasRightPermissions()) { model.someAction(); } } ... コントローラーにチェックがあると、モデルをシンプルなアクションにするのに役立ち、すべてのロジックをコントローラーに保持できます。 モデルのチェックイン: class MyModel { void someAction() { if (user.hasRightPermissions()) { ... } } ... モデルにチェックを入れることにより、モデルを複雑にしますが、コントローラーで想定されていない操作をユーザーが誤って許可しないようにします。 そして誰によって? 場所に落ち着いたら、誰がチェックするべきですか?ユーザー? Class User { bool hasPermissions(int permissionMask) { ... } ... しかし、ユーザーがアクセスできる内容を知ることは、実際にはユーザーの責任ではないので、おそらくヘルパークラスでしょうか? Class UserManagement { bool hasPermissions(User …
26 mvc  permissions 

2
コールバックを使用すると、Javascriptコードはどのように非同期になりますか?
非同期のJavaScriptコードの書き方を見つけようとして、私はオンラインで多くの本を読んでいます。私の研究でよく出てきたテクニックの1つは、コールバックを使用することです。コールバック関数を作成して実行する方法のプロセスは理解していますが、コールバックがJavaScriptの実行を自動的に非同期にするのはなぜかと混乱しています。したがって、私の質問は、コールバック関数をJavaScriptコードに追加すると、コードが自動的に非同期になるのですか?

2
「スネークケース」という用語が使用されたのはいつですか?[閉まっている]
多くの人は、変数または他の記号を記述するためにSnake Caseという用語を使用しますwith_the_form_of_underscores。 先週、私はいくつかの広範な検索を開始しました。この用語の起源については、ウィキペディアの発言よりも詳細なものは見つかりません(上記) この用語の最初の記録が使用されたのはいつですか?

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