ソフトウェア工学

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

5
シャンペーンの噴水パズル
空のグラスは次の順序で並べられます。 液体がいっぱいの場合、1枚目のガラスに液体を注ぐと、余分な液体がガラス2と3に等量で流れます。ガラス2がいっぱいになると、余分な液体が4と5などに流れます。 液体がNリットルで、各ガラスの最大容量が1リットルである場合getWaterInBucket(int N, int X)、Xがガラス数である関数に記入してガラスに注ぐことにより液体をNリットル空けた場合、ガラスに存在する液体の量を与えます。たとえば、最初に4リットルが必要で、ガラス3の水を見つけたい場合、関数はgetWaterInBucket(4, 3) プログラムでこれを解決するにはどうすればよいですか?パスカルの三角形を使って数学の解を見つけようとしました。これは機能しませんでした。私はそれをツリーだと考えたので、このようなパラメーターを追加し、getWaterInBucket(BTree root, int N, int X)各レベルで再帰的な解決策を試すことができますが、この問題ではパラメーターは許可されていません。明らかな何か、いくつかのトリックはありますか?

5
返品後に作業を行うためのfinally節の使用は、スタイルが悪い/危険ですか?
イテレーターの作成の一環として、次のコードを作成していることに気付きました(エラー処理を削除) public T next() { try { return next; } finally { next = fetcher.fetchNext(next); } } 読むよりもやや読みやすい public T next() { T tmp = next; next = fetcher.fetchNext(next); return tmp; } 私はそれが読みやすさの違いがそれほど圧倒的ではないかもしれない単純な例であることを知っていますが、例外が含まれていないこのような場合にtry-finallyを使用するのが悪いかどうかについての一般的な意見に興味がありますコードを簡素化するときに実際に優先される場合。 悪い場合:なぜ?スタイル、パフォーマンス、落とし穴、...? 結論 あなたのすべての答えに感謝します!(少なくとも私にとって)結論は、最初の例は一般的なパターンであれば読みやすかったかもしれないが、そうではないということだと思います。そのため、目的外の構造を使用することで生じる混乱と、場合によっては難読化された例外フローが、単純化よりも重要になります。

10
ソロ開発者としてコミットメッセージを作成しますか?
私と他のプログラマとの間でリポジトリが共有される私のプロジェクトでは、私が主な開発者であっても、常にコミットメッセージを書き込みます。 しかし、私がプロジェクトに取り組んでいるソロ開発者であり、リポジトリが私のラップトップでホストされており、クライアントによってさえホストされていないプロジェクトでは、私以外の誰もコミットを見ることができませんメッセージ? これまで私はそれらを書いてきましたが、私は決して戻ってコミットメッセージを見たことがないことに気付きました。メッセージを書き留めるために開発に時間をかけますが、それでも私には二度と見られません。 単独の開発者としてコミットメッセージを書く正当な理由はありますか、それともスキップして開発に専念することをお勧めしますか?

7
正規表現は実際にどのように機能しますか?
エッセイが書かれた文書があるとします。このエッセイを解析して、特定の単語のみを選択します。クール。 正規表現を使用すると、ファイルを行ごとに解析し、単語ごとに一致を検索するよりも高速ですか?もしそうなら、それはどのように機能しますか?各単語を見るよりも速く進むにはどうすればよいですか?

4
昨年からのオープンソースプロジェクトの更新の著作権日はいつですか?
2011年に、Apacheライセンスを使用してライセンスされたオープンソースコードをリリースしました。そのため、すべてのソースファイルの先頭にこのボイラープレートメッセージがあります。 /* Copyright 2011 My Name Licensed under the Apache License... <blah blah> */ それで今は2012年で、バージョン1.1をリリースする準備ができています。そのため、ほとんどすべてのソースファイルが何らかの方法で変更されています。また、いくつかの新しいソースコードファイルが追加されました。 既存のファイルの著作権日付を更新するにはどうすればよいですか?次は各ソースファイルの正しい更新ですか?(つまり、2011を「2011-2012」に変更) /* Copyright 2011-2012 My Name Licensed under the Apache License... <blah blah> */ 新しいソースファイルCopyright 2011-2012も同様に適用されますか?または、新しいコードは単に取得しCopyright 2012ますか?

8
辞書とリスト
それで私はDictionary<int, int>今日仕事に出くわしました。おそらくList<int>代わりにa を使用したので、これは私には奇妙に思えました。違いはありますか?一方の構造がもう一方の構造よりも優先されるユースケースがありますか?

