ソフトウェア工学

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

2
誰が最初に「高次関数」および/またはファーストクラスの市民という用語を作り出したのですか
Haskell、O'Caml、またはLISPが登場するずっと以前から、高次関数は学術研究の主題であり、数学ではSchönfinkel(1967年)とHaskell Curry(1968年)はすでにカレーなどの手法を適用していましたが、どのプログラミング言語でも利用できるようになる前でした。 Wikipediaによると、Scheme はファーストクラスの市民として適切な高階関数を導入した最初の言語でしたが、元のアイデアを私たちに帰すことができる人はいますか?たぶん、1930年代にラムダ計算を発明したアロンゾ教会ですか?より具体的には、私がいくつかの本やオンラインリソースでさまざまな言い換えで見た次の定義を誰が作り出したのですか? 関数が別の関数を引数として取る場合、または関数を返す場合、その関数は高次であると見なされます。関数を引数または戻り値の型として使用しない関数は、一次関数と呼ばれます。

2
Arrayの「すべて」または「一部」の副作用は悪いですか?
私は常に、if状態に副作用があることは悪いことだと教えられてきました。つまり、 if (conditionThenHandle()) { // do effectively nothing } ... とは対照的に; if (condition()) { handle(); } ...そして、私はそれを理解しています。私はそれをしなかったので私の同僚は幸せです、そして私たちはすべて金曜日の17:00に家に帰り、誰もが楽しい週末を過ごします。 今、ECMAScript5はto every()やsome()to Arrayなどのメソッドを導入しており、非常に便利だと思います。彼らよりもしているクリーナーfor (;;;)のは、あなたに別のスコープを与え、そして変数によって要素にアクセスできるようにします。 入力を検証するときにしかし、私は自分自身を使用して、より頻繁に--より-ない見つけるevery/をsome使用し、その後、入力を検証する条件にevery/ some 再使用可能なモデルへの入力を変換するために、体内で。 if (input.every(function (that) { return typeof that === "number"; })) { input.every(function (that) { // Model.findById(that); etc } } else { return; } ...私がやりたいことは、 if (!input.every(function …

2
BSDライセンスのプロジェクトには、各貢献者からの署名入りの声明が必要ですか?
今日、Fossil SCMのメーリングリストを読みました。 BSDの問題は、貢献者がBSDであることを示す署名済みのフォームを各貢献者から実際に取得する必要があることです。GPLでコードを表示するためには、互換性のあるライセンスでコントリビューションをリリースすることが前提条件であるため、これはGPLでは自動的に行われます。これにより、GPLは多くの貢献者がいる高度なコラボレーション環境に最適です。BSDは読者にとって寛容です(負担が少ない)が、執筆者が書類を提出する必要があるため、執筆者にとっては少し厳しいものになります。 誰かがその理由を説明してもらえますか?また、プロジェクトの貢献者からのそのような署名された声明がないことによって起こり得る結果は何ですか?

1
課題トラッカーとプロジェクト仕様書が重複しないようにするにはどうすればよいですか?
以前は専門のコンサルティング会社で働いていましたが、さまざまな契約条件で働いていました。時間と材料のプロジェクトを取得できたら、SCRUMで実行し、課題追跡システムでバックログを追跡しました。 ただし、ほとんどの場合、固定価格契約の下で納品する必要がありました。これには、契約の付録として仕様書が必要でした。そのため、仕様から作業項目をバッチインポート(さらには手動で入力)することになりました。変更注文は、特にプロジェクトの終わりに向かって、すべてが同期していることを確認するのに長い時間がかかりました。 このプロセス全体をDRYに保つ方法論またはソフトウェアツールはありますか?私はいくつかの検索を行ったが、どうやら正しい用語を使用していない。私の専門ネットワークのほとんどは固定価格の仕事をしていません。 私は次のことを受け入れます: バグトラッカーの切り替えまたはプラグインの購入(現在はFogBugzを使用)。 別の開発方法論に従う 仕様を管理し、バグトラッカーと仕様ドキュメントを更新するソフトウェアを作成する(ただし、これは、疑わしい利益のために多くの作業が必要と思われます) 最後に、これは本当に解決する価値がありますか?一部のプロジェクトではかなりの費用がかかりましたが、他のプロジェクトでは影響はありませんでした。

2
カテゴリーデータと連続データを使用した機械学習
この質問は、ここか、そうかもしれません... トレーニングデータセットに、次のようなカテゴリデータと連続データの両方が含まれているとします。 Animal, breed, sex, age, weight, blood_pressure, annual_cost cat, calico, M, 10, 15 , 100 , 100 cat, tabby, F, 5, 10 , 80 , 200 dog, beagle, M, 3, 30 , 90 , 200 dog, lab, F, 8, 75 , 80 , 100 そして、予測される従属変数は、年間の獣医費用です。そのようなデータセットを処理するために利用できる特定の手法について、私は少し混乱しています。連続データとカテゴリデータの両方が混在するデータセットを処理するために一般的に使用される方法は何ですか?

1
モナド関数で検証付きのエラーモナドを使用するか、バインドで直接検証付きの独自のモナドを実装する方が良いですか?
使いやすさ/保守性の観点からデザインが賢明なものは何なのか、コミュニティとの適合性に関しては何が優れているのかと思います。 データモデルを考える: type Name = String data Amount = Out | Some | Enough | Plenty deriving (Show, Eq) data Container = Container Name deriving (Show, Eq) data Category = Category Name deriving (Show, Eq) data Store = Store Name [Category] deriving (Show, Eq) data Item = Item Name Container …

2
ソケットと共有メモリを介して行われるプロセス間通信の長所と短所は何ですか?
プロセス間通信の多くのオプションのうち2つは次のようになる可能性があることを理解しています。 共有メモリ ソケット 実際、Javaアプリケーションをデバッグするために、Intellij Ideaがこれら2つのオプションを公開しているのを見ました。それぞれのアプローチの長所と短所を知りたいのですが。

3
処分するものが何もない状況で「使用」することは適切ですか?
C#では、usingステートメントを使用して、ガベージコレクターを待たずにリソースを確定的な方法で破棄します。たとえば、次の目的で使用できます。 SQLコマンドまたは接続を破棄します。 ストリームを閉じ、ファイルのように基礎となるソースを解放し、 無料のGDI +要素、 等 これは、using処理するものが何もない場合にますます使用されていることに気付きましたが、呼び出し元usingが2つの個別のコマンドではなくブロックを書き込む方が便利な場合に使用します。 例: Stack Overflowチームによって作成されたMiniProfilerは、usingプロファイルするブロックを示すために使用します。 using (profiler.Step("Name goes here")) { this.DoSomethingUseful(i - 1); } 1つの代替アプローチは、2つのブロックを持つことです。 var p = profiler.Start("Name goes here"); this.DoSomethingUseful(i - 1); profiler.Stop(p); 別のアプローチはアクションを使用することです: profiler.Step("Name goes here", () => this.DoSomethingUseful(i - 1)); ASP.NET MVCもusingフォームに選択されています。 <% using (Html.BeginForm()) { %> <label for="firstName">Name:</label> <%= Html.TextBox("name")%> …

3
動的に型付けされた言語のコンパイラーを作成する際の型付けに関連する課題は何ですか?
で、この話、グイド・ヴァンロッサムは言ってそれにコメント、Pythonコードのコンパイラを書くための試みについて(27:30)に話しています。 すべての素晴らしい動的型付けプロパティを維持し、プログラムのセマンティックな正確性を維持するコンパイラーを書くのはそれほど簡単ではないことがわかりましたより速く Pythonのような動的に型付けされた言語のコンパイラを書く際の型付けに関連する(可能な)課題は何ですか?

4
C#の定数
コンパイラが定数値をアセンブリメタデータに格納するのはなぜですか?それらは、アセンブリメタデータから中間言語コードに直接埋め込まれていますか?
9 c#  clr  compilation 

1
ハッシュ関数分類
インターネットで、私はこの質問に遭遇しました: キー値を見つけるさまざまな方法に基づいてハッシュ関数を分類します。 のような答えで 直接法 減算方式 Modulo-Divisionメソッド 桁抽出法 ミッドスクエア法 折り方 疑似ランダム法 奇妙だと思います。私はハッシュについてはよく知っていると思いますが、これは私には意味不明なことです。誰かが説明できますか?

5
非開発者がローカライズされた文字列を確認するタスクを管理する方法は?
.NET Frameworkでは、ローカライズされた文字列はXMLファイル(または複数のファイル)にあります。これらのファイルはプロジェクトの一部であり、他のソースコードファイルと同様にソース管理にコミットされます。通常、Visual Studioは、これらのファイルをテーブルとして表示し、ローカライズされた文字列を編集するために使用されます。 私は小さなチームで、多言語インターフェースが必要な製品を扱っています。 開発者として、翻訳が不正確である可能性を考慮して、ローカライズされた文字列を両方の言語でドラフトします。 チームの別の人(開発者以外)が両方の言語でコンテンツをレビューし、必要に応じて修正します。 現在の問題は、開発者以外の人はソース管理もIDEも使用しないことです。これは、この人にとっては面倒で困難(バージョン管理は開発者以外には難しい)であるためです。 別の解決策は、ローカライズされた文字列をExcelファイルとしてエクスポートし、このユーザーがExcelを確認するのを待ってから、変更された文字列を再インポートすることです。ここでの注意点は、他の文字列を作成したり、既存の文字列の名前を変更したりする可能性があるため、ローカルバージョンとレビュー済みの文字列を比較することが困難になることです。 何をすべきか? 他のチームではどうなりますか?

1
多くのブロッキングVS単一の非ブロッキングワーカー
接続を受け入れるHTTPサーバーがあり、ヘッダーが完全に送信されるのを何らかの方法で待機していると仮定します。それを実装する最も一般的な方法は何ですか、それ以外の長所と短所は何ですか。私はこれらのことしか考えられません: 多くのブロッキングワーカーは、次の理由で優れています。 それはより敏感です。 新しい接続を導入する方が簡単です(ワーカーが同期リストに追加できるようになるまで外部の人が待つのではなく、自分で接続を取得します)。 CPU使用率は、接続数の増減に応じて自動的に(追加の作業なしで)バランスをとります。 CPU使用量が少ない(ブロックされたスレッドは実行ループから除外され、クライアント間をジャンプするためのロジックは必要ありません)。 単一の非ブロッキングワーカーは、次の理由で優れています。 より少ないメモリを使用します。 レイジークライアント(サーバーへの接続とヘッダーの送信が遅い、またはまったく送信しない)に対する脆弱性が低い。 おそらくお分かりのように、私の意見では、複数のワーカースレッドは全体として少し優れたソリューションのようです。それに関する唯一の問題は、そのようなサーバーを攻撃する方が簡単であることです。 編集(より多くの研究): 私がウェブで見つけたいくつかのリソース(数千のスレッドとブロッキングI / O-Javaサーバーを記述する古い方法は、 Paul Tymaによって再び(そしてより良く)新しくなりました)ブロッキングアプローチは一般により良いが私はまだ偽の接続を処理する方法を本当に知りません。 PSタスクにいくつかのライブラリまたはアプリケーションを使用することをお勧めしません。私は、それが機能するのではなく、実際にどのように機能するか、または機能する可能性があるかを知りたいと思っています。 PSS私はロジックを複数の部分に分割しており、これはHTTPヘッダーの受け入れのみを処理します。それらを処理しません。

8
過去のIfステートメント配列、ループ…さて、何ですか
私がこの壁にぶつかったとき、私は1年以上前にプログラミングをあきらめました。基本的なAndroidアプリケーションを作成したいので、このトピックを再考します。しかし、私の限られた知識では不十分だと思います。 これが私の問題です。 私はいくつかの本を読んだり、C#/ Javaでビデオチュートリアルを見たり、例に従って、本を完成させたりしました。結局、彼らはいつも次に何をすべきかについて私を困惑させているようです。 つまり、基本的な "hello world"アプリケーションからifや配列までを教えてくれるので、コーディングの世界に出て、何かを作成する方法を知っているように思われます。 ここで何か不足していますか?これらはすべてのプログラムの構成要素であることは知っていますが、私が読んだ本は次に何をすべきかを実際に示すことはありません。 私が仮定する簡単な答えは「コーディングを開始する」ことですが、どこに?たとえば、「He​​ad First Java」を読みました。その部分まで、彼らはあなたがあなたが学んだすべてを取り、犬のレースゲームを作成することをあなたに言っていました... 「チートしないで、提供されたソースコードを見てみてください。これでこれを実行できるようになるはずです」_正確な引用ではありませんが、基本的にはそうです...... 30分前は、配列を作成する方法を説明しているだけでしたが、理論なしに、実際に動作するゲームを作成するつもりですか? 私がこれを尋ねる理由は、これが少なくともコーディングを開始するために知っているはずのすべてであると恐れているからです。 アドバイスありがとうございます

3
ドキュメントでコードの特定の領域を参照するにはどうすればよいですか?
プロジェクトを離れようとしています。行く前に、上司からコードの文書化を求められました(あまり文書化していません)。大したことではなく、プロジェクトはそれほど複雑ではありません。しかし、私は自分のドキュメンテーションの中で、「XYZの行でそのようなことが起こることに気づく」と言いたい場所を見つけています。 この場合、コードの1行を追加または削除するとすぐにドキュメントが古くなるため、特定の行番号を参照しても意味がありません。行番号で参照せずに特定のコード行を参照するためのベストプラクティスはありますか? 私は次のようなコメントでコードを散らかすことを検討しました: /* linetag 38FECD4F */ ここで、「38FECD4F」はその特定の行の一意のタグです。次に、「 '38FECD4F'とタグ付けされた行で、そのようなことが起こることに注意してください」というドキュメントを挿入できます。 他のアイデアは?コードユニットの特定の部分よりも全体としてドキュメント化する方が一般的には良いと思いますが、この特定のプロジェクトの場合、手続き型コードの長い列があり、小さいユニットにリファクタリングされたことはありません。

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