ソフトウェア工学

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

9
プログラマーは、コードの表現力を高めるためにレッスンを書くべきですか?
プログラマーは作者であり、抽象的な思考や概念を表現するためのコードを書いているので、他のプログラマーは問題や誤解なく良いコードを読む必要があるので、プログラマーはより良いコードを書くためにレッスンを書くべきですか? 概念と現実世界の問題/エンティティを抽象化することは、優れたコードを書く上で重要な部分です。また、コーディングに使用される言語の優れた習熟により、プログラマーは自分の考えをより簡単に、またはより良い方法で表現できるはずです。また、コードを改善するためにコードを記述または書き換えようとすると、関数、変数、またはデータ構造の名前を決定するのに多くの時間を費やすことができます。 これは、異なるプログラマー間の誤解の原因となることが多い、複数の意味を持つコードの記述を避けるのにも役立つと思います。コードは常にその機能を明確に表現する必要があります。

10
次の抽象化レベルは何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または詳細な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 プログラミング言語は最初は連続して実行されるコード行のみを使用し、抽象化の最初のレベルの1つである関数を含めるように進化したため、さらに抽象化するクラスとオブジェクトが作成されました。次の抽象化レベルは何ですか? クラスよりもさらに抽象的なものはありますか?

7
CおよびC ++では、equivalency(==)が必要な場所で、assignment(=)の偶発的な使用を防ぐことができる方法は何ですか?
CおよびC ++では、重大なエラーを伴う次のコードを書くのは非常に簡単です。 char responseChar = getchar(); int confirmExit = 'y' == tolower(responseChar); if (confirmExit = 1) { exit(0); } エラーは、ifステートメントが次のようになっている必要があることです。 if (confirmExit == 1) コーディングされているように、confirmExit変数の割り当てが発生し、confirmExit式の結果として使用されるため、毎回終了します。 この種のエラーを防ぐ良い方法はありますか?

6
24ビットの用語
24ビット(3バイト)整数の用語はありますか? 私は(のような珍しいビット数を知っている「ニブル」または「ニブル」例えば、非常に一般的で、4ビットのために)名前を持ち、ビデオとオーディオ技術の両方で、24ビットを有します。

5
ASP.Net MVC4の「Web API」とは正確には何ですか?
Web APIとは何かを知っています。 APIを複数の言語(MVC3を含む)で記述しました。 私はASP.Netでもよく練習しています。 MVC4には「Web API」があることを発見しましたが、ビデオの例に目を通さずに、それが何であるかを正確に説明することはできません。 私の過去の経験から、Microsoftテクノロジー(特にASP.Net)は、単純なコンセプトを採用し、すべてを「より簡単にする」ことを目的とした無用のオーバーヘッドに包み込む傾向があります。 誰かがMVC4のWeb APIが何であるかを正確に説明してもらえますか?なぜ必要なのですか?独自のAPIを記述できないのはなぜですか?

8
リバースエンジニアリング:それは本当に何のためですか?[閉まっている]
ここで何が求められているかを伝えるのは難しいです。この質問は曖昧、曖昧、不完全、過度に広範、または修辞的であり、現在の形式では合理的に答えることができません。この質問を明確にして、再開できるようにするには、ヘルプセンターに アクセスしてください。 7年前に閉鎖されました。 私はいくつかの無邪気な/初心者の質問があります: リバースエンジニアリングの利点は何ですか? プログラマーとして、リバースエンジニアリングの技術を学ぶ必要がありますか? 経験豊富なプログラマーにとってのメリットは何ですか?

2
WinRTは本当に境界でのみ使用できますか?
Microsoft(主にHerb Sutter)は、WinRTをC ++ / CXとともに使用して、WinRTをアプリケーションの境界に保ち、アプリケーションのコアを標準ISO C ++で記述したままにすることを推奨しています。 私は移植性を残したいアプリケーションを書いているので、私のコア機能は標準C ++で書かれており、C ++ / CXを使用してMetroスタイルのフロントエンドを書こうとしています。ただし、このアプローチには少し問題があります。たとえば、ユーザー定義のC ++型のベクトルをXAML ListViewコントロールにプッシュしたい場合、ユーザー定義型をWinRT ref / value型にラップして、に格納する必要がありVector^ます。このアプローチでは、C ++クラスの大部分をWinRTクラスでラップする必要があります。 C ++で移植可能なネイティブアプリケーションを記述しようとしたのはこれが初めてです。このような境界に沿ってWinRTを維持することは本当に実用的ですか?プラットフォーム固有の境界を持つこのタイプのポータブルコアは、他にどのように処理できますか?
15 c++  portability  winrt 

