ソフトウェア工学

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

3
クロスプラットフォームのデスクトッププログラミング:C ++とPython [非公開]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 申し分なく、始めに、私はアマチュアObj-C / CocoaおよびRuby w / Railsプログラマーとしての経験があります。これらは素晴らしいですが、クロスプラットフォームのアプリケーションを書くのにあまり役に立ちません(GNUStepがいつか最初にマルチプラットフォームになるのに十分なものになることを願っていますが、その日は今日ではありません)。 私が収集できるものからのC ++は、非常に強力ですが、マスターするには半年以上かかる巨大でcanい巨人でもあります。また、メモリ管理はすべて手作業なので、足で自分自身を撃つだけでなく、足全体を吹き飛ばすことが非常に簡単にできることも読みました。明らかに、これはすべて非常に威圧的です。それが正しいか? PythonはC ++のパワーの大部分を提供しているようで、速度を犠牲にして簡単に入手できます。この犠牲の大きさは?それは意味がありますか、それとも無視できますか? 合理的な時間内に高速で安定した信頼性の高いアプリケーションを作成できますか? また、UIにQtを使用するか、プラットフォームごとに個別のネイティブフロントエンドを維持する方が良いでしょうか? 編集:さらに明確にするために、書きたいアプリケーションには2つのタイプがあります。1つは非常に使いやすく便利なデータベースフロントエンドであり、もう1つは間違いなく後で登場する3Dワールドエディターです。

2
Facebookの広告入札システムの仕組み
Facebookで広告を作成すると、「推奨入札価格」の範囲が提供されます(例:$ 0.90-$ 2.15 USD)。このページによると: 推奨入札単価の範囲は、広告が成功するように上限入札単価を選択するのに役立ちます。これは、あなたと同じオーディエンスに広告を表示するために競合している他の広告主の数に基づいています。 ここで実際に(技術的に)何が起こっているのかを理解することに興味があります。 ユーザーがFacebookにログインするとします。サーバー側では、ユーザーのブラウザーが(ログインの一部として)送信したHTTPリクエストが処理され、サーバーはユーザーに表示する広告を判断する必要があります。 私が想定し、「入札」システムの出番これは?このユーザーの人口統計と、競合する複数の広告主がキャンペーンを設計したオーディエンスターゲティングに基づいて、Facebookが返す可能性のある20の異なる広告のプールを見ているとしましょう。 この入札システムは、Facebookがクライアント側に返す20の広告のどれを決定するのに役立ちますか?「入札単価を引き上げる」広告主は、「入札単価を下げる」広告主よりも優先されると思います。しかし、この入札はいつ行われますか?広告主はどのくらいの頻度で再入札する必要がありますか?入札バインディングの期間は? 広告の背後にあるこれらの使用関連の概念を理解すれば、次の「選択戦略」のどちらがバックエンドで使用されているかが明らかになるでしょう。 ラウンドロビン 優先ラウンドロビン ランダム化(疑わしい) 履歴ベース MVPベース 私を正しい方向に導き、これらの提案された入札システムが何であり、どのように機能するかを説明できる人に感謝します。


5
アルゴリズムのランダウ表記(Big OまたはTheta表記)をプログラムで見つけるには?
私は、アルゴリズムを可能な限り最適化するために、手作業でアルゴリズムのLandau(Big O、Theta ...)表記を検索するのに慣れていますが、関数が本当に大きく複雑になっているとき、それはうまくいきません手でやるには時間がかかりすぎます。また、ヒューマンエラーが発生しやすくなります。 私はCodi​​lity(コーディング/アルゴリズム演習)に時間を費やし、提出されたソリューションのLandau表記(TimeとMemoryの両方の使用量)が表示されることに気付きました。 私は彼らがそれをどのように行うのだろうと思っていました...どのようにあなたはそれをしますか? 字句解析またはコードの解析以外の方法はありますか? この質問は主にPHPやJavaScriptに関係していますが、私はどんな言語や理論にも心を開いています。

5
Continous Integration(CI)とは何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 継続的インテグレーションの概念、どのように機能するのかを理解しやすい方法で説明してくれる人がいますか?そして、企業がコード配信ワークフローにCIを採用する必要があるのはなぜですか?私は開発者であり、私の会社(主にビルド​​チーム)はTeam Cityを使用しています。開発者として、私は常にコードをチェックアウトし、更新してSVNにコミットしますが、TeamCityやCI全般について気にする必要はありませんでした。それでは、CIの有用性を理解したいと思いますか?CIはアジャイル手法の一部ですか?

