ソフトウェア工学

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

6
プロトタイピングに適しているのは、静的に型付けされた言語ですか、それとも動的に型付けされた言語ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 新しいシステムの設計を行うとき、静的に型付けされた言語(Haskellなど)または動的に型付けされた言語(Rubyなど)から始める方が良いですか? 私が考えることができる引数: 静的言語を使用すると、プログラムが行うことの仕様とスコープをすばやく作成できます。動的な言語を使用すると、実用的なデモをすばやく作成して、レビューのために顧客に提示できます。 動的言語を使用すると、設計を変更するときにデータ構造を再配置したりコードをリファクタリングしたりする必要がなくなることがよくあります。静的言語を使用すると、実装前に型を定義して、コードを非常に小さく維持できます。 静的言語では、プログラムが何をするかを事前に理解する必要があります。動的言語を使用すると、コードの記述を開始して、デザインを有機的に成長させることができます。ポール・グラハムがハッカーと画家で言っているように: プログラミング言語は、プログラムを考えるためのものであり、すでに考えたプログラムを表現するためのものではありません。 静的言語を使用すると、コンパイラーは多くのタイプのバグを識別するのに役立ちます。動的言語を使用すると、バグのテストと発見をより早く開始できます。 静的型付けと動的型付けには、プロトタイピングに関する限り、長所と短所があります。ただし、どちらも同じように有効なアプローチを好むようです。あなたの経験に基づいて、どちらが最終的に優れていますか? ノート 自然言語でのプロトタイピング 考慮すべき言語の3番目のタイプ:自然言語。コードでプロトタイプを作成する代わりに、書面でプロトタイプを作成できます。その後、顧客はドキュメントを読んでデザインを批判することができますが、実際のデモをいじることはできません。適切に記述されていれば、ドキュメントはどの言語でも簡単に実装できます。警告: ドキュメンテーションは読むのが面倒で、見ることができないと要約するのが難しいかもしれません。私は、顧客がテキスト(および画像)の壁を読むのではなく、機能するものを試してみたいと思います。 タイプ定義ではなく英語でアプリケーションのプロトタイプを作成することは、より冗長で具体的ではありません。 Haskellのタイプは説明的です 型は、C ++やJavaなどの多くの静的言語よりも、Haskellで特に説明的であることに注意してください。たとえば、Haskellに次の型シグネチャを持つ関数があるとします。 foo :: forall a. [a] -> a 任意のタイプについて、タイプaの項目のリストを取り、タイプaの値を返す関数a。 関数の名前を知らなくても、私は次のことを知っています。 Haskellは純粋に機能しているため、入出力を実行したり、値を変更したりすることはありません(unsafePerformIOを誤って使用しない限り)。 任意の型をサポートする必要があるため、アイテムを整数などとして扱うことはできません。 それは持っている(つまり、あるいは例外をスローしたり無限ループに入る)入力リストを使用します。そうでなければ、それはどこaから型の値を取得しますか? したがって、この関数が実行できる唯一のこと(失敗以外)は、入力リストから項目を抽出して返すことです。どのアイテムを使用するかはまだわかりませんが、[a] -> a他のすべてについて教えてくれます。