6
Python関数呼び出しで未使用の戻りパラメーターに使用するスタイル
関数が値のタプルを返すが、それらの値の1つだけが後で使用される状況を処理するための推奨/一般的に受け入れられているコーディングスタイルはありますか呼び出しはおそらく少しやり過ぎです...)?する代わりに a, b, c = foo() そして、andを使用bしないだけcで、次のバリアントのうちどれを優先する必要がありますか(または別のものがありますか?): バリアント1(アンダースコア) a, _, _ = foo() (これは非常に明確でシンプル_ = gettext.gettextですが、翻訳を使用する多くのアプリケーションでの使用と衝突する可能性があります) バリアント2(ダミー名) a, unused, unused = foo() (あまり魅力的ではない、私は思う、同じような他の名前にも当てはまりますdummy) バリアント3(インデックス) a = foo()[0] (私にとっては、()[0]Pythonに見えない…)

8
遅延評価の概念が役立つのはなぜですか?
思わ遅延評価式のが彼らのコードが実行される順序を失うコントロールにプログラマを引き起こす可能性があります。これがプログラマーに受け入れられる、または望まれる理由を理解するのに苦労しています。 式がいつどこで評価されるかが保証されていない場合、このパラダイムを使用して、意図したとおりに動作する予測可能なソフトウェアを構築するにはどうすればよいですか?

12
あなたの後輩があなたの提案を採用しなかった場合、あなたは何をすべきですか?[閉まっている]
私は3〜4人のジュニア開発者のチームを率いています。私の仕事は、コードを書くことに加えて、後輩に監督と指導を提供することです。 しかし、私は開発者が自分の仕事で自律性をどれほど大切にしているのかを完全に理解しており、自分の考えやアルゴリズムをスプーンで提供することによって彼らの本質的な動機を破壊したくありません。私は彼らに彼ら自身の方法で問題を探求し、彼ら自身でそれについて考え、彼らが本当に乗り越えられない問題に直面しているときだけ私に来てほしい。 彼らが私に来たとき、時にはアルゴリズムが十分に堅牢ではないため、問題を解決するために完全に異なるアルゴリズムを提案する必要があります(私はシニアであり、私は彼らよりも多くを見てきました)。もちろん、私は彼らの感情を傷つけないようにこれを素敵な方法で説明し、私の解決策が彼らのものよりもはるかに優れていることを優しく概説します。 それでも、彼らは私の提案を受け入れたがらない場合があります。その理由の1つは、独自のアルゴリズムに多大な投資をしているからです。どこにも行きません。しかし、私の心の奥深くでは、私のアルゴリズムが彼らのアルゴリズムよりもはるかに優れていることをよく知っているので、採用するだけです。 彼らが私の提案を採用しなかった場合、どうすればよいですか?彼らに自分の道をたどるように頼むべきなのか、それとも彼らに何度も頭を壁に叩きつけて、彼らが私に戻ってくるのを待つべきなのか?前者を実行すると独裁者になりますが、後者を実行すると貴重な開発時間がかかり、バグ修正コストが発生します。私は本当にここでジレンマに陥っています。