4
プログラマーがなじみのない言語のコードをどの程度理解できるかに関する研究?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 言語Xを知っている経験豊富なプログラマーが、言語Yを使用して有能なプログラマーによって書かれたコードを、XおよびYなどの広く使用されているさまざまな言語でどれだけよく理解できるかについて、真剣な研究はありますか? もちろん、プログラマーが1つの言語しか知らないので、現実の世界はそれほど単純ではありません。私たちが知りたいのは、たとえばC#でプロジェクトを行い、いつかFortranとAlgolだけを知っている古い物理学者がそれを見ると、彼らにはどの程度意味がありますか?それらのいくつかのランダムな句読点を無視すると、数学的な部分はうまく読み込めます。または、Pythonの専門家が私の賢いRubyスクリプトの欠陥を見つけることができますか? 表面的な構文のレベルから、オブジェクト、テンプレートのメタプログラミング、機能などの壮大な概念のレベルまでの問題がある可能性があります。あるプログラマーが「外国語」のコードのすべての構文の詳細を完全に理解することや、ある壮大な概念の宗教に従うことを期待しているわけではありませんが、主な制御の流れをどこまで得られるのか、その場所を見つけること画面に何かが描かれ、その色やサイズを決定する場所で、車を運転するようにプログラムされたロボットが、完了時にエンジンをオフにすることを確認します。 質の高い研究には、出版された学術研究、ある業界グループまたは大手ソフトウェア会社からの公式レポートが含まれますが、ワークショップやクラスの経験豊富なリーダーやその他の情報源による体系的な公平な観察を行います。短いブログ、シングルケースの例、逸話には興味がありません。(まあ、良い読みをするなら、いくつかの逸話かもしれません。)

6
Goプログラミング言語に関連する情報を検索する方法は?
Go言語を殺すようなものがあれば、それは名前です。 クエリで "Go"を使用するだけでは、Webに関連するものを見つけるのは非常に困難です。単語は、英語で最も頻繁にあります。したがって、Go関連のものを除くすべての結果が表示されます。この言語のスポンサーであり、私が検索したものを追跡することで有名なGoogleでさえ、私は英語の文法ではなくプログラミング言語にとても興味があるプログラマーを追跡できません。 英語の文法に関連する結果を除く、プログラミング言語自体に関連する情報を検索する方法は? 例えば、誰かがGoについて彼の観察に言及しているブログ投稿を想像してください。彼は、おそらく「goプログラミング言語」のような検索しやすい文章を使用しないでしょう。おそらく「Goには好きなものが1つあります」。
15 search-engine  go 

10
チェスエンジンを書くための最良のアプローチは?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 私はチェス好きでプログラマーです。私は最近、チェスとプログラミングの知識を使用してチェスエンジンの作成を開始することにしました。だからここに私の質問があります: チェスエンジンを作成するときに、どの言語(Java、C ++、Pythonに精通しています)と方法論を適応させる必要がありますか? 少しのガイダンスをいただければ幸いです。 編集: そこで、JavaScriptで作成することにしました。この Chess UIをgithubからダウンロードすると、準備は完了です!私の最初のステップは、そのための法的動きを書くことです。だから、誰かが私を正しい方向に向けることができますか?(私はjQueryを初めて使用しますが、多くのプログラミング経験があります)。 PS:私は非常に効率的なエンジンを作ろうとはしていません(私はその方法が難しすぎることを知っています)、ただプロセスに精通し、途中でいくつかの新しいテクニックを学びたいです。

4
流れるようなインターフェースは属性よりも柔軟性がありますか?
EF 4.1 Code Firstチュートリアルでは、次のコードが提供されています。 public class Department { public int DepartmentId { get; set; } [Required] public string Name { get; set; } public virtual ICollection<Collaborator> Collaborators { get; set; } } 次に、流れるようなインターフェイスがより柔軟であることが説明されています。 データアノテーションは間違いなく簡単に使用できますが、はるかに柔軟性の高いプログラムによるアプローチを使用することをお勧めします。 流れるようなインターフェースの使用例を次に示します。 protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Department>().Property(dp => dp.Name).IsRequired(); modelBuilder.Entity<Manager>().HasKey(ma => ma.ManagerCode); modelBuilder.Entity<Manager>().Property(ma => ma.Name) …
15 c#  coding-style 

