ソフトウェア工学

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

9
C#開発者向けのC ++
私はC#をかなりよく知っているので(残念ながら独学で)、Windowsアプリケーション用にC ++プログラミングを行う必要があります。私は、C#を学習しているC ++開発者向けに多くの情報を見つけることができましたが、C#を既に知っているときには、C ++を学習することについて多くを見つけることができませんでした。誰かが基本の良い概要に出くわしましたか? MSDNには比較がありますが、それほど詳細ではありません。 私はいくつかのソースをつなぎ合わせることができますが、何かがそこにあると考えました-私はそれを見つけることができません。ご協力いただきありがとうございます。
24 c#  c++ 

3
実用面でのドメイン駆動開発とは何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 閉じた3年前。 この分野の開発者からドメイン駆動開発について聞いた。彼は、それが要件の変化に対する特効薬であるかのようにそれを話しました。 wikiを読みました。まだ明確ではありません。実用的な用語で「3D」とは何ですか?現在、UMLクラス図が時代遅れになっているのは本当に驚くべきことですか?

6
クトゥルフの方法の解析に対する議論は何ですか?
会社にとって非常に重要になる可能性のあるツールのために、ドメイン固有言語を実装するタスクを割り当てられました。この言語は単純ですが、些細なことではなく、ネストされたループ、文字列の連結などを既に許可しており、プロジェクトが進むにつれて他の構成要素が追加されることは実質的に確実です。 レクサー/パーサーを手書きで書くことは(文法が簡単でない限り)時間がかかり、エラーが発生しやすいプロセスであることを経験から知っています。そのため、yaccのパーサージェネレーターまたはParsecのような組み合わせライブラリーという2つのオプションがありました。前者も同様に優れていましたが、さまざまな理由で後者を選び、関数型言語でソリューションを実装しました。 結果は私の目にはかなり壮観で、コードは非常に簡潔で、エレガントで読みやすく/流fluentです。java / c#以外でプログラミングしたことがない場合、少し奇妙に見えるかもしれないと思いますが、java / c#で書かれていないものには当てはまります。 しかし、ある時点で、文字通り同僚に攻撃されました。私の画面を一目見た後、彼はコードが理解不能であり、解析を再発明するのではなく、誰もがするようにスタックとString.Splitを使用するだけだと宣言しました。彼は多くの騒ぎをしました、そして、私は彼を納得させることができませんでした、私が彼を信じることができませんでした 私は彼に言語を説明することさえ申し出ましたが、役に立ちませんでした。 私は議論が経営陣の前で再浮上することを確信しているので、いくつかの確固たる議論を準備しています。 これらは、String.Splitベースのソリューションを回避するために頭に浮かんだ最初のいくつかの理由です。 特殊なケースや物事を迅速に制御不能にするには、多くのifが必要です 多数のハードコードされた配列インデックスにより、メンテナンスが困難になります メソッドの引数として関数呼び出しのようなものを処理することは非常に困難です(例:add((add a、b)、c) 構文エラーの場合に意味のあるエラーメッセージを提供することは非常に困難です(発生する可能性が非常に高い) 私はすべて単純さ、明快さ、そして不必要なスマート暗号のようなものを避けるためにいますが、バーガーフリッパーでも理解できるようにコードベースのすべての部分を馬鹿にすることは間違いだと思います。インターフェースを使用しない、懸念事項の分離を採用しない、コードをコピーアンドペーストするなど、私が聞いたのと同じ議論です。結局、ソフトウェアプロジェクトに取り組むには、最低限の技術的能力と学習意欲が必要です。(この議論はおそらく不快に聞こえるかもしれませんが、戦争を開始しても誰も助けにはなりません) クトゥルフの方法を解析することに対するあなたの好きな議論は何ですか?* *もちろん、彼が正しいと私を納得させることができれば、私も完全に幸せになります

9
マシンコードでプログラムすることを学ぶためのリソース?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または詳細な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 私はプログラミングから始めて、JavaからC ++、そしてCに至るまで、プログラミングに夢中な学生です。私は、骨組みに戻り、さらにアセンブリに進むと考えました。 しかし、驚いたことに、多くの人がCほど速くなく、使い道がないと言っていました。彼らは、カーネルのプログラミング方法を学ぶか、Cコンパイラを書くことを提案しました。私の夢は、バイナリ(マシンコード)でプログラムするか、ベアメタルをプログラムする(物理的にマイクロコントローラーをプログラムする)か、BIOSやブートローダーなどを書くことです。 あまりにも多くの調査の結果、私が聞いた唯一の可能性は、16進エディタがこの時代と時代に私が見つけた機械語に最も近いものであったということです。私が知らない他のものはありますか?マシンコードでプログラミングすることを学ぶためのリソースはありますか?8ビットのマイクロコントローラー/マイクロプロセッサーが望ましい。 この質問は私の質問に似ていますが、最初に実践的な学習に興味があり、次に理論を理解することに興味があります。

