ソフトウェア工学

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

8
LSP vs OCP / Liskov Substitution VS Open Close
私は、OOPの固い原則を理解しようとしていますが、LSPとOCPにはいくつかの類似点があるという結論に達しました(詳しくは言いませんが)。 オープン/クローズの原則には、「ソフトウェアエンティティ(クラス、モジュール、関数など)は拡張のために開かれているが、変更のために閉じられている必要があります」と記述されています。 簡単な言葉で言えば、LSPはのFooインスタンスをBar派生元のインスタンスに置き換えることができFoo、プログラムはまったく同じように機能することを示しています。 私はプロのOOPプログラマーではありませんが、LSPはBar、から派生しFooたものがその中の何も変更せず、拡張する場合にのみ可能であるように思われます。つまり、特定のプログラムのLSPはOCPが真の場合にのみ真であり、OCPはLSPが真の場合にのみ真です。それは、それらが等しいことを意味します。 私が間違っている場合は修正してください。これらのアイデアを本当に理解したいです。答えてくれてありがとう。

4
Pythonのイテレータが例外を発生させるのはなぜですか?
Javaの反復子の構文は次のとおりです(C#の構文に似ています)。 Iterator it = sequence.iterator(); while (it.hasNext()) { System.out.println(it.next()); } 理にかなっています。Pythonの同等の構文は次のとおりです。 it = iter(sequence) while True: try: value = it.next() except StopIteration: break print(value) 例外は、例外的な状況でのみ使用されることになっていると思いました。 Pythonが例外を使用して反復を停止するのはなぜですか?

3
どちらがより良い習慣ですか-インスタンスまたは静的としてのヘルパーメソッド?
この質問は主観的なものですが、ほとんどのプログラマーがこれにどのようにアプローチしているかに興味がありました。以下のサンプルは擬似C#ですが、これはJava、C ++、およびその他のOOP言語にも当てはまります。 とにかく、クラスでヘルパーメソッドを記述するとき、静的メソッドとして宣言し、ヘルパーメソッドで必要な場合はフィールドを渡すだけです。たとえば、以下のコードを考えると、メソッド呼び出し#2を使用することを好みます。 class Foo { Bar _bar; public void DoSomethingWithBar() { // Method Call #1. DoSomethingWithBarImpl(); // Method Call #2. DoSomethingWithBarImpl(_bar); } private void DoSomethingWithBarImpl() { _bar.DoSomething(); } private static void DoSomethingWithBarImpl(Bar bar) { bar.DoSomething(); } } これを行う私の理由は、ヘルパーメソッドが実装を読み取らなくても、他のオブジェクトに副作用がある可能性があることを(少なくとも私の目には)明らかにするからです。この手法を使用するメソッドをすばやく理解できるため、デバッグに役立ちます。 あなたはどちらか好む独自のコードでやってそうするためのあなたの理由は何ですか?

17
プログラミングの分野で、一日中机に座る必要のない仕事はありますか?[閉まっている]
私はプログラミングの分野では新しいです。私はそれをキャリアとして本当に楽しんでいますが、1日8時間デスクに座って処理できるかどうかはわかりません。もちろん、短い時間でも構いませんが、毎日やることはできません。 デスクで費やす時間が少ないジョブを含むプログラミング分野はありますか?

4
最初のC ++コンパイラはどのようにC ++で作成できますか?
Stroustrupは、最初のC ++コンパイラであるCfrontがC ++で作成されたと主張しています(Stroustrup FAQ)。 しかし、最初のC ++コンパイラをC ++で作成することはどのように可能ですか? コンパイラーを構成するコードもコンパイルする必要があります。したがって、最初のC ++コンパイラーをC ++で作成することはできませんでしたか?


3
LGPLライセンスライブラリを使用する場合、正確に何をする必要がありますか?
この質問と回答を読んだことがありますが、LGPLライセンスを使用するライブラリ(私の場合はSDLライブラリ)と動的にリンクする場合、どうすればよいのかまだ理解できません。 LGPLテキストを正しく理解している場合は、何らかの形でライブラリのソースを提供する必要があります。これで十分ですか?そうでない場合、他に何をする必要がありますか?
48 lgpl 

20
「バスファクター」を向上させるために、適切なドキュメントとクリーンなコードを作成する必要がありますか?
ソフトウェア開発会社の主な目標の1つは、バスファクターを増やすことです。これは、Googleが主催した講演でも支持されています。 つまり、明日バスで走り去ってもプロジェクトが継続できるように、すべてをコーディングして文書化する必要があります。言い換えれば、あなたはあなたと同じようなスキルセットを持つ他のプログラマーに簡単に交換できるようにするべきです。 交換可能であることは、開発者の利益に反するものではありませんか?この本では、48の権力法則11 で、権力を得るために人々をあなたに依存させ続け、それが金銭的な報酬に変換されるようにすべきであると述べています。 6か月の一時停止後もプロジェクトを続行するために自分用のドキュメントが必要なシナリオとは別に、開発者とソフトウェア会社の間には明確な利害の対立があるようです。 プログラマーとして、本当に素晴らしいドキュメントと誰でも簡単に読めるコードを書くべきでしょうか。または、それが仕事をし、あなた自身がそれを理解できる方法でコードとドキュメントを書くべきですが、他の人はそれを理解するのに苦労するかもしれませんか?

3
なぜ2 ^ 16が「特別な」数字なのですか?[閉まっている]
OK、私はこれを尋ねるのは愚かだと思う-しかし、ジェフの記事で:インタビュー電話画面を正しく取得し、もともと5つの重要な電話画面の質問で述べた: 2 ^ 16 isで尋ねるとき、彼らはあなたを見つめているべきではありません。これは特別な番号です。彼らはそれを知っているべきです。 私は開発者\ソフトウェアエンジニア\コードモンキー\ whateverになりましたが、これに出くわしたことはないと思います。つまり、バイナリ値が基本的な操作を行うなど、確かにカウントできるなどです。しかし、この値の「特別な」ものはわかりません。
48 numbers  binary 

6
Coffeescriptの長所と短所は何ですか?[閉まっている]
もちろん、1つの大きな長所は、多くの場合にコードを短くする構文糖の量です。上http://jashkenas.github.com/coffee-script/印象的な例があります。一方、これらの例が複雑な現実世界のアプリケーションのコードを表していることには疑問があります。たとえば、私のコードでは、ベアオブジェクトに関数を追加するのではなく、プロトタイプに関数を追加します。さらに、プロトタイプ機能はユーザーから隠されており、慣用的なJavascriptではなく古典的なOOPを示唆しています。 配列内包表記の例は、私のコードでおそらく次のようになります。 cubes = $.map(list, math.cube); // which is 8 characters less using jQuery...

7
プログラミングの疲労にどのように対処しますか?[閉まっている]
「眠りが必要」のような疲労ではなく、「もう悩むことはできません」のような疲労は、通常、作業中のプロジェクトで障害物にぶつかったときに始まり、一般的に締め切りに近づきます。 仕事のプロジェクトでも個人のプロジェクトでもかまいませんが、最近ますますヒットしています。私はアイデアを得て、それに取り組み、いくつかの本当に良い日を過ごして進歩を遂げます、そしていくつかの厄介なことが私をつまずかせます、私はあなたが望むように物事を得ることができません、私は制限に達しましたフレームワークでは、ドキュメントを見つけることができないなどの問題があり、イライラするだけです。 それとも私はこれで一人ですか?

14
履歴書へのStackoverflowの参加について、どこでどのように言及しますか?[閉まっている]
私は今SOで十分な評判を持っていると思います。まあ、これは他の多くのユーザーと比べてそれほど多くないかもしれませんが、私は満足しています。 ですから、履歴書にプロフィールリンクを追加することを考えていました-「SOでこれほどの評判がある」ということではなく、プロフィールリンクだけです。見たことがない人は、この質問を見ることができます。あなたの履歴書/履歴書にあなたのStack Overflowプロファイルのリンクを載せますか? これはどのように見えますか? フォーラム/ブログ/その他 まだブログはありませんが、Stackoverflowに積極的に参加しています。プロフィールリンク- http://stackoverflow.com/users/userId/username このセクションは、プロジェクトの詳細と技術的な専門知識のセクションの後に置くと思います。ヒント/アドバイスはありますか? 更新 MKOは非常に良い点を挙げています - あなたは本当にあなたがSOで書いたすべてを詳細に評価できるように潜在的な雇用者にしたいですか 私はコメントすることを考えましたが、それは長すぎるでしょう- 私の質問/回答では、「AFAIK ...」、「以下はこれまでの私の仮定です...」、「私は正しいと思います...?」、「可能かどうか疑います...」など、何かについて確信がなく、他のユーザーとの戦いにほとんど関与しない場合。ただし、必要であると感じ、有​​効なポイントがある場合は、時々トピックについて議論します。私は自分の間違いを受け入れ、同じことをおaびします。誰もが完璧な人はいないことを知っています。私は、潜在的な雇用者によって間違っていると判断されるかもしれない多くのことを書いたに違いありません。しかし、同じ雇用主が古いコンテンツと新しいコンテンツを比較することでコンテンツの品質が向上したことに気付いたらどうなるでしょうか?それは素晴らしいことではありませんか? また、古い質問/回答に戻って、自分が間違っていると感じたとき、または投稿を改善できる場合は、修正コメントなどを書きます。 もちろん、あなた(潜在的な従業員)に毎回正しいことを望んでいる多くの雇用者がいます。あなたは、あなたが一つの間違ったことを言ったとき、彼らはすぐに考慮からあなたを取り除きます。私は数ヶ月前に個人的にそのようなインタビュアーに会いました。彼は、私が1つの間違ったことを見つけた後、私がやった良いことを聞くことすら気にしませんでした。 さて、質問はあなたが本当にそのような人々と働くことを気にしますか?または、毎日改善するために努力しているという事実に価値を与える人々が好きですか。私は個人的に後者を好む。
48 resume 

11
インタビュアーが自分の質問に対する答えを知らない場合、私は何ができますか?[閉まっている]
昨日、インタビューでひどい経験をしました。 インタビュアーは、純粋な仮想機能について尋ねました。基本クラスに定義がある場合とない場合がありますが、派生クラスは抽象クラスにもなりたくない限り、定義を提供する必要があります。 しかし、インタビュアーは、「純粋仮想には定義があります!!! ???」と尋ね続けました。 再び彼は「純粋?」と言った。 もちろん。派生クラスは、特定の動作が必要な場合、明示的にその関数を呼び出すことができます。 彼は私を送った。彼は純粋な仮想関数が定義を持つことができるという事実を知らないと確信しています。 この種のインタビュアーに対処するには? 2回目に尋ねた後、定義できないと嘘をつくべきですか?:) それとも私は私の言葉に固執し、仕事の機会を失う必要がありますか?
48 c++  interview 

14
ほとんどのプログラマーはコードをコピーして貼り付けますか?[閉まっている]
誰かのコードをカット&ペーストすることは、自分で書くよりも長い目で見れば時間がかかることを非常に早い段階で学びました。あなたが本当にそれを理解しない限り、私の意見では、カットアンドペーストのコードにはおそらく解決するのに悪夢のような問題があります。 誤解しないでください。他の人のコードを見つけて、そこから学ぶことが不可欠ですが、アプリに貼り付けるだけではありません。私たちは、書き換え概念を我々のアプリに。 しかし、私はカットアンドペーストをする人のことを常に聞いています。他の人からのコメントもあり、それが一般的な慣行であることを示しています。 それで、ほとんどのプログラマーはコードをカット&ペーストしますか?

17
ソフトウェアエンジニアは技術サポートも務めるべきですか?[閉まっている]
ソフトウェアエンジニアもテクニカルサポートとして行動する必要がありますか?つまり、企業がエンジニアにソフトウェアエンジニアとテクニカルサポートの両方の帽子を着用させる場合です。エンジニアの時間の多くがテクニカルサポートに費やされると、ソフトウェアを書くことができなくなるようです。

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