4
どんよりした非技術的なマネージャーを寄せ付けずに、良い仕事を提供するにはどうすればいいでしょうか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 7年前に閉鎖されました。 この質問は主観的と見なされ(警告を受けた)、閉じられますが、これに関するいくつかの良いアドバイス/経験が必要なので、私はそれを危険にさらします。 私は次のように読んで「約」のページ霧クリークソフトウェア、という会社ジョエル・スポルスキが設立され、の最高経営責任者(CEO)であるが。 2000年に、フォグ・クリークの創設者であるジョエル・スポルスキーとマイケル・プライアーは、プログラマーがきちんとした労働条件を持っていて、仕事をする機会を得るのに苦労していました。道。すべてのハイテク企業は、優れたプログラマーを望んでいると主張しましたが、彼らはお金を口に入れませんでした。 それは物理的な環境から始まりました(数十個のキュービクルが騒々しい暗い部屋に詰め込まれ、電話で叫ぶ営業員が開発者が集中することを不可能にします)。しかし、それはそれよりもずっと深くなりました。変更を恐れるマネージャーは、新しいアイデアを隔離すべき奇妙なウイルスとして扱いました。ナポレオンの複雑なジュニアマネージャーは、物事を正確に自分のやり方で行うか、解雇されると主張しました。誰もが自分のキュービクルに映画のポスターをテープで貼り付けたとき、企業の家具警察は苦痛にwrりました。混乱はso延していたので、たとえアイデアが良かったとしても、それらから製品を作ることは不可能だったでしょう。経験の浅い管理者は、ヒットアンドラン管理を実践し、フィアットの過激な結果を見るために固執せずに物事を正確に行う方法について厳しい命令を出しました。 そして最悪なことに、担当のMBAタイプは、コーディングはサポート機能であり、基本的には型の洗練された形式であると考えていました。 今日の大規模なソフトウェア会社のほとんどについての率直な真実!残念ながら、すべての開発者がJoel Spolskyのようにgutsy(またはlucky言うことができますか?)だから私の質問は: そのようなマネージャーと仕事をし、彼らを寄せ付けず、それでも素晴らしい仕事を提供する最善の方法は?

