ソフトウェア工学

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

3
オープンソースプロジェクトをうまくフォークする
時間です。 あなたは、あなたが愛しているオープンソースプロジェクトにあなたのビジョンを追加するために長く一生懸命働いてきました。 しかし、既存の開発者とはうまくいきません。 最後に、コードをフォークする必要があります。 これをどのように行い、既存のプロジェクトで可能な限り最高の条件を維持しますか?「ああ、そうですか、フォーク!」と言わないでください。 クロスポリネーションのメカニズムおよび分岐の理由が健全で、論理的で、許容できると仮定する以外に、どのような問題が発生しますか? コンペ?リソースのサッピング?ユーザーの密猟? これらがもはや問題と見なされなくなるほど十分に多様化するまで、この間違いなく困難で長いプロセスをどのように経ますか? 決定の背後にある理由を議論するのではなく、コードの分岐が最良の全体的な解決策であるとすでに確信していると仮定してください。そして今、ポイントは可能な限り最善の方法で前進することです。 -アダム

14
大規模な非OOコードベースはどのくらい管理されますか?
抽象化は、コードベースを管理するためにオブジェクト指向が提供する非常に便利な機能であるといつも思っています。しかし、大規模な非OOコードベースはどのように管理されていますか?または、それらは最終的に「泥の大玉」になりますか? 更新: 「抽象化」は単なるモジュール化またはデータ隠蔽であると誰もが考えているようです。しかし、私見、それはまた、依存関係の注入とテストのために必須である「抽象クラス」または「インターフェース」の使用を意味します。非OOコードベースはこれをどのように管理しますか?また、抽象化以外に、カプセル化は、データと関数の間の関係を定義および制限するため、大規模なコードベースの管理にも役立ちます。 Cでは、疑似OOコードを書くことが非常に可能です。他の非OO言語についてはあまり知りません。だから、それは大規模なCコードベースを管理する方法ですか?

12
人々はどのようにして非常に複雑で読みにくいコードをどのように書いて維持しますか?[閉まっている]
SQLiteのソースコードを読むことはIMOのミッションでは不可能です。ただし、他のコードからダウンロード、コンパイル、使用できる非常に複雑なソフトウェア(結局は本格的な組み込みデータベース)の使用可能な部分であり、常に更新されます。 このように非常に複雑で読みにくいコードを、どのように書いて維持するのでしょうか?

18
私が知っておくべきコンピューターサイエンス理論のビットは何ですか?[閉まっている]
コンピューターサイエンスの学位ではなく電子工学の学位を持っている人として、私をより良い現実世界のプログラマーにするために知っておくべきコンピューターサイエンスのビットは何ですか? (現実世界では、プログラマとして日々の仕事で使用し、恩恵を受けるものを意味します-たとえば、データベースの正規化を理解することは、多くの種類があるクイックソートを理解するよりも実用的であることをお勧めしますライブラリの)。

10
新しいプログラマーがコンパイラーのエラーメッセージ/ランタイム例外メッセージを無視するように見えるのはなぜですか?[閉まっている]
私たちは皆これを見たと思います。初心者は、基本的な概要に従うStack Overflowで質問をします... 私はやろうとしています(目標の非常に漠然とした説明)がうまくいきません/エラー/例外が発生します。助けてください! 彼らの多くがエラーメッセージを貼り付ける必要がないと考えるのは奇妙ではないでしょうか? これの心理学は何だろうか。人々が最初は役に立たず、注意を払う価値がないと思わせるエラーメッセージについてはどうですか? 私が探している答えは、「彼らはエラーメッセージを理解していません」ではありません。それは、彼らがそれを理解するかもしれない他の誰かに話すことを考慮しない理由を説明しません。

6
企業はリモートの従業員を考慮するか、ローカルの従業員に固執する必要がありますか?[閉まっている]
エリート開発者は、平均的な開発者の10倍の生産性を上げることができます。 明らかに、会社の裏庭にいるよりも、世界中のエリート開発者を見つける方が簡単です。 会社がプログラミングのホットスポットにない場合、自宅で働く人を雇うことを検討すべきですか?

