ソフトウェア工学

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

4
OOP設計のグッドプラクティスをどのようにして得ましたか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 閉じた2年前。 OOPデザインを作成するのが難しいことに気付きました。このプロパティがXクラスに正しく設定されているかどうかを判断するのに多くの時間を費やしました。 たとえば、これは数日ある投稿です:https : //codereview.stackexchange.com/questions/8041/how-to-improve-my-factory-design 私は自分のコードを確信していません。だから私は自分のデザインを改善したい、それを作成する時間を短縮したい 良いデザインの作成をどのように学びましたか?あなたが私を推薦することができるいくつかの本?

4
例外を再スローすると抽象化が漏れますか?
特定の種類の例外をスローすることをドキュメントに記載するインターフェイスメソッドがあります。そのメソッドの実装は、例外をスローするものを使用します。内部例外がキャッチされ、インターフェイスコントラクトによって宣言された例外がスローされます。ここに、よりよく説明するための小さなコード例を示します。これはPHPで書かれていますが、簡単に理解できます。 // in the interface /** * @return This method returns a doohickey to use when you need to foo * @throws DoohickeyDisasterException */ public function getThatDoohickey(); // in the implementation public function getThatDoohickey() { try { $SomethingInTheClass->doSomethingThatThrowsAnException(); } catch (Exception $Exc) { throw new DoohickeyDisasterException('Message about doohickey failure'); } …

3
MVC使用時のPHPでのエラー処理
私は最近Codeigniterを頻繁に使用していますが、気になるのはエラーを処理してユーザーに表示することです。乱雑になることなくエラーを処理するのが得意ではありませんでした。私の主な関心事は、ユーザーにエラーを返すときです。 関数から0または1を返し、if / elseを使用してエラーを処理するのではなく、例外と例外をスロー/キャッチすることをお勧めします。したがって、問題についてユーザーに簡単に通知できます。 私は例外から離れる傾向があります。数年前、大学の私のJava講師は「例外はプロダクションコードで使用すべきではありません。デバッグ用ではありません」と言っていました。私は彼が嘘をついていると感じました。 しかし、例として、ユーザーをデータベースに追加するコードがあります。プロセス中に、データベースの問題、重複エントリ、サーバーの問題など、2つ以上の問題が発生する可能性があります。登録中に問題が発生した場合、ユーザーはそれについて知る必要があります。 MVCフレームワークを使用していることを念頭に置いて、PHPでエラーを処理する最良の方法は何ですか。

7
コードを書いた後、なぜ私はしばらくして「もっと良く書いただろう」と感じるのですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 私は2年以上、C ++で趣味のプロジェクトに取り組んでいます。モジュール/関数を作成するたびに、多くのことを考えてコーディングします。今、問題を見て、 do { --> write the code in module 'X' and test it --> ... forget for sometime ... --> revisit the same piece of code (due to some requirement) --> feel that "This isn't written nicely; could have been better" } while(true); ここ'X'に任意のモジュールがあります(小/大/中)。これは、コーディング中にどれだけの労力を費やしても発生します。そのため、ほとんどの場合、動作するコードを見ることは控えています。:) これは多くの人に共通の気持ちですか?この言語特有の現象ですか?(C ++では、同じことを異なる方法で書くことができるため)。 現実の製品コードでこのリファクタリングの感覚が得られたら、どうすればいいですか?作業中のコードを変更しても賞賛は得られませんが、失敗するとトラブルが発生する可能性があります。

