ソフトウェア工学

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

14
プログラマーにとってオンラインでの存在感はどれほど重要ですか?[閉まっている]
プログラマーの「ポートフォリオ」(通常、このようなサイトやGitHubなどの公開プロフィール)についての言及(ここの投稿と実際の職務記述の両方)にますます気づいています。 これはどれほど重要であり、企業(特に新興企業)は、オンラインでの存在感のない優れた候補者を拒否(または、面接さえせずに直ちに破棄)しますか? 個人的に、私は非常に低いプロフィールをオンラインに保つことを好みます。ここでの私の名前は私を特定できず、他のサイトのハンドルも持っています。非常に質素な(そして完全に非公開の)Facebookページがあります。私は自分でコードを作成しますが、コードはローカルリポジトリにあります。一般に、私に関するオンライン情報が少ないほど良いです。 デザイナーが何らかのオンラインポートフォリオを必要としているのを見ることができましたが、プログラマーにとって、これは就職活動において本当に大きなネガティブなのでしょうか?

12
手続き型プログラミングに対するオブジェクト指向プログラミングの利点は何ですか?
Cのような手続き型言語とC ++のようなオブジェクト指向言語の違いを理解しようとしています。私はC ++を使用したことはありませんが、2つを区別する方法について友人と話し合ってきました。 C ++には変数を定義するためのパブリックモードとプライベートモードだけでなく、オブジェクト指向の概念もあると言われています。Cにはないものです。Visual Basic.NETでプログラムを開発する際にこれらを使用する必要はありませんでした。これらの利点は何ですか? また、変数がパブリックであればどこからでもアクセスできると言われましたが、Cのような言語のグローバル変数とどのように異なるのかは明確ではありません。プライベート変数がローカル変数とどのように異なるのかも明確ではありません。 私が聞いたもう一つのことは、セキュリティ上の理由から、関数にアクセスする必要がある場合、最初に関数を継承する必要があるということです。ユースケースは、管理者がすべてではなく必要なだけの権限を持っている必要があることですが、条件付きでもうまくいくようです: if ( login == "admin") { // invoke the function } なぜこれが理想的ではないのですか? オブジェクト指向のすべてを行うための手続き的な方法があるように思えるのに、なぜオブジェクト指向のプログラミングを気にしなければならないのですか?

6
カスタムソフトウェアを書くための料金はどのように決定すればよいですか?[閉まっている]
開発に1年以上かかる可能性が高いカスタムソフトウェアの場合、コンサルタントとして何を請求するかをどのように決定しますか?数字を思い付くのに苦労しており、オンライン検索では大幅に異なる数字が提供されています(1時間あたり55ドルから300ドルの間)。 あまりにも時間がかかるので、あまり低く撮影したくありません(そして、このプロジェクトの教育を延期しています)。また、あまり高く撮影したり、不快なルックスや正当化の要求をしたくはありません。FWIW私はカナダに住んでいます。10年の開発経験。 私は「あなたの給料を取り、それを1000で割る」という経験則を読みましたが、実は給料がありません。現在、私はマーケティング会社を始めている友人のためにかなり小さなプログラミングタスクを行っており、各タスクの価格をかなり自由に設定しています。私はそれをやって一年の間に何をするのかわかりませんが、信じられないほど低いでしょう。 このプロジェクトに対する私の責任は、ある程度アーキテクチャ、プログラミング、データベース、サーバー、UXです。これは一般向けのWebサービスになるため、セキュリティとスケーラビリティにも多くの努力を払う必要があります。 アドバイスや経験はありますか?

19
Perlはまだ有用で実行可能な言語ですか?[閉まっている]
私はそれが以前に尋ねられたかもしれないことを知っていますが、ここでは何も行きません... Perlはまだ有用と考えられるものですか?誰かが新しいプログラマーであった場合(プログラミングにまったく慣れていないか、ほんの数か月/数年の経験のいずれか)、Perlは学ぶ価値のあるものになるでしょうか? Perlはまだ頻度で使用されていますか?まだ人気ですか? または、Python、Ruby、PHP、ASP.NETなどの言語と比較して、Perlは消滅していますか? 基本的にこれは次のように要約されます。 まだ使用されているか、頻繁に使用されていますか?はいの場合、それは死にかけていますか?いいえの場合、それは戻ってきますか? 学ぶ価値があるものですか? 人気と使いやすさ/実行可能性の両方で、Pythonのような言語と需要がどのように比較されますか?PythonやRubyのような言語はPerlの代替と考えられますか? また、Perlの新しいバージョンは実際にPerlコミュニティに大きな改善をもたらし、おそらく他の言語と比較してPerlをセンターステージに戻すでしょうか? 編集: さて、ここに、より良い、言い換えられた質問があると思います: Perlはまだ成長していますか、それとも「死にかけている」のですか?まだ学習して使用する価値のある言語ですか?他の言語と比較して、どのプロジェクトが本当に「輝いている」のでしょうか?Perlが選択すべき言語になっているのはなぜですか?基本的に、Perlは他の言語と比較して時代遅れになっていますか?もしそうなら、あなたはそれを変更するか、継続することを期待しますか? そして、これまでに回答してくれたすべての人に感謝します。議論は本当に面白かったです!
77 perl 

30
あなたが従わなければならなかった最悪のコーディング標準?[閉まっている]
次のようなコーディング標準に取り組む必要がありましたか? 生産性が大幅に低下しましたか? 元々は正当な理由で含まれていましたが、元の懸念が無関係になってからずっと保持されていましたか? リストに載っていたので、それらをすべて覚えることは不可能でしたか? 著者は、優れたコーディングの実践を奨励するのではなく、単に彼らのマークを残そうとしていると思わせましたか? なぜ含まれているのか分かりませんか? もしそうなら、あなたの最も好きではないルールとその理由は何ですか? ここにいくつかの例

16
一人に最適な開発方法論?
私は、自分が唯一の開発者、プロジェクトマネージャー、デザイナー、QT担当者(はい、わかっています...悪い!)であるプロジェクトに多くの時間を費やし、時にはクライアントでもあります。 私は、フリースタイルで座って仕事をするだけでなく、プロジェクトがどれだけ時間がかかるまで、プロジェクトを計画し、自分自身を管理するためにあらゆることを試しました。 -男は毎朝チャートを燃やします(冗談ではありません)。 一人で仕事に多くの時間を費やしている人にとって、自分自身を整理し、(1人の)大規模なプロジェクトを管理し、生産性を可能な限り高く保つ最良の方法は何ですか?

13
なぜJavaはゲーム開発により広く使用されないのですか?[閉まっている]
私はゲーム開発者でも何でもありませんが、Javaはゲーム開発にあまり使用されていないことを知っています。Javaはほとんどのゲームで十分に高速である必要があります。いくつかの理由が考えられます。 Javaの専門知識を持つゲーム開発者の不足 優れたゲーム開発フレームワークの欠如 プログラマは、Javaをゲームプログラミング言語として受け入れたくありません。ほとんどの場合、C ++のみを受け入れますか? ゲーム機のサポートなし(PC市場はまだ存在しますが) もちろん、それは他の何かかもしれません。私よりもビジネスをよく知っている人が、ゲーム開発に関してJavaが勢いを得ていない理由を説明できますか?

17
ソフトウェアを著作権侵害からどのように保護できますか?
なぜ今日海賊行為がそんなに簡単に見えるのですか? 私たちの技術の進歩と最も信じられないほど驚くべきソフトウェアのエンジニアリングに費やされた数十億ドルの費用で、「シリアル番号/アクティベーションキー以外に著作権侵害から保護する他の手段はまだないと信じるのは少し難しいようです。 「。Windows 7やOffice、さらにはSnow Leopardの作成に莫大なお金(おそらく数十億)が費やされたと思いますが、20分以内に無料で入手できます。おそらく最も簡単なAdobeのすべての製品で同じです。 ソフトウェアを著作権侵害から保護する、だまされない、ハッキングされない方法はありますか?現実的でない場合、理論的にはどうでしょうか?または、これらの企業がどのようなメカニズムを展開していても、ハッカーは常に回避策を見つけることができますか?
77 security 

4
コードレビューの目的は何ですか
私はコードレビューの価値で組織を売ろうとしています。私は彼らが雇われたいくつかの場所で働いてきました。私はそれらがスタイル選択の選択と機能的な決定を選択するのに使用されるのを見ました。私の直感では、最も効果的な目的は2つのオプションの間のどこかにあるということです。 それでは、コードレビューの目的は何ですか?

9
ブール値をクリアして呼び出しを行うにはどうすればよいですか?ブールトラップ
@ benjamin-gruenbaumのコメントで指摘されているように、これはブールトラップと呼ばれます。 このような機能があるとしましょう UpdateRow(var item, bool externalCall); 私のコントローラーでは、その値externalCallは常にTRUEです。この関数を呼び出す最良の方法は何ですか?私は通常書く UpdateRow(item, true); しかし、「真の」値が何を意味するのかを示すために、ブール値を宣言する必要がありますか?関数の宣言を見ることでそれを知ることができますが、次のようなものを見た場合は明らかに速く、明確です bool externalCall = true; UpdateRow(item, externalCall); PD:この質問が本当にここに当てはまるかどうかはわかりませんが、当てはまらない場合は、どこでこれに関する情報を入手できますか? PD2:非常に一般的な問題だと思ったため、言語にタグを付けませんでした。とにかく、私はc#で作業し、受け入れられた答えはc#で動作します
76 boolean  const 

11
C ++ですべてのオブジェクトに対応するベースが推奨されない理由
Stroustrup氏は、「すべてのクラス(Objectクラス)に一意のベースをすぐに発明しないでください。通常、多くの/ほとんどのクラスでそれを使用せずに改善できます。」(C ++プログラミング言語Fourth Edition、Sec 1.3.4) 一般に、すべてを対象とする基本クラスが悪い考えであるのはなぜですか?また、いつ作成するのが理にかなっていますか?

16
ランダムに自分自身を殺すようにプログラムを設計する必要がありますか?[閉まっている]
一言で言えば、システム全体の利益のために、低レベルでプログラム、プロセス、およびスレッドの死を設計する必要がありますか? 失敗が起こります。プロセスは死にます。災害の計画を立て、ときどき復旧します。しかし、予測できないプログラムの停止を設計して実装することはほとんどありません。当社のサービスの稼働時間が、それらの実行を維持するのに十分な長さであることを願っています。 この概念のマクロ例は、NetflixのChaos Monkeyです。これは、いくつかのシナリオでAWSインスタンスをランダムに終了します。彼らはこれが問題を発見し、より冗長なシステムを構築するのに役立ったと主張しています。 私が話しているのは下位レベルです。これは、伝統的に長時間実行されるプロセスがランダムに終了するためのアイデアです。これにより、設計に冗長性が強制され、最終的に復元力のあるシステムが作成されます。 この概念にはすでに名前がありますか?すでに業界で使用されていますか? 編集 コメントと回答に基づいて、自分の質問が明確ではなかったのではないかと心配しています。明確にするために: はい、私はランダムに、 はい、私は本番で、 いいえ、テストだけではありません。 説明するために、多細胞生物との類似性を引き出したいと思います。 自然界では、生物は多くの細胞で構成されています。セルは、冗長性を作成するために自分自身を分岐させ、最終的に死にます。しかし、生物が機能するためには、適切な種類の細胞が常に十分にあるはずです。この非常に冗長なシステムは、負傷時の治癒も促進します。細胞は死ぬので、生物は生きます。 ランダム死をプログラムに組み込むと、より大きなシステムが実行可能な状態を維持するために冗長戦略を採用するように強制されます。これらの同じ戦略は、他の種類の予測できない障害が発生した場合でもシステムが安定した状態を保つのに役立ちますか? そして、誰かがこれを試した場合、それは何と呼ばれていますか?既に存在する場合は、さらに読みたいです。
76 design 

15
開発者はバグ追跡システムにバグを入力する必要がありますか?
開発中(機能またはバグ修正のいずれか)、私が作業しているものに直接関連しないバグを発見することがあります。その状況で私は何をすべきか。修正するだけですか?後で修正することを忘れないでください。どこかに書き留めますか?それともバグ追跡システムに入力しますか? 私は通常それをバグ追跡システムに入力し、プロセス自体を再生させます(つまり、トリアージング、割り当てなど)。しかし、他の開発者がバグを入力することはほとんどありません。(何故ですか?)


14
何を優先すべきか:YAGNIまたはGood Design?
YAGNIはどの時点で適切なコーディング慣行に優先する必要がありますか?私は職場でプロジェクトに取り組んでおり、同僚に良いコード標準をゆっくりと導入したいと思っています(現在は存在せず、すべてが韻や理由なしでハッキングされています)が、一連のクラスを作成した後(私たちはTDD、または悲しいことにどんな種類のユニットテストもしないでください)私は一歩後退し、YAGNIに違反していると思いました。なぜなら、これらのクラスのいくつかを拡張する必要がないことを確信して知っているからです。 具体的な例を次に示します。一連のストアドプロシージャをラップするデータアクセスレイヤーがあり、基本的なCRUD機能を備えた基本的なリポジトリスタイルのパターンを使用しています。すべてのリポジトリクラスに必要なメソッドがいくつかあるので、リポジトリ用の汎用インターフェイスを作成しましたIRepository。ただし、その後、各タイプのリポジトリ(例:)に「マーカー」インターフェース(つまり、新しい機能を追加しないインターフェースICustomerRepository)を作成し、具象クラスがそれを実装します。ファクトリー実装でも同じことを行い、ストアドプロシージャによって返されたDataReaders / DataSetsからビジネスオブジェクトを構築しました。リポジトリクラスの署名は次のようになります。 public class CustomerRepository : ICustomerRepository { ICustomerFactory factory = null; public CustomerRepository() : this(new CustomerFactory() { } public CustomerRepository(ICustomerFactory factory) { this.factory = factory; } public Customer Find(int customerID) { // data access stuff here return factory.Build(ds.Tables[0].Rows[0]); } } ここでの私の懸念は、YAGNIに違反しているということです。99%の確実性でCustomerFactory、このリポジトリに具体的なもの以外のものを提供する理由がないことを知っているからです。ユニットテストがないため、MockCustomerFactory同じようなものは必要ありません。また、非常に多くのインターフェイスがあると、同僚が混乱する可能性があります。一方、工場の具体的な実装を使用することは、デザインの匂いのようです。 適切なソフトウェア設計とソリューションのオーバーアーキテクトとの間で妥協する良い方法はありますか?すべての「単一実装インターフェース」が必要なのか、または、例えば、基本インターフェースと単一のコンクリートのみを使用して、良いデザインを少し犠牲にして、プログラミングを心配しないのか疑問に思っています。実装が使用される場合のインターフェース。

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