ソフトウェア工学

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

8
自社の製品を開発するためにアウトソーシングする代わりに、社内のソフトウェア開発者を雇うのはなぜですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 貴社の製品開発において、アウトソーシングよりも社内で採用する理由は何ですか?私はほんの少ししか考えることができませんが、それらが十分な理由であるかどうかは完全にはわかりません。 これは実際にクラスで議論するためのものです。私はアウトソーシングの部分にもっと傾いていますが、残念ながら、私は議論の社内側に切り替えるように頼まれました。 何か案は?

12
内部構造がある場合、長い関数は受け入れられますか?
ネストされた関数(PythonやDなど)をサポートする言語で複雑なアルゴリズムを扱う場合、私はしばしば(アルゴリズムが複雑なため)巨大な関数を記述しますが、ネストされた関数を使用して複雑なコードを構成することでこれを緩和します。ネストされた関数を使用して内部的に適切に構造化されていても、巨大な(100行以上の)関数は依然として悪と見なされますか? 編集:PythonまたはDに精通していない人のために、これらの言語のネストされた関数は、外部関数スコープへのアクセスも許可します。Dでは、このアクセスにより、外部スコープ内の変数の突然変異が許可されます。Pythonでは、読み取りのみが許可されます。Dでは、宣言することにより、ネストされた関数の外部スコープへのアクセスを明示的に無効にできますstatic。

10
要件ドキュメントを作成する適切な方法は何ですか?
現在、私のスーパーバイザーは、バグ追跡ソフトウェアを使用して要件のドキュメント/仕様を作成しています。これは私にとってひどいアイデアのように思えます。すべての要件はこれらの小さなチケットにあり、要件を取得するためにこの馬鹿げたWebフォームをクリックする必要があります。要件/ソフトウェア仕様に対する健全なソフトウェアソリューションとは何ですか? 明確にするために、私は非常に多くの機能を備えたこの大きなソフトウェアコンポーネントを構築しており、これらの機能はこのバグ追跡ソフトウェアで説明されています。

8
常に自分の仕事に干渉しているが、実際にはそれを理解していないマネージャーにどのように対処しますか?
私たちは皆、マネージャーであり、10年以上前にセールスから来た人、またはコードを最後に見た人がいますが、コードの書き方を知っていると思います。 彼の介入に感謝しているという印象を与えるために私は何ができますか? または、最新のコーディング技術と実践を使って教育するために、マネージャーともっと関与する必要がありますか?結局のところ、これらを理解しているマネージャーは、プロジェクトとそのタイムスケールについて議論するときに、クライアントや上級管理職と賢く話すことができるでしょう。

17
「コンピューターサイエンス!=ソフトウェアエンジニアリング」は、プログラミングを不十分に教える口実ですか?
ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 みんな聞いたことがあります。最終的に誰かが言う開発スキルの低いCS卒業生についての議論があるときは、 コンピュータサイエンスはソフトウェアエンジニアリングではありません。 問題は、プログラミングとソフトウェア開発が CSコースで教えられていることです。彼らは一般的に不十分に教えられています。それが教えられているなら、なぜ最初に正しく教えてみませんか?* だから私は2つの質問に関する意見を見てみたい: CS!= SEの引数は、プログラミングスキルを適切に教えていないことの秘coまたは言い訳です。 質問1への回答に関係なく、あなたがそのような決定をする全能の立場にいた場合:CSコースでのプログラミングの適切な教育に力を入れますか? *。教育を通じて得た事例証拠に基づいて、この分野のほとんどの学者は維持するコードを書く必要がなく、コードを維持していないという疑いがあり、その結果、知識/スキルがありませんそれを効果的に教えるために。

16
CがわからなくてもC ++が得意であれば大丈夫ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 ここで最もよく答えられると思う質問があります。 私はC++言語に満足しているので、Accelerated C++ほとんどすべての演習を読んで実行したので、私はかなり上手です。 しかし、私には大きな問題があります。学ぶ必要がありますCか?C私の人生でこれまでやったことがありません。私はちょうどを始めC++、私がプログラミングを始めたとき。おそらく誰もがなぜこの言語をそれほど複雑と呼ぶのかを知りたいと思っていたからです。今、私はその質問への答えを知っていますが;) 私はC今日の世界で知らなくても生き残ることができるかどうかを知ることに特に興味があります。会社で面接をする場合、私に知らないことを伝える場合C-彼らはそれをOKと見なしますか?私が得意とする2つの言語は、PythonとC ++です。企業がインタビューでデータ構造を尋ねると聞いたことがあるので、私はこの原因を尋ねています。だから、彼らが私にそれを実装するように頼んだら、そして私がC ++でそれをするなら、それは受け入れられますか? また、「C ++のときにCを知らない」と言う人は、返信しないでください:)違反はありませんが、なぜCを学ぶことが必須なのか理解できません。
23 c++  c 