11
一部のタスクで会社でサポートされていない言語を使用しても大丈夫ですか?
COBOL、VB6、C#、Javaなどの複数の言語をサポートする会社で働いています。 私はこれらの言語を主な仕事に使用しますが、Pythonでいくつかのマイナープログラム(スクリプトなど)をコーディングすることにしばしば気づきます。 たとえば、アナリストが複雑なCSVファイルを提供していくつかのDBテーブルにデータを入力するため、Pythonを使用して解析し、DBスクリプトを作成します。 どうしたの? 主な問題は、これらの迅速で汚いスクリプトのいくつかの部分が徐々に重要性を増していることです。 私の会社はPythonをサポートしていません バージョン管理されていません(別の方法でバックアップします) 私の同僚はPythonを知らない アナリストは、電子メールでそれらを参照し始めています(「エクスポートするスクリプトを起動します...」)ので、私が最初に思っていたよりも頻繁に必要になります。 これらのスクリプトは、メインプロジェクトの一部ではない単なるユーティリティであることを付け加える必要があります。単純なタスクをより短い時間で完了するのに役立ちます。私自身の小さなタスクのために、彼らは多くのことを助けます。 つまり、私が宝くじに当たって事故に遭った場合、同僚はこれらのスクリプトがなくてもプロジェクトを維持する必要があります。たとえば、手作業でCSVエラーを修正するのに時間がかかります。 これは一般的なシナリオですか?私は何か間違っていますか?私は何をすべきか?

30
頻繁に使用するプログラミング言語で最も嫌いな構文要素は何ですか?[閉まっている]
プログラミング言語がどれほど愛されていても、その中にはあまり良いものではないいくつかの詳細が常にあります。 この質問では、特に構文要素に焦点を当てたいと思います。頻繁に使用するプログラミング言語(お気に入りのプログラミング言語、または職場での使用を余儀なくされている言語)で、最も読みにくい、不明瞭、不便、または不快な構文要素はどれですか。

5
機能を共有するストーリーに対処する方法
私は2つの物語を持っています(私は彼らが利益部分を欠いていることを知っています) 与信管理ユーザーとして、Officeの現在と以前の給与の差異を表示できます。 与信管理ユーザーとして、Officeの現在と以前の給与の差異のPDFを含む電子メールを受信できます。 2つは、同じクエリ/フィルター基準を持つという点で関連しています。唯一の違いは、「表示」ストーリーでは結果がユーザーに表示され、「メール」ストーリーでは結果がPDFに書き込まれ、ユーザーにメールで送信されることです。 これらの2つのストーリーの共通の側面の分離に苦労しています。 たとえば、どちらも同じクエリを使用しますが、結果に対する処理は異なります。 クエリを純粋に技術的な別のストーリーに分離する必要がありますか? PDFの作成と電子メールの送信はオフラインで行う必要がありますが、それは技術的な話になりますか? これらの2つのストーリーを2つの機能的なストーリーと2つの技術的なストーリーに分けることができました。 システムとして、Officeの現在の給与と以前の給与の差を計算できます。 与信管理ユーザーとして、Officeの現在の給与と以前の給与の違いを確認できます。 システムとして、Officeの現在の給与と以前の給与の違いのPDFドキュメントを作成できます。 与信管理ユーザーとして、Officeの現在の給与と以前の給与の違いのPDFを含む電子メールの受信をリクエストできます。 私が戻ってくる問題は、4つのストーリーが独立しておらず、「ケーキをスライス」しないことです。 したがって、これら2つをどのように扱うかはよくわかりません。

2
JavaScriptで他の関数への引数として大きな匿名関数を渡すのはなぜそんなに広く受け入れられているのですか?
私が持っている意見、他の関数に引数として数行のコードよりも多く含まれている無名関数を渡すと、私はそれが希望を感じる点まで、大幅に読みやすさと自己のドキュメントに影響を与えることを(私は必ずいくつかによって共有されることになるのです)名前付き関数を宣言するためにコードを使用する可能性が高い人にとってははるかに優れています。または、少なくともメイン関数を宣言する前に、その匿名関数を変数に割り当てます ただし、多くのJavaScriptライブラリ(jQuery、d3.js / NVD3.js)では、いくつかの例を示しただけで、このように大きな関数を使用しています。 これがなぜJavaScriptでこれほど広く受け入れられているのですか?それは文化的なものですか、名前付き関数を宣言するよりも使用する方が好ましいと思われる利点がありますか?

