ソフトウェア工学

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

4
Apollo 11ミッションのコードに使用される開発プロセスは?
アポロの任務には、電卓ほど複雑な技術はなかった。 こちらのリンクから、Apollo Guidance Computer(AGC)に関する情報があります。 オンボードのApollo Guidance Computer(AGC)は約1立方フィートで、2Kの16ビットRAMと36Kのハードコアコアロープメモリで、銅線は小さな磁気コアに通されているか、通されていません。16ビットワードは通常、14ビットのデータ(または2つのオペコード)、1符号ビット、1パリティビットでした。サイクルタイムは11.7マイクロ秒でした。プログラミングはアセンブリ言語と逆ポーランド語の解釈言語で行われました。 そのため、そこにあるものを調査したときにいくつかのソースコードに出くわし、素晴らしいコメントに気付きました(たとえば、TEMPORARY、I HOPE HOPE HOPE) VRTSTART TS WCHVERT # Page 801 CAF TWO # WCHPHASE = 2 ---> VERTICAL: P65,P66,P67 TS WCHPHOLD TS WCHPHASE TC BANKCALL # TEMPORARY, I HOPE HOPE HOPE CADR STOPRATE # TEMPORARY, I HOPE HOPE HOPE TC DOWNFLAG # PERMIT …

7
C ++に「最終的に」コンストラクトがないのはなぜですか?
C ++での例外処理は、try / throw / catchに制限されています。Object Pascal、Java、C#、Pythonとは異なり、C ++ 11でもfinallyコンストラクトは実装されていません。 「例外の安全なコード」について議論しているC ++の文献がたくさんあります。リップマンは、例外セーフコードは重要だが高度で難しいトピックであり、彼の入門書の範囲を超えていると書いています。これは、セーフコードがC ++の基本ではないことを暗示しているようです。ハーブサッターは、例外的なC ++のトピックに10章を費やしています! しかし、「例外セーフコード」を記述しようとするときに遭遇する問題の多くは、finally構造が実装されていれば非常によく解決でき、プログラマは例外が発生した場合でもプログラムを復元できるようになりますリソース、潜在的に問題のあるコードの割り当てのポイントに近い、安全で安定した、漏れのない状態に。私は非常に経験豊富なDelphiおよびC#プログラマーとしてtry ..を使用します。これらの言語のほとんどのプログラマーと同様に、最終的にコード内でかなり広範囲にブロックします。 C ++ 11に実装されているすべての「付加機能」を考慮すると、「最終的に」まだ存在していないことに驚いた。 それでは、なぜfinallyコンストラクトがC ++で実装されていないのでしょうか?把握するのはそれほど難しくも高度な概念でもないので、プログラマーが「例外安全なコード」を書くのを支援するのに大いに役立ちます。
57 c++  exceptions 

4
オープンソースライセンスの選択を支援する表はありますか?[閉まっている]
オープンソースイニシアチブは、「人気があり、広く使用されている、または強力なコミュニティで使用されるライセンス」のリストに9つの異なるライセンスをリストしています。 プロジェクトをオープンソースとしてライセンスしたい。残念ながら、私は法律を話しません。正しい選択をするのに役立つ、または少なくとも正しい方向に私を向けるのに役立ついくつかのチャートを参照できますか?たとえば、ライセンス間の違いをまとめた表、または要件を使用して適切なライセンスを案内するフローグラフでしょうか? 私も弁護士に会うつもりですが、最初にどんな情報でも助けになります。