16
テスト駆動開発は誰が行うのですか?
ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 私は過去4年半にわたってエンタープライズの分野で働いてきましたが、一般的に言って、エンタープライズはテストファーストスタイルの開発を促進する環境ではないことに気付きました。プロジェクトは通常、固定コスト、固定タイムライン、およびウォーターフォールスタイルです。ユニットテストが行​​われたとしても、通常はQAフェーズでの開発後に別のチームによって行われます。 企業で働く前に、私は多くの中小企業に相談しましたが、テストファーストスタイルの開発プロジェクトにお金を払うつもりはありませんでした。彼らは通常、開発をすぐに開始するか、短い設計期間の後、つまりアジャイルに似たものを望んでいましたが、一部のクライアントはすべてがウォーターフォールのようにマッピングされることを望みました。 テスト駆動開発は、どのタイプのショップ、企業、クライアントで最も効果的ですか?どのタイプのプロジェクトがTDDを助長する傾向がありますか?

17
COBOLはまだ学ぶ価値がありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 COBOLの学習は依然として理にかなっていますか?
23 learning  cobol 

14
マネージャーがプログラミング言語を選択する方法
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 マネージャーがプロジェクトで使用されるプログラミング言語を課すことができ、しばしば課すことになるのは誰にとっても秘密ではありません。 私自身プログラマーであるため、これを理解することはできませんでした。 しかし、今私はそう思います。JoelSpolskyがポッドキャストでQuickBooksを使うべきだと言ったとき、「世界のすべての会計士はそれを知っている」ので啓示を受けたばかりです。これは、「世界中のすべてのプログラマーがJavaを知っているためJavaを選択する」と非常によく似ていると思いました。 同じ問題を別の観点から見たので、会計についてはあまり知りませんが、プログラミングについては知っていますが、プロジェクトに適切なプログラミング言語が選択されていることをプログラマがどのように支援できるか疑問に思っています?

6
コンパイラが「複雑な」式を静的に型チェックするときに使用される一般的な手順は何ですか?
注:タイトルで「複雑」を使用したとき、式には多くの演算子とオペランドがあることを意味します。式自体が複雑なわけではありません。 私は最近、x86-64アセンブリの単純なコンパイラに取り組んでいます。コンパイラのメインフロントエンド(レクサーとパーサー)を終了し、プログラムの抽象構文ツリー表現を生成できるようになりました。そして、私の言語は静的に型付けされるので、次のフェーズ、つまりソースコードの型チェックを実行しています。しかし、私は問題に遭遇し、自分で合理的に解決することができませんでした。 次の例を考えてみましょう。 私のコンパイラのパーサーは、次のコード行を読み取りました。 int a = 1 + 2 - 3 * 4 - 5 そして、それを次のASTに変換しました: = / \ a(int) \ - / \ - 5 / \ + * / \ / \ 1 2 3 4 次に、ASTを入力する必要があります。最初に=演算子をチェックするタイプから始まります。まず、オペレーターの左側をチェックします。変数aが整数として宣言されていることがわかります。そのため、右側の式が整数に評価されることを確認する必要があります。 式が1or などの単一の値である場合、これがどのように行われるかを理解しています'a'。しかし、複数の値とオペランドを持つ式 -上記のような複雑な式 -では、これはどのように行われますか?式の値を正しく判断するには、型チェッカーが実際に式自体を実行し、結果を記録する必要があるようです。しかし、これは明らかにコンパイル段階と実行段階を分離する目的を無効にしているようです。 私がこれを行うことができると思う他の唯一の方法は、ASTの各部分式のリーフを再帰的にチェックし、リーフのすべてのタイプが期待される演算子タイプと一致することを確認することです。そのため、=演算子から始めて、型チェッカーは左側のすべてのASTをスキャンし、リーフがすべて整数であることを確認します。次に、部分式の各演算子に対してこれを繰り返します。 「The Dragon Book」のコピーでトピックを調査しようとしましたが、あまり詳細に説明されていないようで、すでに知っていることを繰り返します。 コンパイラが多くの演算子とオペランドを含む式を型チェックするときに使用される通常の方法は何ですか?上記の方法のいずれかが使用されていますか?そうでない場合、メソッドは何であり、どのように正確に機能しますか?