3
与えられていない/ null /空の問題の名前はありますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 次のように、データがHashtable / Dictionary / Associative-Arrayのような構造で格納/交換されるコードを使用します { 'alpha': None, 'bravo': '', # 'charlie' is not given } どのフィールドが「指定」されているか、およびNone / Null / Nilまたは空の文字列として指定できる場合は、標準化はあまりありません。その結果、コードにはlike likeチェックif hasattr(obj, 'alpha')やデフォルトのフォールバックが散らばっています。 この種類の(imho)アンチパターンに名前や俗語はありますか? 更新: まだ名前がないようですので、是非教えてください。現在、私たちはこれらを持っています: Incorporeal Horde(psrへのクレジット)

6
Webアプリケーション開発をいらいらさせないようにするにはどうすればよいですか?
私はWebアプリケーション開発にかなり慣れていません。遠く離れた複雑さの何かをするのに永遠にかかるという気持ちを揺さぶることはできません。c ++とjavaでは、同じアプリケーションを数時間で作成できました。 Webでのデバッグは苦痛です(特に複雑なjson-ajaxの場合)。IDEは最低です。言語はすべてがエラーなしで通過できるようになり、それが機能しなくなり、エラーや警告なしでバグを探して行き詰まります(プログラムをステップスルーするための実際の良い方法はありません)。 誰かが、複雑なWebアプリケーションを開発するときに正気を保つ方法を見つけるのに役立つ資料やテクノロジーを読むように案内してくれませんか? おそらく答えは、優れたフレームワークを使用することです(zend?)。職場では、データベースモデルジェネレーターと基本的な追加/更新/削除ページジェネレーターを除いて、実際にはフレームワークを使用していません。

7
より良いコーディング慣行を決定する
新しいプログラマーとして、私はまだ学習段階にあるため、アプリケーションを作成することは常に困難でした。 アプリケーションで特定の影響または機能を実現するために、同じ結果を実現する方法は数多くあることを理解しています。 ただし、機能する状態に合わせて純粋に関数を作成する必要があります。つまり、機能する限り、期待どおりに機能するので、問題はありません。 より高いレベルのプログラマーが親切に私に物事の正しい方法を教えてもらえますか?

4
すでにクラスとインターフェースがあるのに、なぜ概念(総称プログラミング)が考案されたのですか?
また、stackoverflow.com: STLの概念が存在する必要があり、実際にそれらがドキュメント化された(人間の)概念のみであり、現時点でC ++コードに変換できなかった場合に、それらを「クラス」または「インターフェース」と呼ぶのはばかげていると私は理解しています。しかし、言語を拡張して概念に対応する機会を与えられたとき、なぜそれらは単にクラスの機能および/または導入されたインターフェースを変更しなかったのですか? 概念はインターフェース(データのない100%抽象クラス)と非常に似ていませんか?それを見ると、インターフェースには公理のサポートが不足しているように見えますが、公理はC ++のインターフェースに導入されている可能性があります(概念を引き継ぐためのC ++でのインターフェースの仮定の採用を考えると)。このようなC ++インターフェイス(自動インターフェイスLessThanComparable、だれでも)に自動コンセプトでさえ簡単に追加できると思います。 concept_mapは、Adapterパターンとよく似ていませんか?すべてのメソッドがインラインの場合、アダプタは基本的にコンパイル時を超えて存在しません。コンパイラーは、インターフェースへの呼び出しをインライン化されたバージョンに置き換えるだけで、実行時にターゲットオブジェクトを直接呼び出します。 静的オブジェクト指向プログラミングと呼ばれるものを聞いたことがあります。これは、本質的に汎用プログラミングでオブジェクト指向の概念を効果的に再利用し、実行オーバーヘッドを発生させることなくOOPのパワーのほとんどを使用できることを意味します。なぜこのアイデアはさらに検討されなかったのですか? これが十分に明確であることを願っています。私がそうでなかったと思うなら、私はこれを書き直すことができます。私に知らせて。

3
大規模なプロジェクトで機能が属する場所をどのように決定しますか?
私の現在の開発状況では、多くのDLL、実行可能ファイル、静的ライブラリがあります。DLLに何を入れるかをどのように決定しますか?実行可能ファイルには何を入れるべきですか?異なる実行可能ファイルに別々の機能があるのはなぜですか?私は答えが簡潔になることを望んでいますが、これはそれが思われるだろう主に意見が分かれたトピックです。 大規模なプロジェクト(複数の実行可能ファイル)のどこに機能が存在するかをどのように決定しますか?「グッドデザイン」から「モジュール性」、「管理者が要件ドキュメントに入れるものは何でも」まで、さまざまな回答を期待しています。

8
アルゴリズムを開発するとき、ペンと紙のフェーズをスキップするのは悪い習慣ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 アルゴリズムを開発するときは、最初にペンと紙、フローチャートなどを使用して、アルゴリズム自体に集中でき、そのアルゴリズムの実装について心配する必要がない(つまり、時間)。 ただし、ほとんどの場合、実際にアルゴリズムをオンザフライで開発する方が簡単です。つまり、一般的な方向性がわかるまで問題について少し考えてから、アルゴリズムが現れて機能するようになるまで、コードの記述と変更を開始します。 これは私が変えようとするべき悪い習慣ですか?

1
モデルを設定してデータと検証を取得する以上のことを行う方法
私がこの質問をしているのは、フレームワークでいくつかの小さなカスタムcmsソリューションを開発した後、モデルをORMで簡単に置き換えることができ、データの検証、取得、設定のタスクを容易にするというアイデアが生まれたからです。 。 最近、複雑なカスタムクライアント管理ソリューションの注文を受けました。それを進める方法について少し調べた後、私はこれを見つけました: http : //blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-unappreciated/ Now私がMVCアプローチについて読んだことは、モデルがビジネスロジックを処理するため、アイデアは新しいものではありません。しかし、モデルがビジネスロジックを処理し、慣れ親しんだ作業のタイプのために、それ自体が完全なクラスであるアプローチを計画するのは難しいと感じています。 アイデアを説明し、いくつかの例や記事などを示して、ここで私を助けてください

4
分散アジャイルチームのベストプラクティスはありますか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 特定の国でしか利用できない特定の知識があるため、私たちのスクラムチームは地理的に分割されています(私が知っているのは理想的ではありません!)。つまり、たとえば7人のメンバーからなる1つのチームには、ある都市にビジネスパーソンがおり、別の都市に2人の開発者、別の都市に2人の開発者、別の都市に2人のQAがいます。 このタイプのグラフィカルに分散したチームを管理する方法について何か提案はありますか?ベストプラクティスはありますか? スタンドアップはどのように行うのですか?スカイプビデオ経由?私たちは人々が6週間ごとに旅行することを保証していますか?タスクボードをどのように実行しますか?事実上またはビデオを介して?この設定ではかんばんがうまく機能しますか?
8 agile  scrum 

2
EF対NHibernate [終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 ビジネスアプリケーションの作成を開始してから(高レベルのフロントエンドまたは非常に低レベルのシステムプログラミングを行う前に)過去2年間で、データセット、linqからsql、そして現在はエンティティフレームワークを学びました。次に見る論理的なものはNHibernateのようです。 私が最終的にEFに到達した理由は、(1)デザイナーによるサポートが最も優れていること、(2)マイクロソフトによって最もサポートされていることです。 私がNHibernateに興味を持っている理由(これらには前提の要素があります)は次のとおりです。(1)MSがデータアクセステクノロジーをチャーンするほど速く、まったく異なるものに取って代わられない可能性があります。それが何をするためのフロントランニングツールと(3)それはかなり安定していて、かなり長い間遡ることができるように見えます。 誰かが2つの比較を発表しましたか?特定の種類のアーキテクチャでは、どちらが優れているか?それとも、スタイルと好みの問題だけですか?


6
ソフトウェアを開発するとき、いつ並行セクションを考えたり設計したりしますか?
最適化が早すぎないという原則に従って、ソフトウェアの設計/開発のどの時点で、同時実行の機会について考え始めますか? シングルスレッドのアプリケーションを作成し、プロファイリングを通じて、並列実行の候補となるセクションを特定することが1つの戦略となることはよく想像できます。私が少し見てきたもう1つの戦略は、タスクのグループごとにソフトウェアを検討し、独立したタスクを並列化することです。 もちろん、尋ねる理由の1つは、最後まで待ってソフトウェアをリファクタリングするだけで同時に動作する場合、可能な限り最悪の方法で構造化し、大きなタスクを抱えることになるということです。 設計で並列化を検討するときに、どのような経験が役立ちましたか?

4
ファイルシュレッダーアルゴリズム
システムプログラミングの学習の一環として、ファイルシュレッダーの実装を検討しています。最も単純な方法(そしておそらく素朴に見える)は、データバイトをゼロに置き換えることです(OSがファイルを分割し、すべてのチャンクのバイトを置き換えることを知っています)。しかし、このトピックについてググると、複数のパスアルゴリズムを見つけて驚いています。 誰かがマルチパスのメリットを説明できますか?説明が見つかりませんでした。 ありがとう

3
コードの配送を開始するにはどうすればよいですか?
LPTHWを使用してプログラミングする方法を学び始めたばかりです。スキルレベルが上がったので、コードを出荷する準備ができているかどうかに関係なく、コードを出荷する習慣をつけて、常に出荷する習慣を身に付けたいと思います。配送コード。 出荷コードの初心者向けのガイドはありますか?

4
コードを無効にするための構文は、通常のコメントの構文と異なる必要がありますか?
開発中のいくつかの理由で、コードをコメントアウトすることがあります。私は無秩序で時々急いでいるので、これらのいくつかはそれをソース管理にします。 また、コメントを使用してコードのブロックを明確にします。 例えば: MyClass MyFunction() { (...) // return null; // TODO: dummy for now return obj; } これは「機能」し、多くの人がこのように実行しますが、コメント化されたコードとコードを明確にする「実際の」コメントを自動的に区別できないのは不愉快です。 コードを読み取ろうとするとノイズが発生します たとえば、ソース管理のon-commitフックのコメントアウトされたコードを検索することはできません。 一部の言語は、複数の単一行コメントスタイルをサポートする-例えばPHPにすることができますいずれかを使用//または#単一行コメントのために-と開発者がコメントアウトコードのためにこれらのいずれかを使用に同意することができます: # return null; // TODO: dummy for now return obj; 他の言語-私が今日使用しているC#など-は、単一行のコメントに対して1つのスタイルを持っています(そうですか?コンパイラディレクティブを使用した「コメントアウト」コードの例も見ました。これはコードの大きなブロックに最適ですが、ディレクティブには2つの新しい行が必要であるため、1行では少しやりすぎです。 #if compile_commented_out return null; // TODO: dummy for now #endif return obj; したがって、コメントアウトコードはすべての(?)言語で発生するので、「無効化されたコード」は言語仕様で独自の構文を取得すべきではありませんか?プロの(コメントの分離/無効化されたコード、エディター/ソースコントロールがそれらに作用する)は十分であり、短所(「コメントアウトはすべきではない」)であり、言語の機能的な部分ではなく、潜在的なIDEラグ(Thomasに感謝) ))犠牲に値する? 編集する 私が使用した例はばかげています。ダミーコードは実際のコードに置き換えられるため、簡単に削除できます。

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