17
Professionalバージョン管理の代替[非公開]
私たちは、プロジェクトの1つに貢献する必要がある非プログラマー(ライター)と協力しています。 現在、彼らは自分の作業をバージョン管理するためにGit(またはそのことは何でも)を使用するという考えを嫌っています。これは、バージョン管理のねじれた概念に頭を悩ませるだけの価値がないためだと思います。(私が最初にそれらをブランチとマージに紹介したとき-彼らは私がそれらを怒らせていたように見えました。) 今、私たちは彼らを教育したり、それを使うように説得する立場にはありません。私たちは、彼らのすべての作業をバージョン管理するための代替案を探しています(これが必要なものです)-彼らは簡単なワークフローを取得し、彼らの仕事に集中します。 私はいくつかのアイデアを思いつきました... 自明ではない変更を行うたびに作業を個別のファイルとして保存するように指示し、変更を追跡するために差分を使用します。 CSSEditの「マイルストーン」を何らかの方法で実装するプログラムを(Pythonで)作成します。 プロジェクトについて: これは自然言語処理システムです(C + Pythonで記述されています)。さまざまな言語でシステムの入力を準備するために、いくつかのライターを雇いました。そして、ソフトウェアを進化させると、それらのライターが入力(記事)を変更する必要があります。時々、変更は非常に小さい(1つか2つ)こともあれば、大きくなることもあります。 これらの変更をバージョン管理する必要があるのは、入力のあらゆる小さな/大きな変更がシステムの出力を劇的に変更する可能性があるためです。

11
データベースソース管理
データベースファイル(スクリプトなど)をソース管理する必要がありますか?もしそうなら、それをそこに保持し、そこで更新する最良の方法は何ですか? データベースファイルをソース管理する必要もあります。開発サーバーに配置して、誰でも使用でき、必要に応じて変更を加えることができるからです。しかし、その後、誰かがそれを台無しにした場合、それを取り戻すことはできません。 ソース管理上のデータベースに最適なアプローチは何ですか?

16
Javaにはあるのに、CやC ++などの言語にガベージコレクションがないのはなぜですか?[閉まっている]
まあ、Cにはmalloc / free、C ++にはメモリ管理にnew / using-a-de-structorのようなものがあることは知っていますが、ユーザーがこれらの言語に「新しい更新」がないのはなぜだろうメモリを手動で管理するオプションがありますか、またはシステムが自動的にメモリを管理するオプションがあります(ガベージコレクション)。 やや新しい質問ですが、CSに約1年しかいません。

13
経験の浅いプログラマーに支援を提供しませんか?[閉まっている]
ジュニアプログラマーが常に飛び込み、それらを教育しようとするのに助けが必要なとき、それは良い考えだと思いますか?または、彼らはあなたが彼らに与えるすべての「魚を教える」アドバイスを無視し、あなたがちょうどそれらをもたらした「魚」に焦点を合わせますか?間違いは学習するための最良の方法であると知って、常に自分で物事を把握させますか?または、あなたは彼らが非常に焦げてイライラし、スピードに出たいという欲求を失うことを恐れていますか? いつあなたよりも後輩を助ける時期を選択し、いつ立ち止まって彼らに彼らの過ちを学ばせるかを選択しますか?

17
リファクタリングをチームの優先事項にするにはどうすればよいですか?
私が毎日使用しているコードベースには、自動テスト、一貫性のない命名、「なぜこれが必要なのか」、「これが必要かどうかわからない」、「このメソッドに正しい名前が付けられていない」などの大量のコメントがなく、コードが散らかっていますソース管理を使用しているにもかかわらず、「変更ログ」。私たちのコードベースはリファクタリングを使用できると言えば十分です。 バグを修正したり、新しい機能を追加したりするタスクは常にあるため、コードをリファクタリングしてよりモジュール化するための時間は確保されておらず、優先度は高くないと思われます。 タスクリストに追加されるようなリファクタリングの価値をどのように実証できますか?許可ではなく許しを求めて、リファクタリングするだけの価値はありますか?