3
2つのノード間の相互接続中に分散デッドロックを回避するにはどうすればよいですか?
2つのピアノードがあるとします。最初のノードは2番目のノードに接続要求を送信できますが、2番目のノードは最初のノードに接続要求を送信できます。2つのノード間の二重接続を回避する方法は?この問題を解決するには、インバウンドまたはアウトバウンドTCP接続を作成するために実行される操作を連続して行うだけで十分です。 つまり、各ノードは、着信接続と発信接続の両方で、新しい接続作成操作を順番に処理する必要があります。この方法では、接続されたノードのリストを維持し、ノードからの新しい着信接続を受け入れる前、またはノードに接続要求を送信する前に、このノードがリストに既に存在するかどうかを確認するだけで十分です。 接続を作成する操作を順番に行うには、接続ノードのリストをロックするだけで十分です。実際、新しい接続ごとに、新しい接続ノードの識別子がこのリストに追加されます。このアプローチは、原因となることができればしかし、私は疑問に思う分散デッドロックを: 最初のノードは、2番目のノードに接続要求を送信できます。 2番目のノードは最初のノードに接続要求を送信できます。 2つの接続要求が非同期でないと仮定すると、両方のノードが着信接続要求をロックします。 どうすればこの問題を解決できますか? 更新:ただし、新しい(着信または発信)接続が作成されるたびにリストをロックする必要があります。他のスレッドがこのリストにアクセスする可能性があるため、デッドロックの問題が残ることになります。 更新2:あなたのアドバイスに基づいて、ログイン要求の相互受け入れを防ぐアルゴリズムを書きました。各ノードはピアであるため、新しい接続要求を送信するクライアントルーチンと、着信接続を受け入れるサーバールーチンを持つことができます。 ClientSideLoginRoutine() { for each (address in cache) { lock (neighbors_table) { if (neighbors_table.contains(address)) { // there is already a neighbor with the same address continue; } neighbors_table.add(address, status: CONNECTING); } // end lock // ... // The node tries to establish …

7
問題に対処するためのプログラミングパラダイムの選択に関する経験的証拠
C2 wikiには、オブジェクト指向プログラミングの経験的証拠に関する議論があり、基本的には、権威への訴求以上のものはないと結論付けています。これは、ここでは、2008年の議論で最後に編集されたこのアウトを負担するようです:上の質問OOが古いされているかどうか、関数型プログラミングは悪い選択であるときとAOPの利点と欠点がすべての証拠に頼ることなく、貢献者の意見に答えています。 もちろん、定評のある有名な開業医の意見は歓迎すべきものであり、貴重なものですが、実験データと矛盾しない場合はより妥当です。この証拠は存在しますか?証拠に基づいたソフトウェアエンジニアリングが重要であることは知っていますが、この文脈で実践できますか?具体的には、Pソフトウェアを書くことで解決したい特定の問題がある場合、Pプログラミングパラダイムの選択に依存するような問題解決の結果がどのように決まるかを知ることができる知識、研究、研究がありますか? 「正しい答え」としてどのパラダイムが出てくるかは、特定の研究が注意を払うメトリックス、研究が一定または変動する条件、そして疑いなく他の要因に依存することを知っています。これは、この情報を見つけて批判的に評価したいという私の願望には影響しません。 私は「クランクを回す」ソリューションを探していると考える人がいることが明らかになります-私の問題に関する情報を入れ、その中から「機能的」または「構造化」のような言葉が出てくるソーセージマシンです。これは私の意図ではありません。私が探しているのは、方法についての研究です-ここには入りませんが、問題に関する良い文献がありますが、多くの警告と仮定があります-ソフトウェアの特定の特性は、問題とパラダイムの選択によって異なります。 言い換えれば、「OOの方が柔軟性が高い」または「機能プログラムのバグが少ない」と言う人もいます-(一部)私が求めているのはこの証拠です。残りは、これに対する証拠、またはこれらの記述が真であるという仮定、またはこれらの考慮事項が重要ではないことを示す証拠を求めています。あるパラダイムが他のパラダイムよりも優れている理由については、多くの意見があります。これらの背後にある目的はありますか?

5
新しい言語を学ぶのは早すぎますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 個人的な状況:私は大学で過去6か月間、正式にC ++を学んでいます。これに先立ち、私は1年間JavaScriptに手を出しました。今、私は1か月の休学中にPythonを学ぶことを検討しています。 学習プロセスの早い段階で焦点を分割することにより、学習の効率が低下しますか?C ++を続けて1か月過ごす必要がありますか?または、新しい言語を学ぶのに早すぎることはありませんか?

4
他の言語にコンパイルされるDartのような言語に関して、GPLはどのように機能しますか?
GoogleのDart言語は、Dartiumとして知られるChromiumの特別なビルド以外のWebブラウザではサポートされていません。プロダクションコードにDartを使用するには、Dart-> JavaScriptコンパイラ/トランスレーターを介して実行し、出力されたJavaScriptをWebアプリケーションで使用する必要があります。 JavaScriptはインタープリター言語であるため、「バイナリ」(別名、.jsファイル)を受け取る人は誰でもソースコードを受け取ります。 現在、GNU General Public License v3.0には次のように記載されています。 「作品の「ソースコード」とは、作品を修正するための作品の好ましい形態を意味します。」 これは、JavaScriptコードに加えて元のDartコードもエンドユーザーに提供する必要があることを意味します。これは、ソースコードのコピーがすでに人間が読み取り可能/書き込み可能/変更可能な形式で提供されている場合でも、Dartで記述されたWebアプリケーションはすべて、Webサイトのすべての訪問者に元のDartコードを提供する必要があることを意味しますか?

4
同僚にコードを導入する方法
チームの新しいメンバーに、かなり複雑で多くの「落とし穴」が絡み合っているかもしれないコードベースをどのように紹介しますか? 最も簡単な方法は、全体的なアーキテクチャを図でレイアウトし、新しい人がコードに慣れるにつれて、明確に定義された(そして十分にスコープが定められた)タスクを数週間(または数か月)かけることだと思います。 しかし、コンサルタントとして(そしてその時点で下級従業員として)私は、時間の制約またはチームの役割の指定のために、それを常に持つことはできません。(私はこの特定のプロジェクトに他の誰かの2倍の長さで参加しているので、「ジュニア」は「コード/プロジェクトについてあまり知らない」という意味ではありません。) 私はプロジェクトとコードに新しいメンバーを紹介するように何度も任されましたが、悲しいことに毎回私は以前のものよりもそれほど良くないことがわかりました。私は図や写真が大好きですが、システムの複雑さを十分に説明していないと感じることがよくあります。(すべての小さなものの「落とし穴」はどうですか?) このプロジェクトは、クライアントに引き継ぐところまで来ており、物事をより困難にするために、私が知識移転を行う人は、基本的に大学を卒業したばかりです。(上級開発者と知識の移転をするときのほうがずっといいというわけではありません。) 私はユーザーグループに月に一度参加し、その他の機会が生じたときに新しいトピックを紹介されることはありませんが、効果的な知識の共有を複製する能力は非常に不十分だと感じています。 どんなアドバイスも大歓迎です。私は主に私が従うことができるガイドラインを探しています。例:どこから始めますか?どのように進めますか?聞き慣れない技術やパターンを、一日中取らずにどのようにカバーしますか?どこでビジネスロジックとコード構造を結び付けますか? ありがとうございました! (いつものように、あなたが適切だと思うように質問を自由に編集してください。)

1
Curiosityローバーからの伝送をMRO経由でデコードするのになぜ時間がかかるのですか?
NASAによるこのビデオクリップは、火星偵察オービター(MRO)によって中継されたCuriosityからのデータが数時間保存され、その後地球に送信され(見かけ上約14分かかる)、その後エンジニアがデコードするのに数時間かかると述べていますデータ。 私が読んだことから、MROは必要に応じてCuriosityのバックアップ通信デバイスとして使用できるようです。 Curiosityの着陸の場合、MROはデータを格納し、それが赤い惑星の周りを周回し、それを送信する前に地球との直接の視線を持つようになると考えています(それから、ここで推測するだけです)理解する。 しかし、なぜ地球上でここに受信された後、MROによって中継された信号をデコードするのにNASAエンジニアは何時間もかかるのでしょうか? (ボーナスポイント:通常、MRO信号をデコードするには数時間かかりますか?)

7
急激な変化のコストにどのように対処しますか?
最近のほとんどの開発者と同様に、顧客コラボレーションや変更への対応などのアジャイルプリンシパルを高く評価していますが、製品所有者(または要件と優先順位を決定する人)が頻繁に要件と優先順位を変更するとどうなりますか?1日に数回好きですか? 私は最近、バグがあり、不完全であり、想定される最も単純なシナリオを処理することさえできなかった小さなコードベースを継承しました。技術的な問題に対処することはできますが、1日に数件のメール、テキスト、または電話があります。さらに悪いことに、ほとんどのことは、ソフトウェアが実際に行うこととは関係なく、実装するのに何日もかかるような些細なことです。時間は非常に長く、最も重要なことに最初に集中する必要があることを説明しようとしましたが、翻訳が1日か2日後に起こるため、翻訳で何かが失われるようです。 無駄な努力の量を減らすのに役立つ、または少なくともこの混oticとした行動のコストを説明するのに役立つ製品所有者ハンドラーの役割、詳細な研究、比phor、または引用がありますか?

3
スクラムチームのチームマネージャーおよび開発者であること
私は最近スクラムに移った6人のチームを管理しています。 スクラムマスター(チームの開発者の1人)とプロダクトオーナーがいます。 かなりの空き時間があるため(以前は多くの管理作業がスクラムマスターとプロダクトオーナーによって行われていたため)、技術的に関連性を保ちたいため、技術開発作業を行っています。 私は開発チームの一員として行動し、各スプリントのストーリーの一部にコミットし、チームの一員としてすべての会議に参加します。 それは良い考えだと思いますか?チームの「自己組織化」と矛盾することはありますか?
11 scrum  management 

4
二項演算子の前後に改行を入れるべきですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 PythonまたはJavascriptを使用している場合は、改行がコードを途中で終了させないように、常に前の行の最後にバイナリ演算子を配置する必要があります。エラーをキャッチするのに役立ちます。 しかし、CまたはC ++では、これは問題ではないので、私は疑問に思っています: 最初のバージョンよりも2番目のバージョンを好む理由はありますか? return lots_of_text + 1; 対 return lots_of_text + 1; (たとえば、そのうちの1つは他の種類のエラーの防止に役立ちますか?または、そのうちの1つはより読みやすいと見なされますか?)
11 c++  coding-style 

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