3
Softpediaは私のオープンソースプロジェクトのいくつかを公開しました。[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 (参考:推奨事項について、この質問をStackoverflowから移動しました。) softpedia.comが「スクリプト、コードスニペット、およびWebアプリケーションのデータベース」に「製品」の一部を追加したことを知らせるメールを数通受け取りました。私の製品はこの場合、いくつかの小規模なオープンソースプロジェクトであり、GitHubでホストおよび公開しています。 今、私はこれにどのように反応するのだろうと思っています。このサイトは、実際のダウンロードの前に3ページの広告を介して間接的に無料でお金を稼いでいます。彼らはまた、バージョン番号を「発明」しているように見え、彼らが私のプロジェクトの最新バージョンをホストしているか、すべてのバージョンをホストしているかを知ることができません。—どこで「最新」のものを管理していないので、これが将来どのように問題につながるかを見ることができます。 一方、私はいくつかの余分な宣伝を気にしません。できるだけ多くの人にプロジェクトについて知ってもらい、使用し、フォークし、できれば改善してほしい。 質問のプロジェクトは非常に小さいですが、私やこの質問を読んでいる他の人々にとっては、将来的にはそうではないかもしれません。 これはこの辺りの他の人にも起こったに違いないと確信しています。あなたの意見は何ですか?ダウンロードを削除する必要がありますか? アップデート1 私は削除を要求し、Softpediaがこの種のプロジェクトに適切な環境を提供できるとは思わないと述べました。 彼らのチームは、今すぐリンクを削除すると言ったフレンドリーなメールですぐに返事をしました。 プロジェクトが更新されないことを心配している場合は、RSSリーダーでブックマークされていることを伝えなければならないので、バージョンの変更は必要に応じて転送されます。そのため、リポジトリに更新が見つかったらすぐにスクリプトを最新の状態に保つことをお約束します。 私はこの種の反応に非常に感謝していると言わなければならないので、私は彼らに私が心配していることと私を悩ませていることをより詳細に説明する別のメールを送った。また、私は、私のライセンスがどのような場合でもプロジェクトをホストすることを明確に許可していることを承知していると述べましたが、いくつかの詳細とプロジェクトの表現方法に若干の変更を加えます。—これがどこに行くのか見てみましょう。 更新2 連絡先と話し合い、バージョンの表示(変更の可能性を与えていた)とオーサリングに関する変更を要求した後、プロジェクトをサイトに戻しました。 全体として、ポジティブで間違いなく興味深い経験です。

13
「break」を含む「while(true)」ループの用語は何ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 6年前に閉鎖されました。 次のようなC ++またはC#のループがあるとします。 while( true ) { doSomething(); if( condition() ) { break; } doSomethingElse(); } これは一般に「無限ループ」と呼ばれます。しかし、それは技術的に無限ではありません-制御が通過すると停止しbreakます。 そのようなループの用語は何ですか-それは「永遠にループ」ループ制御ステートメントと内部に「ブレーク」を持っていますか?


5
プログラミング言語の各タイプを学ぶ
私は、すべてのプログラマーがそれぞれのタイプの言語の1つを学ぶべきだと何度か聞いたことがあります。今、これは必ずしも真実ではありませんが、私はそれが良い考えだと思います。 手続き言語(Perl)を学びましたが、他のタイプは何ですか? それらの違いは何ですか、それぞれの例は何ですか?

4
javascriptではなくcoffeescriptを使用する理由 [閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または詳細な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 別の言語にコンパイルする言語を構築することは、最初からJavaScriptを適切に学習するのではなく、最初から悪い考えのように感じると思います。Douglas Crockfords Good Partsを調べてみてください。また、javascriptは難しくありません。言語に関係なく、適切なコードを記述するのは困難です。javascriptで安っぽいコードを書くなら、おそらくcoffeescriptやlattescriptで安っぽいコードを書くでしょう。そして、coffeescript構文が美しいと言うのは私をパスします。私は中括弧とC構文が好きです-そして、できればそのような言語で動作するでしょう(VBでごめんなさい!)。そして、同じことを繰り返し行うためのより多くのおもちゃと言語とフレームワークは、もはや私にとって進歩したくないと感じています!
24 javascript 

3
ブリッジの設計パターンを理解する
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 「ブリッジ」デザインパターンがまったくわかりません。さまざまなWebサイトを調べましたが、助けにはなりませんでした。 誰でもこれを理解するのに役立つことができますか?

11
雇用主から要求された場合、安全でないコードを書くことを受け入れるべきですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 雇用主は、パスワードをデータベースにクリアテキストで保存する機能を実装するように要求しました(または、バイナリに保存されたあいまいな暗号化/復号化機能を使用します。これは少し優れていますが、安全ではありません)。 お客様がセキュリティ機能を使用する際のセキュリティの影響を認識していれば、そのような機能を実装しても構わないと答えました。 同僚とこの問題について議論するとき、誰かが私に、ソフトウェアエンジニアとして、私たちが製品に導入するセキュリティ問題に個人的に責任がある(法律上の意味で)と私に言いました。契約を調べましたが、同様のケースに関連するものは見つかりませんでした。 法的な観点から、そのような機能の実装を拒否すべきですか?顧客がこの機能による損害を経験した場合、たとえ彼が同様にセキュリティ上の懸念を知っていたとしても、私の雇用主は私を裁判に連れて行くことができるのは本当ですか? 編集:私はこの質問は弁護士からしか確実に答えられないと理解しています。ライセンスに関する質問についても同じことが言えます。ここでの人々は、時には弁護士に相談した後、別の司法管轄区で適用される保証なしに、理解と経験を与えます。ただし、ここではライセンスがトピックとして明示的に受け入れられています。ここではどのような質問をすることができますか?を参照してください。。他のプログラマーも同じ問題を抱えている可能性があり、他のプログラマーは以前にこの状況に直面したことがあり、そのために弁護士に相談した可能性があると思います。
24 security  legal 

9
メモリ管理されていないプログラミングの複雑さは何ですか?
または、言い換えると、自動化されたガベージコレクションはどのような特定の問題を解決しましたか?低レベルのプログラミングを行ったことがないので、リソースの解放がどれほど複雑になるかわかりません。 GCが対処する種類のバグは、(少なくとも外部の観察者にとっては)自分の言語、ライブラリ、概念、イディオムなどをよく知っているプログラマーがしないようなことのように見えます。しかし、私は間違っている可能性があります:手動メモリ処理は本質的に複雑ですか?

8
優れたプログラマーになるには、ハードウェアレベルで何が起こっているのかを理解する必要がありますか?
私は独学のプログラマーです。CS101でこの質問に答えられる場合に備えて。私は多くの言語を学び、使用しました。 プログラミングの問題に遭遇したとき、私はいつも同じ壁にぶつかっているようです。たとえば、関数によって返された配列へのポインターを処理する方法について、別のフォーラムで質問をしました。最初は、C ++の設計者が状況を処理するために設定した適切なテクニックがわからないだけだと考えています。しかし、以下の回答と議論から、何かが「返品」されたときに何が起こるかは本当にわかりません。 優れたプログラマーは、プログラミングプロセスをどの程度深く理解する必要がありますか?

4
ライブラリの異なるバージョンをどのようにバージョン管理下に置きますか?タグを使用していますか?または枝?または別の方法?
私は最近、自分のコードをバージョン管理下に置き始めました(私が働いているラボではSVNで、自分のコードはgithubで(明らかにgitで))。バージョン管理を使用する前に、私はこのようなことをしていました。バージョン番号の付いた多くのフォルダーの中に、ライブラリーの名前のフォルダーがありました。新しいバージョンで作業を開始するたびに、最後のバージョンのコピーを作成し、名前を新しいバージョンに変更して実装を開始します。 ただし、フォルダがバージョン管理下に置かれている場合、これはかなり冗長に思えます。冗長性は別として、誰かが最新バージョンを入手したい場合、彼import/ 彼女たちがちょうどあればすべてのバージョンをダウンロードするでしょうclone。 現在、バージョン管理を使用してこれを行う多くの方法を見ていますが、私はそれが初めてなので、どちらがより保守可能かはわかりません。 方法1:タグを使用する 私がタグを正しく理解していれば、メインブランチがあります。取得した変更をコミットし、バージョンでタグ付けします。次に、作業コピーを取得したい場合は、特定のタグが付いたコピーを取得します。(間違っている場合は修正してください) 方法2:分岐バージョン この方法では、メインブランチは開発ブランチになります。時々、安定したバージョンがv1.2.0作成されるとしましょう(たとえば)、そのバージョンのブランチを作成し、コミットしません。そうすれば、特定のバージョンをダウンロードする場合、そのブランチからコードを取得できます。私はあなたがそれにコミットすることは決してないと言ったが、バグ修正を行い、古いバージョンのブランチにコミットして古いバージョンを実行し続けることが可能かもしれない。現在のバージョンがある場合たとえばv2.0、しかし、使用したい人がいるv1.2、あなたはから別のブランチを取得することができv1.2、すなわち、v1.2.1およびバグ修正をコミット、またはちょうど同じバージョンを保持v1.2し、単にバグ修正をコミットします。 したがって、ブランチは次のようになります。 v1.2.1 v1.2.2 / / v1.0.0 v1.2.0--------- v2.0.0 / / / -------------------------------------- dev このようにして、マイナーバージョンアップデートごとにブランチを作成できます。(上のグラフでは、v1.2.1とv1.2.2、またはv2.0.0のリリース後に作成されたため、v1.2.0とv2.0.0の間の開発の一部ではないことに注意してください。古いバージョンのサポートと考えてください) 方法3:分岐開発 この方法は前の方法の反対です。メインブランチは最新の安定バージョンです。新しいバージョンで作業しているときは常に、(開発用の)ブランチを作成し、コードで作業し、安定しているときにメインブランチとマージします。 この場合、ブランチは次のようになります。 ________ ____ ________________ _____ dev / \/ \/ \/ ---------------------------------- latest_version おそらくこれはタグと組み合わせて行う必要がありますか? 質問! とにかく、私の質問はあなたの経験に基づいて、これらの方法のどれがより実用的であると証明しますか?そこに知られている最良の方法はありますか(おそらく私は自分自身を理解していなかった)?これらのことは一般的にどのように行われますか?


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