5
イベントチェーンはグッドプラクティスと見なされますか?
ときどき、イベントをトリガーする前にいくつかの複雑な条件を満たしている必要があるシナリオに遭遇しました。さらに、ほとんどのリスナーは、追加のチェックを実行してアクションのコースを決定します。これにより、小さなイベントの観点から考えて、それらを相互にトリガーさせることがより良い解決策になるかどうかを考えさせられました。 イベントを連鎖させることで、後から追加のリスナーをかなり少ない労力で織り込むことができます(YAGNI違反の可能性があります)。私のコードは簡単に理解できる単純な要素で構成されますが、他の人が理解するのは難しくありません。 ただし、このソリューションの潜在的な欠点は、チェーン内で何か問題が発生した場合(たとえば、ヒューマンエラーによる誤ったイベントトリガー)、バグをキャッチすることが非常に困難になるという事実です。 イベントは、良いアイデアの連鎖をさTMを?そうでない場合、イベント関連のコードが乱雑になるのを防ぐための代替方法は何ですか?

1
Java暗号化拡張機能
Javaアプリ内でAES256暗号化をサポートするには、JCEとUnlimited Strength Jurisdiction Policy Filesが必要だと言われました。 これをOracleからダウンロードして解凍すると、2つのJARしか表示されません。 local_policy.jar; そして US_export_polic.jar ここで何も見逃していないことを確認したいだけです!私の理解(読んだ後README.txt)は、これら2つを<JAVA_HOME>/lib/security/ディレクトリにドロップするだけで、インストールする必要があるということです。 これらのJARの名前からすると、AES256を処理できないJava Crypto APIではないと仮定する必要がありますが、実際には法的な問題です。そして、これら2つのJARは基本的にJREに「はい、このレベルの暗号(AES256)を実行することは法的に受け入れられます。」と言います。

8
Web用のMVC以外のデザインパターンはありますか?
MVC以外にWebのデザインパターンはありますか? 次のようなデザインパターンがあることを知っています:Registry、Observer、Factory、ActiveRecord、...、MVCその他のデザインパターンとフォルダー構造のセット。 MVCは他のデザインパターンのセットであるようなデザインパターンはありますか? 編集:私のプログラミング言語はPHPです。

6
アジャイル手法を使用する際に優れたデザインを取得する方法は?
私は約3年間アジャイル手法(SCRUM)を使用しており、特に多くのレベル(実装された機能への早期アクセス権を持つ顧客から、機能をテストできるテスターからの短期フィードバックで)それらが実装されるとすぐに、レビューなどを通じて新しいコードに関する非常に早いフィードバックを提供できる他の開発者から。 一方、私は2つの未解決の問題を抱えています。最初の問題については、この質問で説明します。 問題:良いデザインを得るのが難しい コードが乱雑になり次第、リファクタリングを試みます。できる限り単体テストを作成します(これは一般的なバグ、特にリファクタリングの際に役立ちます)。一方で、毎日のコミットで少しずつ複雑な機能を開発し、構造化されていないコードを継続的に再考すると、本当に良いデザインを作成できません。 最近作成した唯一の適切に設計されたモジュールは、別のアプローチをとることで得られました:数日間問題を分析しました(実際に問題に取り掛かる前に数か月間、問題が頭に浮かびました) )、関係するすべてのクラスとそれらの関係の詳細な設計をさらに数日間スケッチし、その後約3週間作業を中断せずにオフィスに閉じ込めてコード全体を書き留めました。結果は、私がしばらくの間作り出した最高のものであり、バグを見つけたり修正したりするのはかなり簡単で、それ以降は関連する変更を必要としない非常に明確な設計でした。 そのため、これまでは、全体像が魔法のようにプロセスに現れることを期待して、少しずつコードを書き始めるよりも、事前にやりたいことの全体像を把握する方がはるかに効果的でした。私の最善の努力により、小刻みの開発アプローチは常に私をより悪い設計へと導いてきました。 質問:同様の経験がありますか?SCRUMを間違った方法で適用しているのですか、それとも少しずつ開発しても、うまく設計されたソフトウェアを作成したい場合、何に注意する必要がありますか?または、実際のコーディングを開始する前に、デザインユーザーストーリーをスケジュールする必要がありますか?少なくとも平均よりも複雑な機能については、これは良い習慣と考えられていますか? 編集-注 良いデザインは絶対的なものではなく、それ自体に価値はありませんが、コンテキストに依存するという事実と、手近な問題に十分なデザインを目指すべきであるという事実を知っています。 たとえば、(1)できるだけ早く準備する必要がある、(2)一度だけ使用する、(3)しないという単純なコンポーネントを実装する必要がある場合、良いデザインを(あまり)気にしませんシステムの他の部分(YAGNI)によって使用されます。 コンポーネント(1)が数回使用され、製品のいくつかの異なるリリースで使用される場合、(2)長期にわたって保守および拡張する必要がある場合、(3)それに応じて他の多くのコンポーネントを使用する場合、良いデザインが重要です。
15 design  agile 

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