5
なぜmergesort O(log n)なのですか?
Mergesortは分割統治アルゴリズムであり、入力が繰り返し半分になるためO(log n)です。しかし、入力がループごとに半分になったとしても、各半分の配列でスワッピングを行うために各入力項目を反復処理する必要があるため、O(n)であってはなりませんか?これは、本質的に漸近的にはO(n)です。可能であれば、例を提供し、操作を正しくカウントする方法を説明してください!まだ何もコーディングしていませんが、オンラインでアルゴリズムを調べています。また、ウィキペディアがmergesortの動作を視覚的に示すために使用しているもののgifを添付しました。
27 algorithms  big-o 

1
JOIN vs. INNER JOINおよびFULL OUTER JOIN
私は差がある知っているINNER JOINとFULL OUTER JOIN2つの違いは、次のされているもの、私はそれを見ることができますが、JOIN ... ON...そしてINNER JOIN...ON...、まだ、まだJOIN...ON...対FULL OUTER JOIN...ON... 理由はJOIN、SOに投稿されているクエリを混乱させるだけだと思うので、ここに質問へのリンクがあります。 それでは基本的に、実際の集合演算自体の構文上の違いは何ですか? ありがとうございました、
27 sql  sql-server 

3
カードゲームのAIのベストテクニック
私はカードゲーム用のAIを開発しようとしていますが、使用すべきテクニック/アルゴリズムに少しこだわっています。ゲームに関するいくつかの前提条件を次に示します。 カードがプレーヤーに配布された後、ランダム性はありません。ここでは、すべてのプレイヤーがプレイするカードを選択できますが、ゲーム開始時にカードを配布するときのようなランダムなプロセスは発生しません。 カードが既にプレイされたときにプレイできるカードには制限があります。 トリックに勝ったプレイヤーが最初にプレイします。たとえば、プレーヤー1がカードをプレーし、プレーヤー2がカードをプレーして勝ちます。次に、プレイヤー2がカードをプレイし、プレイヤー1がプレイします。 ゲームに勝つのに役立つ多くのヒント/ルールを知っています(たとえば、プレーヤーにカードA、B、Cがある場合、Dをプレイする必要があります)。したがって、私は最初にベイジアンネットワークを使用してそれらのルールを記述したいと考えました。問題は、割り当てる確率がわからないことですが、(人間に対して)プレイしたゲームの履歴を使用してヒューリスティックを計算できます。2番目の問題は、すべてのルールがわからないことと、AIが最適なプレイを見つけるために必要な暗黙のルールがあることです。 これがそのようなカードゲーム用のAIを開発するのに良い方法であるかどうかわかりませんか? また、問題に最適な他の手法があるかどうかも疑問に思っています。たとえば、ミニマックス(プルーニングアルゴリズムを使用する場合があります)を確認しましたが、この問題の良い選択肢でしょうか?最も重要なプレーは、未知のパラメーターが最も高いゲームの開始時であるため(ほとんどのカードはまだプレーされていません)、私は非常によくわかりません。

4
どのJavascript関数がブロックと非ブロックを決定するのですか?
数年前からWebベースのJavascript(バニラJS、jQuery、Backboneなど)をやっていて、最近Node.jsでいくつかの仕事をしています。「ノンブロッキング」プログラミングのコツをつかむにはしばらく時間がかかりましたが、今ではIO操作などにコールバックを使用することに慣れています。 Javascriptは本質的にシングルスレッドであることを理解しています。Nodeの「イベントキュー」の概念を理解しています。私が理解できないのは、個々のjavascript操作が「ブロッキング」か「ノンブロッキング」かを決定するものです。後のコードで使用するために出力を同期的に生成するために依存できる操作、および最初の操作が完了した後に出力を処理できるようにコールバックを渡す必要がある操作を確認するにはどうすればよいですか?非同期/非ブロッキングのJavascript関数のリストと、同期/ブロッキングの関数のリストはありますか?Javascriptアプリが1つの巨大な競合状態になるのを妨げているのは何ですか? NodeでのIO操作やWebでのAJAX操作など、時間がかかる操作は非同期である必要があるため、コールバックを使用することを知っていますが、「長時間」と見なされるものを決定しているのは誰ですか?これらの操作には、通常の「イベントキュー」からそれらを削除する何らかのトリガーがありますか?そうでない場合、変数への値の割り当てや配列のループなどの単純な操作と、それらを同期方式で終了することに依存できると思われるものとは何が違うのでしょうか? おそらく、私はこれを正しく考えさえしていないでしょう。ありがとう!


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