7
経験豊富な開発者とは別のサブプロジェクトを新規採用者に提供することで、初心者はより迅速に立ち上がることができますか?
チームには7人の開発者がおり、短期間(約1か月)で開発ペースを2倍にする必要があります。「より多くの開発者を雇えば、最初の数か月間だけ生産性を失う」という常識的なルールがあることを知っています。このプロジェクトはeコマースWebサービスであり、約27万行のコードが含まれています。 現在の私の考えは、プロジェクトを多かれ少なかれ独立した2つのサブプロジェクトに分割し、新しいチームが2つのサブプロジェクトのうち小さい方で作業し、現在のチームがメインプロジェクトで作業することです。つまり、新しいチームはチェックアウト機能に取り組み、最終的にはカップリングを減らすために独立したWebサービスになります。このようにして、新しいチームはコードが10万行だけのプロジェクトに取り組みます。 私の質問は、このアプローチは初心者の開発者が新しいプロジェクトに簡単に適応するのに役立つのでしょうか?初心者がバグよりもソフトウェアの生産を開始するまで2か月待たずに開発チームを迅速に拡大する他の方法は何ですか ======= 更新 この企業は完全に失敗しましたが、皆さんが言及した理由ではありません。まず第一に、私は新しいチームの規模と能力について誤解されていました。自分で評価すべきだった。第二に、そのサイトでの採用は大変な仕事でした。メインオフィスのサイトでは、雇用ははるかに簡単でしたが、2番目のチームの都市では、必要な資格を備えた開発者が明らかに不足していました。その結果、1.5か月を予定していたのではなく、約4.5か月に延長され、その途中でトップマネジメントによってキャンセルされました。 私が犯したもう1つの間違い(およびアレックスDから警告された)は、リファクタリングを経営陣に売り込もうとしていたことです。リファクタリングは決して販売せず、機能のみを販売します。 とにかくスタートアップは成功したことが判明した。決して起こらなかったリファクタリングは技術的な負債に変わりました。システムはよりモノリシックになり、保守性が低下し、開発者の生産性は徐々に低下しました。私は現在チームにいませんが、近い将来に完成することを願っています。そうでなければ、私はプロジェクトの存続に一銭も払わないでしょう。

2
ベクトル量としての知能
私はPeter Seibelの"Coders at Work:Reflections of Programming of Programming ''と呼ばれるこの素晴らしい本を読んでおり、Joshua Blochとの会話の一部であり、プログラマーにとって重要なこの答えを見つけました。段落は、このようなものになります。 この問題があります。つまり、プログラミングは非常に知的実力主義であり、多くの場合、これらの人々は組織内で最も賢い人々です。したがって、彼らはすべての決定を下せるようにすべきだと考えています。しかし、単に彼らが組織内で最も賢い人であるという事実は、彼らがすべての決定を下すべきであることを意味しません。それはベクトル量です。 ここで最後の文で、私は彼が共有しようとしている洞察を得ることはできません。誰かがそれをベクトル量によって意味するものとしてもう少し詳しく説明できますか?おそらく同じ洞察を提示しようとしています。 さらに下に、私は彼が電子メールを書くのにより多くの時間を費やすことができる何らかの理由で技術者でない人(時々無知)が技術者のマネージャーになることができる組織を持つことについて取っていないという点を得る上記の段落に続く文はそうでした。 また、共感や感情的な知性が欠けている場合は、APIやGUI、言語を設計するべきではありません。 ソフトウェアエンジニアリングでは、プログラマーはユーザーが自分の製品やデザインをどのように見るかを知る必要があると彼が言っていることを理解しています。 上記の段落は非常に興味深いと感じました。

4
オープンソースプロジェクトのデータベース構造を使用できますか?
CMSシステムのデータベース構造を見つけましたが、このデータベースが作成されているEFでデータベース構造をコピーしたいのですが、GNU v2ライセンスの下にあるオープンソースソフトウェアのデータベース構造をコピーしても大丈夫ですか? ソフトウェアの残りの部分はデータベース構造だけにしたくない。

8
チーム内で競合するJavaスタイル
私は6週間の期限があるJava開発チームの一員です。そのため、大量のコードを非常に迅速に作成する必要があります。ただし、開発チームにはさまざまなスタイルのコーディングがあります。名前の規則から抽象化の方法まで、すべてがチームによって異なります。Javaの「標準」を規定するドキュメントを知っている人はいますか? 明確にするために、たとえば変数や関数の適切な命名規則を規定する組織があるかどうか疑問に思っていました。このような短い期限では、お互いのコードを理解しようとする時間を費やすことができないため、これは最重要事項です。