14
開発者の地位について自然科学者にインタビューする方法は?[閉まっている]
元の質問 私はすでに私の会社のためにいくつかのインタビューを行いました。ほとんどは開発者のコ​​ンピューター科学者でしたが、テスターとプロジェクトマネージャーもいました。今、R&D部門内の研究グループの空きを埋める必要があります(補足:「研究」とは、大学、他社、研究センターと一緒に研究プロジェクトのソフトウェアを使用して、専門分野/市場ニッチの問題を解決しようとすることを意味しますそれはコンピューターサイエンスの研究ではなく、P = NPの問題を解決するつもりはありません)。 今、私たちは化学の修士号(彼の履歴書にも多くの物理学を持っている)を持っている人を招待しました。私はすでに地元の大学のキャリア日で彼と約30分話をしました、そして、彼が賢いことは間違いありません。また、彼のマークは優れており、彼は際立って卒業しました。彼の理学士号のために、彼はMathematicaでプログラミングを習得する必要があり、彼はプログラミングが大好きだったと信じて信じていました。また、彼は、理学修士論文のためにMathematicaに実装された彼自身のソフトウェアを使用して理解できないと思われる物理化学の問題を解決しました。GUIと8,000 LoCの注目すべきサイズが含まれています。彼は私たちの研究グループでやっていることに非常に惹かれているようで、正直なところ、私たちのような中小企業が良い人を得るのは非常に難しいです。また、プロジェクトの提案、レポートの作成、プレゼンテーションなどを支援してくれるので、彼を雇うことに非常に興味があります。彼もおそらく私たちのチームに合うでしょう。 残っている唯一の質問は、彼がプロジェクトでソフトウェア実装を行うために必要なプログラミングスキルを習得できるかどうかを確認するにはどうすればよいでしょうか? もちろん、私は彼にそれが何であるかを尋ねます。それは彼がプログラミングについて魅力的だということです。また、彼が自然科学ソフトウェアをどのように作成し、どのように構造化したのかを尋ねます。彼がどのようにして彼が必要とするソフトウェア開発に関するスキルと情報を取得したかについて尋ねます。しかし、もっと質問できることはありますか?より具体的な何かでしょうか?彼にMathematicaソリューションを説明してもらえますか? 明確にするために、私は特定の言語または技術スタックの知識を探していません。私たちは製品開発の.NETショップですが、研究プロジェクトのために自由に選択したいと思います。だから、私はメタコンピテンスが実際に必要なものを何でも学習できることに興味があります。 私は能力をチェックするデフォルトの方法があれば、私は本当に好き知っているので、この質問は釈明し、オープンエンドでないことを願う得る仕事にさらにプログラミングのスキルが。不明な点がある場合は、コメントをお寄せください。質問を改善させてください。 2011-12-01までの回答を反映するように更新 受け入れた回答とその理由 答えてくれてありがとう、それらのほとんどは非常に役立つので、私はたくさん賛成しました!けれどもトム・スクワイアーズの答えが最も多くの票を得た、私は受け入れるつもり王子グーラッシュによって与えられた答えを。もちろん、トムは客観的には正しいのですが、プリンスの答えは私にとってより有益であり、私はこれが答えを受け入れる基準であるというFAQを再確認しました。 インタビュー中に彼に尋ねる内容 Chris Burt-Brownが言及したThe Camel Has Two Humpsの 例のようないくつかの簡単な割り当てを彼に説明させます 多分グラフィカルな表記法で、より高度な制御フローを説明するように彼にお願いします。 数学の例を使用して、再帰の理解を確認します。 自然言語で彼が選んだアルゴリズムを彼に説明させます。 彼に彼のMathematicaソリューションを説明させてください。特に、彼の手順モデル、ツールの使用法、一般的なコードとソフトウェアの構造化、および異なる抽象化レイヤーを求めます。 彼の動機を確認するために、私は彼のソフトウェア開発の魅力を求めます。 彼がエンタープライズソフトウェア開発について学ぶために必要なものを知っているかどうか尋ねます。特に、私は彼の修士号だけで働いた後、彼がこれについて多くを知らないことを期待するので、議論をチーム、ペアプログラミング、TDDで働く方向に変えたいと思います。 長いインタビューになりそうですね;) インタビュー後の更新2011-12-09 再びあなたの良い答えに感謝します。彼は色とりどりのインタビューに合格しました。応募者にこれほど満足したことはありませんでした。彼のMathematicaソリューションは非常にうまく構成されているようです。彼は高階関数をどこで使用したかを説明できましたが、これらがこのように参照されていることを知りませんでした。The Camel Has Two Humpsからの簡単な割り当てと制御フローに加えて、数学ベースの再帰の質問に答えてくれました。彼がいくつかのアルゴリズムを説明していたとき、非線形フィッティングについて多くのことを学びました;)また、彼はもちろん、彼が今まで知らないプロのソフトウェア開発について学ぶことができることを保証することはできないと正直に言いました。しかし彼は、自分でも常に新しい概念を学ぶのが得意であり、ソフトウェア開発に本当に興味があると信じています。彼はまた、プロジェクトの技術スタックを要求しました。彼は最初に適用され、自宅でそれを見ることができました。彼はペアプログラミングとチームワークにも興味がありました。今、私は雇用契約が締結されることを願っています。
30 interview  hiring 