16
WindowsからLinuxへの移行[終了]
これら2つの事実を調整する必要があります。 Linuxでの作業に不安を感じています。 Linux用のソフトウェアを開発する必要があります。 ある程度のバックグラウンド:私はWindowsで10年以上のプログラミング経験があり(ほぼ排他的にC / C ++ですが、.NETも同様です)、自宅でFreeBSDを約3年間使用していました(その後に戻る必要がありました) Windows)、そして私はLinuxでそれほど運がなかった。そして今、Linux用のソフトウェアを開発する必要があります。計画が必要です。 Windowsでは、プログラミング言語、コーディング対象のAPI、IDE(VisualStudio)、およびトラブルシューティング用の非常に基本的なツール(Depends、ProcessExplorer、DebugView、WinDbg)を知っているだけで済みます。他のすべては自然にやってくる。 Linuxでは、これは非常に異なる話です。Firefoxプラグインからリンクする場合、どのDLL(申し訳ありませんが、共有オブジェクト)がロードされるのか、どうしてわかりますか?Linuxでソースに__asm int 3 / DebugBreak()を挿入してプログラムを実行し、OSにデバッガーを呼び出させることと同等の機能は何ですか?なぜ地獄リリースビルドはappLoaderと呼ばれるものを使用するのに、デバッグビルドは何らかの方法で動作するのですか?最悪なのは、Linux開発環境をプロビジョニングする方法ですか? それでは、憎しみは通常、十分な知識がないことに関連していることを考慮して、あなたは何をお勧めしますか?EmacsとGCCで大丈夫です。Linuxの管理者/ユーザーとして自分自身を教育する必要があり、適切なトラブルシューティングツールを学ぶ必要があります(straceはかっこいいです、ところで)。 最初からLinuxを実行する必要がありますか?または、単に本を読む必要があります(Kernighanの「UNIXプログラミング環境」とStevensの「Advanced Programming ...」を読みましたが、もっと実用的なことを学ぶ必要があります)。または、自宅のコンピューターにLinuxディストリビューションを用意する必要がありますか?

10
SMARTの目標はプログラマにとって有用ですか?[閉まっている]
私が知っているいくつかの組織は、プログラマーにSMART目標を使用しています。SMARTは、特定、測定可能、達成可能、関連性、および時間制限の頭字語です。大企業ではかなり一般的です。 SMARTの目標に対する私自身の以前の経験は、それほど前向きではありませんでした。他のプログラマは、パフォーマンスを測定する効果的な方法を見つけましたか?プログラマーにとってSMARTの優れた目標の例は何ですか(存在する場合)。



30
あなたがした最も遺orな設計やプログラミングの決定は?[閉まっている]
どのような設計上の決定を下し、どのように裏目に出たのか聞きたいです。悪い設計上の決定のため、私はその悪い決定を永遠にサポートしなければなりませんでした(私もそれに参加しました)。これにより、1つの設計ミスが永遠にあなたを悩ませることに気づきました。経験豊富な人々から、どんな種類の失敗を経験し、彼らから何を学んだかを学びたいです。 これらの決定を繰り返さないようにすることで、他のプログラマーにとってこれが多くの助けになると確信しています。 あなたの経験を共有してくれてありがとう。
57 mistakes 

6
すべての要求に対してHttpClientの新しい単一のインスタンスを作成する必要がありますか?
最近、私はasp.netモンスターからこのブログ投稿に出くわしHttpClientました。以下の方法での使用に関する問題について話します using(var client = new HttpClient()) { } ブログの投稿によると、HttpClientリクエストごとに破棄すると、TCP接続を開いたままにできます。これにより、潜在的にSystem.Net.Sockets.SocketException。 投稿による正しい方法はHttpClient、ソケットの無駄を減らすのに役立つので、単一のインスタンスを作成することです。 投稿から: HttpClientの単一インスタンスを共有する場合、ソケットを再利用することでソケットの無駄を減らすことができます。 namespace ConsoleApplication { public class Program { private static HttpClient Client = new HttpClient(); public static void Main(string[] args) { Console.WriteLine("Starting connections"); for(int i = 0; i<10; i++) { var result = Client.GetAsync("http://aspnetmonsters.com").Result; Console.WriteLine(result.StatusCode); } Console.WriteLine("Connections done"); Console.ReadLine(); …
57 c#  http-request 

1
繊維、コルーチン、緑色の糸に違いはありますか?
今日、私は繊維、コルーチン、緑の糸についてインターネットでいくつかの記事を読んでいた。これらの概念は非常に共通しているようだが、特に繊維とコルーチンについて話すときは、わずかな違いがある。 それらが互いに異なる理由の簡潔で正しい要約はありますか? 更新:繊維とコルーチンの区別に特に優れているのは、コルーチンと繊維の識別(N4024 C ++ドラフト)文書です。

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