7
文字列の類似性に最適なアルゴリズムは何ですか?
アドレスに基づいてさまざまなWebページのコンテンツを一意に識別するプラグインを設計しています。 したがって、次のようなアドレスを1つ持つことができます。 1 someawesome street, anytown, F100 211 後で、このアドレスがわずかに異なる形式で見つかる場合があります。 1 someawesome street, F100 211, またはおそらく曖昧な someawesome street F100 これらは技術的には同じアドレスですが、ある程度の類似性があります。a)検索を実行するために各アドレスに一意の識別子を生成し、b)非常に類似したアドレスがいつ表示されるかを把握したいと思います。 どのアルゴリズム/テクニック/文字列メトリクスを見るべきですか?レーベンシュタイン距離は明らかな選択のように見えますが、ここで役立つ他のアプローチがあるかどうかは興味があります。

1
一部の言語のドキュメントで「ある」ではなく「と同等」と表示されるのはなぜですか?
一部の言語のドキュメントで「ある」ではなく「と同等」と表示されるのはなぜですか? たとえば、Python Docsは言う itertools.chain(*iterables) ... 以下と同等: def chain(*iterables): # chain('ABC', 'DEF') --> A B C D E F for it in iterables: for element in it: yield element あるいは、このC ++の参照にfind_if: この関数テンプレートの動作は次と同等です: template<class InputIterator, class UnaryPredicate> InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred) { while (first!=last) { if (pred(*first)) return …

3
C#でunsigned intを使用しないようにする必要がありますか?
最近、C#で符号なし整数を使用することを考えました(他の「高レベル言語」についても同様の議論が言えると思います) 整数が必要なとき、私は通常整数のサイズのジレンマに直面していないとき、例はPersonクラスの年齢プロパティです(ただし、質問はプロパティに限定されません)。それを念頭に置いて、私が見る限り、符号付き整数( "int")よりも符号なし整数( "uint")を使用する利点は1つだけです。それは読みやすさです。年齢が正の数にしかならないという考えを表現したい場合は、年齢タイプをuintに設定することでこれを達成できます。 一方、符号なし整数の計算では、あらゆる種類のエラーが発生する可能性があり、2つの年齢を減算するなどの操作を行うことが難しくなります。(私はこれがJavaが符号なし整数を省略した理由の1つだと読んだ) C#の場合、セッターのガード句は2つの世界の最高のものを提供するソリューションになると考えることもできますが、たとえば、年齢が何らかの方法に渡される場合、これは適用できません。回避策は、Ageというクラスを定義し、プロパティageのみをそこに置くことですが、このパターンでは、Meに多くのクラスを作成させ、混乱の原因になります(他の開発者は、オブジェクトが単なるラッパーであるときそして、それがより洗練されたものである場合)。 この問題に関する一般的なベストプラクティスは何ですか?このタイプのシナリオにどのように対処すればよいですか?

5
ビルドツールが、基礎となるプログラミング言語とは異なるスクリプト言語を使用するのはなぜですか?
私は最近、ほとんどの言語のメインビルドツール/システムが基礎となるプログラミング言語自体とは異なる言語を使用していることに気付いたときに、Nodejsプロジェクトのビルドツールを使用しています。 たとえば、makeはCまたはC ++を使用してスクリプトを記述せず、ant(またはMaven)はスクリプトの言語としてJavaを使用しません。 Rubyのような新しい言語は、rakeのようなビルドツールに同じ言語を使用します。しかし、なぜこれが常に当てはまらないのですか?基礎となる言語とは異なる言語を使用するビルドツールを持つことの利点は何ですか?

2
Groovyでdefを使用する場合
私はGroovyで少しの間開発を続けてきましたが、どのくらいの頻度でダイナミックキャスティングを使用する必要があるのdefでしょうか?私の同僚は、Groovyが私には理解できない何らかの形で役立つので、常に使用すべきだと考えています。 現在、メソッドの戻り値の型と引数を宣言するとき、どのオブジェクトを取り込み、吐き出すかを意図的に述べたいと思います(コードを読みやすくするために、Javaのバックグラウンドから来たのは理にかなっています)例: String doSomething(String something){ //code } // vs def doSomething(def somthing){ //code } // vs def doSomething(somthing){ // code } だから、私の質問は、いつ使用するdefかという好みだけですか、それを常に使用することに本当の利点があるのでしょうか?(最後の例を追加したのは、Groovyの実行可能なオプションとしての質問に収まると感じたからです)

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