10
関数型プログラミングの支持者は、Code Completeでこのステートメントにどのように答えますか?
Steve McConnellは、第2版の839ページで、プログラマーが大きなプログラムで「複雑さを克服する」ためのすべての方法について議論しています。彼のヒントは次のステートメントで終わります。 「オブジェクト指向プログラミングは、アルゴリズムとデータに同時に適用される抽象化のレベルを提供します。これは、機能分解だけでは提供されない一種の抽象化です。」 「複雑さを軽減することは、間違いなく効果的なプログラマーになるための最も重要な鍵」(同じページ)という彼の結論と相まって、これは関数型プログラミングへのほとんどの挑戦のようです。 FPとOOの間の議論は、並行性または並列化の課題に特に由来する複雑性の問題に関するFPの支持者によってしばしばフレーム化されます。ただし、ソフトウェアプログラマが克服する必要があるのは、同時性だけではありません。おそらく、ある種の複雑さを減らすことに焦点を合わせると、他の次元では大幅に増加するため、多くの場合、ゲインはコストに見合うものではありません。 FPとOOの比較の条件を、並行性や再利用性などの特定の問題からグローバルな複雑さの管理にシフトした場合、その議論はどのように見えるでしょうか? 編集 私が強調したかったのは、オブジェクト指向はデータとアルゴリズムの両方の複雑さをカプセル化して抽象化しているように見えますが、関数型プログラミングはデータ構造の実装の詳細をプログラム全体に「公開」することを奨励しているようです。 たとえば、ここで「データ型の過剰な指定」は「慣用的なOOスタイルの否定的な結果」であり、AddressBookをより豊富なOOオブジェクトではなく単純なベクトルまたはマップとして概念化することを推奨するStuart Halloway(Clojure FP支持者)を参照してください追加の(非ベクター的かつ非マップ的)プロパティとメソッドがあります。(また、オブジェクト指向およびドメイン駆動設計の支持者は、AddressBookをベクトルまたはマップとして公開すると、カプセル化されたデータがドメインの観点からは無関係または危険なメソッドに過度に露出されると言うかもしれません)。

3
BDDとTDDの関係
BDDとTDDの関係は何ですか? 私が理解したことから、BDDはTDDよりも2つの主要なものを追加します。テストの命名(保証/すべき)と受け入れテストです。BDDによる開発中にTDDに従う必要がありますか?「はい」の場合、TDDユニットテストの名前は同じシュア/スタイルで指定する必要がありますか
30 tdd  bdd 

11
ソース管理のバイナリ
組み込みデバイスやその他の奇妙な世界向けに開発する場合、ビルドプロセスに非常に特殊なバージョンを使用する複数の独自のバイナリが含まれる可能性が非常に高くなります。質問は、ソース管理の一部ですか?私のオフィスでは、「ソース管理からのチェックアウトにはコードをコンパイルするために必要なすべてが含まれます」というルールに従っており、これはいくつかの深刻な議論につながっています。 これに対する主な議論は、ソース管理DBの肥大化、バイナリファイルの差分の欠如です(この件に関する以前の質問を参照)。これは、前の開発者が意図した正確な環境があることを確認し、ビルドし、適切なファイルを探し出すことなく(特定のバージョンも同様に!)

17
数学者へのプログラミングの紹介[非公開]
私は現在プログラマーであり、ほぼ16歳であり、コンピューターサイエンスの学位または電気工学の学位を含むものにキャリアを絞り込んでいます(かなり異なることを知っていますが、この質問は私の友人に関するものです)友だちはよくわからない。 彼は非常に数学に興味を持って、それで非常に良いですし、私は彼がプログラミングを楽しむだろうと思うが、彼は(それを試して喜んでではありません編集彼はある試してみる気はなく前に行われたことはありません)。数学の問題を解決したり、ある種の数学に関与したりするために、プログラミングに手を出すことができる言語やツールについての提案を誰にも教えてもらえますか。 私は彼が数学をとても楽しんでいると言いますが、私は彼がプログラミングを楽しむだろうと思うので、問題は、メモリ割り当てなどの入門レベルでは関係のないものによって彼を先送りにしたくないことです。私はそれが非常に重要であることを知っていますが、ポイントは、数学を使って少しプログラミングを学んでもらい、興味があればプログラミングとしてプログラミングを学び始めることができることを願っています。 編集: それは彼が完全に無関心であるということではありません-それはおそらく彼が以前に積極的にそのエリアを探索したことがないということです。私は彼に彼がしたくないことを強制することを望まないだろう、私は彼がプログラミングについて学ぶことができるように、これを少しプッシュのように見ている。もし彼がそれを気に入らないなら-十分に公平で、私はそれを制御することはできませんし、望んでいませんが、彼がそれを楽しむことが判明した場合-このプッシュは正しいことでした。
30 education  math 

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