1
プログラミング言語の専門知識を言語の概念別に評価してください[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 特定のプログラミング言語の専門知識を評価する良い方法を探しています。次の記事を見つけたときにアイデアが生まれました:すべてのクレジットを誤って取得しましたか?JavaScriptを知らない。JavaScriptの言語機能と概念を包括的な方法でリストします。すべてのプログラミング言語のリストがあればいいのにと思います。特に、私は興味があります: Java C Python C#/ .NET C ++ JavaScript 他の言語や技術も興味深いでしょう。似質問では、独自のコードのスキルを評価するための良い方法何プログラマーコンピテンシー行列が示唆されたが。良いアプローチだと思いますが、あまりにも一般的すぎると思います。 プログラミング言語の専門知識を評価するのに役立つ可能性のある他の言語概念の要約を知っていますか?


14
未経験のプログラマーにはIDEが必要ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 この他の質問を読んで、私は(絶対的な初心者のPHPプログラマーとして)WAMPとNotepad ++に固執するべきか、EclipseのようなIDEに切り替えるべきか疑問に思います。 熟練した開発者が大きな光沢のあるIDEの恩恵を受けることは理解できます。しかし、なぜ完全な初心者がIDEを使用する必要があるのでしょうか?開発の学習に加えてIDEを学習するという追加の課題を上回るメリットがありますか? 明確化のための更新: 私の目標は、基本的なプログラミングの経験を積むことです。PHPとWAMP(およびFogBugzとKiln)を選択することで、トリッキー/乱雑なOSの仕様やコンパイルなどをナビゲートすることを避け、オンラインユーザー登録フォームのような基本的な機能に集中することを望みます。 私は10年前に大学から多くの理論的理解を得ていますが、実際的な経験はありません。実際の販売可能なWebアプリに似た趣味のプロジェクトでそれを改善したいと思います。 質問はたくさんあります。多くの落とし穴ので、私はおそらく持っているに失敗します。この質問は、そのパズルのほんの一部です(私の最初の!)。
12 ide 

2
Ruby on Railsのビューにインスタンス変数を使用しないことを提案する理由
コントローラーとビューの間でインスタンス変数を共有するのは良くないと聞いたのはなぜですか。@を介してコントローラから何かが送信されていることがすぐにわかるので、それが好きです。:私はここのコントローラでヘルパーを使用するための良い方法を参照http://www.stephencelis.com/2008/09/06/rails-controllers-views-and-variables.htmlを。しかし、私はその部分にカンカンを使用しています。


7
大量のデータで機能するソートアルゴリズム
大量のデータを処理できる、つまり、データセット全体を一度にメインメモリに保持できない場合でも動作できるソートアルゴリズムを探しています。 私が今まで見つけた唯一の候補はマージソートです。メインメモリにすべてのデータを一度に保持することなく、各マージでデータセットをスキャンするようにアルゴリズムを実装できます。私が念頭に置いているマージソートのバリエーションについては、この記事の「テープドライブで使用する」セクションで説明しています。 私はこれが良い解決策だと思います(複雑さO(nx log(n)))が、メインメモリに収まらない大きなデータセットで動作できる他の(おそらくより高速な)ソートアルゴリズムがあるかどうか知りたいです。 編集 回答に必要な詳細を次に示します。 データは定期的に、たとえば月に1回ソートする必要があります。いくつかのレコードを挿入する必要はなく、データをインクリメンタルにソートする必要があります。 私のサンプルテキストファイルは約1 GBのUTF-8テキストですが、たとえば20 GBのファイルであっても、一般的な問題を解決したかったのです。 データベースにはありません。また、他の制約のため、そうすることはできません。 データは他の人によってテキストファイルとしてダンプされます。このテキストファイルを読み取るための独自のコードがあります。 データの形式はテキストファイルです。改行文字はレコード区切り文字です。 私が考えていた改善の1つは、ファイルをメモリ内でソートできるほど小さいファイルに分割し、最後に上記のアルゴリズムを使用してこれらすべてのファイルをマージすることでした。

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