ソフトウェア工学

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

6
XtendとKotlinを使用してこれらのScalaを削減しようとするのはなぜですか?[閉まっている]
そのため、EclipseはXtendを提供し、JetBrainsはKotlinを提供しています-どちらもScalaのバージョンを骨抜きにしたようです。私の質問はなぜですか?私はスカラ座で少しプレイしたし、そうではありませんことを困難。これは、命令的なものから機能的なものへの飛躍の固有の難しさに対する単なる反応なのでしょうか、それとも他に何か機能しているのでしょうか? 編集:謝罪。最初に投稿したときに質問を読み直すと、トローリングのように聞こえるかもしれません。私が質問を表現した方法は、質問をするための最良の方法であるように見えました。「Scalaは難しすぎる/ Scalaは複雑すぎる」という効果と、「KotlinはScalaを実行しようとする試みですが、よりシンプル」というブログ投稿を見てきました。元々の言い回しはそのままにしておきますが、正直にトロールしようとしませんでした。

5
2つの異なる言語で2つの異なるプログラミングをやり取りするにはどうすればよいですか?
これが広すぎるかどうかはわかりませんが、私はまだ大学の若いプログラマーです。私は、さまざまな言語について十分に理解しており、かなり良い基盤を持っていると感じています。しかし、たとえば、プログラムを作成しようとしていて、Pythonで簡単に作業できるという理由だけでPythonの一部を書いたとしますが、このプログラムは、私が書いた別のプログラムから出力を取得する必要があるとしたらどうでしょうかCで私はその速度のためにCを使用しています。2つの異なるプログラムと言語を相互作用させて、全体で1つのプログラムを作成する方法がわかりません。私はあなたがファイルに書き込むことができると確信しているが、それからpythonとCプログラムの両方がファイルにアクセスする場合、ロックを考える必要があると思う。 ほとんどの場合、これはファイルをプログラムにインポートすることでしたが、その場合、ファイルは同じ言語なので簡単にインポート機能を使用しますが、2つの言語/プログラムが相互作用して1つのまとまりのある出力を作成すると問題が発生します。 学ぶためだけにいくつかの基本的なWebアプリケーションを作成することを考えていたので、この質問について考えていましたが、pythonまたはその逆で書いたものとjavascriptファイルをインタラクティブに言う方法がわかりません。 ここで本当に簡単なことを見逃しているだけで、理解していないように感じます。この質問が広すぎる場合は申し訳ありませんが、オンラインで明確な答えを見つけることができなかった場合、オープンソースのwebappを調べようとしていましたが、それから答えを実際に把握できませんでした。これは、stackexchangeで読むのが好きな人に尋ねるのに適した場所です。 返信ありがとうございます。
26 python  c 

5
なぜ「ハッシュテーブル」または「ハッシュ関数」と呼ばれるのですか?ハッシュはここでは意味がありません[非公開]
ハッシュテーブルとハッシュ関数を使用し、聞いて、話し、実装しているのは、現在約4年の開発です。しかし、なぜそれがハッシュと呼ばれるのか、私は本当に理解できませんか? プログラミングを始めた最初の日を思い出します。この用語は、私にとって面倒な用語でした。その名前に基づいて、私はそれが何であるかを決して理解しませんでした。私は実験的に理解し、それが何をするかとなぜ、ときに我々はそれを使用する必要があります。 しかし、私はそれがなぜhashと呼ばれるのかを理解しようとすることがあります。私はテーブルや関数に問題はありません、そして正直に言うと、それらはかなり演de的で合理的な用語です。ただし、keyやuniquenessなど、ハッシュの代わりに、より良い単語を使用できると思います。キーテーブルまたは一意性テーブルを使用しないでください。 私の辞書によると、ハッシュは以下を意味します: ジャガイモと肉の炒め物(非常に無関係) #記号(別名、番号記号、ポンド記号など)(それでも関連性はなく、単なる命名法です) 文字列にアルゴリズムを適用します(ハッシュテーブルの最も重要な機能である一意性とはまだ関係ありません) 食べ物を切る ハシッシュの別の用語 ハッシュと呼ばれる理由を知っている人はいますか?
26 naming 

4
Google Code Searchに代わるものはありますか?[閉まっている]
Googleの公式ブログごと: Web全体でオープンソースコードを検索できるように設計されたCode Searchは、2012年1月15日にCode Search APIとともにシャットダウンされます。 Google Code Searchはなくなったため、表示された機能を理解するのが非常に難しくなったため、検索オプションのページのキャッシュから収集した情報を使用してそれらをレンダリングしようとしました。 「検索ボックス内」は、高度な検索インターフェイスを使用する代わりに、メインの検索ボックスにコマンドを直接入力する構文を示しています。 パッケージ(検索ボックス:「package:linux-2.6」) 言語(検索ボックス内: "lang:c ++") (オプション:任意の言語、actionscript、ada、applescript、asp、アセンブリ、autoconf、automake、awk、basic、bat、c、c#、c ++、caja、cobol、coldfusion、configure、css、d、eiffel、erlang、fortran、 go、haskell、inform、java、java、javascript、jsp、lex、limbo、lisp、lolcode、lua、m4、makefile、maple、mathematica、matlab、messagecatalog、modula2、modula3、objectivec、ocaml、pascal、perl、php、 pod、prolog、proto、python、python、r、rebol、ruby、sas、scheme、scilab、sgml、shell、smalltalk、sml、sql、svg、tcl、tex、texinfo、troff、verilog、vhdl、vim、xslt、 xul、yacc) ファイル(検索ボックス内: "file:^。*。java $") クラス(検索ボックス:「class:HashMap」) 関数(検索ボックス:「function:toString」) ライセンス(検索ボックス:「license:mozilla」) (オプション:null / any-license、aladdin / Aladdin-Public-License、artistic / Artistic-License、apache / Apache-License、apple / Apple-Public-Source-License、bsd / BSD-License、cpl / Common-Public -ライセンス、epl / Eclipse-Public-License、agpl / GNU-Affero-General-Public-License、gpl / GNU-General-Public-License、lgpl / GNU-Lesser-General-Public-License、免責事項/歴史的許可-特記事項、ibm / IBM-Public-License、lucent …

7
大規模なMS Accessアプリケーションを.Netに移行するためのベストプラクティスは?
最初は個人的なニーズに合わせて社内で開発された非常に巨大なMS Accessアプリケーションがあり、その後商用ソフトウェアに変換されて販売に成功しました。ソフトウェアは一種の「万能ソフトウェア」であり、ドキュメント管理システム、エンタープライズリソースプランニング、在庫管理、顧客関係管理、データ分析などのいくつかのモジュールが含まれています。アプリケーションの機能ですが、クライアントからのリクエストに応えるためには、新しいものに移行する必要があることに気付きます。 Visual Basic .Netに固執できるため、アプリケーションを徐々に.Netに移行することにしました。ここではほとんどの開発者にとって新しい言語ですが、VBAおよびVB6で実装された数十の小さなプロジェクトに関する深い知識があります。 すべてのデータ操作と検索がサーバー上で直接実行されるように、すでにアプリケーションのデータレイヤー機能をMS SQL Serverに移行し始めています。 私たちが探しているのは、拡張GUIを徐々に移動するためのベストプラクティスです(サブフォームを含む約500〜600の異なるフォーム、多言語サポートのある約200のレポートなど)。潜在的な顧客からDMSのドキュメントに非同期データ暗号化を実装するという最近の要求に従って、この部分をMS Accessから完全に切り離し、.Netで実装することもできます。 問題は、.Netアプリケーションを既存のMS Accessシステムとシームレスに統合し、特定のパラメーター(ユーザー権限など)で呼び出すことができ、このアプリケーションと実行中のMS Accessアプリケーション間のデータ交換を可能にする方法です。 編集: マーティンファウラーの著書「エンタープライズ統合パターン」にあるいくつかのプラクティスを適用して、MS Accessアプリケーションと、さまざまなニーズに合わせて.Netで実装したいくつかの小さなユーティリティを統合しようとしました。しかし、なんとか「共有データベース」パターンを使用することができただけであり、ソリューションに本当に満足していませんでした。 たとえば、POP3接続を使用してメールサーバーからすべてのメッセージを自動的にダウンロードして1つのテーブルに保存するWindowsサービスとして実行される小さなユーティリティを実装しましたが、すべての添付ファイルはファイルシステムに保存されます。 主に行ったのは、ADO.NETを使用してMDB形式のMS Accessデータベースに直接アクセスし、処理済みのデータ(上記の例のメールメッセージに関するデータなど:FROM、TO、CC、BCC、件名と本文)。 .NetのMDBデータ形式を使用してもまったく問題はありません。さらに、MDBにとどまり、ほとんどすべてをMS SQL Server 2008にアップサイズすることは望ましくありません。これにより、データ管理とスケーラビリティに関する自由度が高まります。 ここでの主な問題は、データの更新時に特定のVBAコードの実行をトリガーできるように、Accessで一種の「コールバック」を実装する方法がわからないことです。 データテーブルの更新および挿入トリガーをサポートする MS Access 2010には大きな期待がありましたが、これらのトリガーにはMS Accessマクロしか使用できず、トリガー内でカスタムVBAコードを実行する方法はありませんでした。 また、ユーザーが呼び出したデータの再クエリを模倣するために、キーストロークをMS Accessウィンドウに直接送信するソリューションもいくつか試しました。これは機能しますが、本番環境で使用できる現実的なソリューションであるとは考えていません。 MS AccessのDDEも検討しましたが、DDEコマンドを実装し、それらをインメモリデータおよびコマンド交換に使用する優れたサンプルソリューションは見つかりませんでした。 そのため、主な問題は、MS Accessと.Netアプリケーションを共存させて相互作用させることです。 EDIT2: .NetとMS Accessの間でメッセージを渡すためにVBAにMSMQライブラリを実装したことについて言及するのを忘れましたが、問題はここでもコールバックの欠如でした。マルチスレッド化は、本当に良い解決策ではありませんでした。

11
マルチスレッドのバグに悩まされる
私が管理している新しいチームでは、コードの大部分はプラットフォーム、TCPソケット、およびhttpネットワークコードです。すべてのC ++。その大部分は、チームを去った他の開発者からのものです。チームの現在の開発者は非常に賢いですが、ほとんどの場合、経験的には後輩です。 私たちの最大の問題:マルチスレッドの同時実行バグ。ほとんどのクラスライブラリは、いくつかのスレッドプールクラスを使用して非同期に作成されています。クラスライブラリのメソッドは、長時間実行されるタスクを1つのスレッドからスレッドプールにキューイングすることが多く、そのクラスのコールバックメソッドは別のスレッドで呼び出されます。その結果、誤ったスレッドの仮定に関連する多くのエッジケースバグがあります。これにより、同時実行性の問題から保護するための重要なセクションとロックを保持するだけでなく、微妙なバグが発生します。 これらの問題をさらに困難にしているのは、修正の試みがしばしば間違っていることです。チームが(またはレガシーコード自体で)試みようとしているミスには、次のようなものがあります。 よくある間違い#1-共有データをロックするだけで同時実行の問題を修正しますが、メソッドが期待される順序で呼び出されない場合に何が起こるかを忘れます。これは非常に簡単な例です: void Foo::OnHttpRequestComplete(statuscode status) { m_pBar->DoSomethingImportant(status); } void Foo::Shutdown() { m_pBar->Cleanup(); delete m_pBar; m_pBar=nullptr; } そのため、OnHttpNetworkRequestCompleteの実行中にShutdownを呼び出すことができるバグがあります。テスターはバグを見つけ、クラッシュダンプをキャプチャし、バグを開発者に割り当てます。彼は次のようにバグを修正します。 void Foo::OnHttpRequestComplete(statuscode status) { AutoLock lock(m_cs); m_pBar->DoSomethingImportant(status); } void Foo::Shutdown() { AutoLock lock(m_cs); m_pBar->Cleanup(); delete m_pBar; m_pBar=nullptr; } 上記の修正は、さらに微妙なエッジケースがあることに気付くまでは問題ありません。OnHttpRequestCompleteがコールバックされる前にシャットダウンが呼び出されるとどうなりますか?私のチームが持っている実際の例はさらに複雑であり、コードレビュープロセス中にエッジケースを見つけるのはさらに困難です。 よくある間違い#2-盲目的にロックを終了し、他のスレッドが終了するのを待ってからロックを再入力することで、デッドロックの問題を修正します。 よくある間違い#3-オブジェクトは参照カウントされますが、シャットダウンシーケンスはポインターを「解放」します。しかし、まだ実行中のスレッドがそのインスタンスを解放するのを待つことを忘れています。そのため、コンポーネントは完全にシャットダウンされ、その後、コールを予期しない状態のオブジェクトでスプリアスまたはレイトコールバックが呼び出されます。 他のエッジケースもありますが、一番下の行はこれです: マルチスレッドプログラミングは、頭のいい人でも簡単です。 これらの間違いを見つけると、より適切な修正を開発するために各開発者とエラーについて話し合うことに時間を費やします。しかし、「正しい」修正には触れなければならない膨大な量のレガシコードのため、各問題の解決方法についてしばしば混乱していると思われます。 私たちはすぐに出荷するつもりであり、私たちが適用しているパッチは今後のリリースに適用されると確信しています。その後、コードベースを改善し、必要に応じてリファクタリングする時間があります。すべてを書き直す時間はありません。そして、コードの大部分はそれほど悪くはありません。しかし、スレッドの問題を完全に回避できるように、コードをリファクタリングしたいと考えています。 私が検討しているアプローチの1つはこれです。重要なプラットフォーム機能ごとに、すべてのイベントとネットワークコールバックがマーシャリングされる専用の単一スレッドを用意します。メッセージループを使用したWindowsでのCOMアパートメントスレッドに似ています。長時間のブロッキング操作はワークプールスレッドにディスパッチされる可能性がありますが、コンポーネントのスレッドで完了コールバックが呼び出されます。コンポーネントは同じスレッドを共有することさえできます。その後、スレッド内で実行されるすべてのクラスライブラリは、単一のスレッド化された世界を想定して記述できます。 その道を進む前に、マルチスレッドの問題に対処するための他の標準的な手法や設計パターンがあるかどうかにも非常に興味があります。そして、私は強調しなければなりません-ミューテックスとセマフォの基本を説明する本を超えた何か。どう思いますか? また、リファクタリングプロセスに向けた他のアプローチにも興味があります。次のいずれかを含む: スレッド周辺のデザインパターンに関する文献または論文。ミューテックスとセマフォの紹介を超えたもの。大規模な並列処理も必要ありません。他のスレッドからの非同期イベントを正しく処理するようにオブジェクトモデルを設計する方法だけです。 さまざまなコンポーネントのスレッド化を図式化する方法。これにより、ソリューションの研究と発展が容易になります。(つまり、オブジェクトおよびクラス全体のスレッドを議論するためのUML同等物) …

5
プログラミング言語とは正確には何ですか?そのような言語で書くことができるのは何ですか?
申し分なく、私はプログラミングの初心者であり、これはかなり抽象的な質問であることを認めます。 私たちが毎日話す自然言語は、人々がお互いを理解できるために存在します。特定の言語で書かれたコードをコンピューターがどのように理解できますか? A氏が新しい言語を作成するとします。機械はそれをどのように受け入れますか?作成者は、新しい言語を作成するために機械語を使用して機械と通信する必要がありますか?機械が正しく理解している間に言語で書けることを保証するものは何ですか?

6
「ものの塊」ユーティリティプロジェクトを「オプション」の依存関係を持つ個々のコンポーネントに分離する
何年にもわたる社内プロジェクトでC#/。NETを使用してきた数年間で、1つのライブラリが有機的に成長して1つの巨大なものになりました。それは「Util」と呼ばれ、あなたの多くがあなたのキャリアでこれらの獣の1つを見たと確信しています。 このライブラリの多くの部分は非常にスタンドアロンであり、別々のプロジェクトに分割することができます(オープンソースにしたい)。ただし、これらを個別のライブラリとしてリリースする前に解決する必要がある大きな問題が1つあります。基本的に、これらのライブラリ間に「オプションの依存関係」と呼ぶものがたくさんあります。 これをより適切に説明するには、スタンドアロンライブラリになるのに適したモジュールのいくつかを検討してください。CommandLineParserコマンドラインの解析用です。XmlClassifyクラスをXMLにシリアル化するためのものです。PostBuildCheckコンパイルされたアセンブリに対してチェックを実行し、失敗した場合はコンパイルエラーを報告します。ConsoleColoredString色付きの文字列リテラルのライブラリです。Lingoユーザーインターフェイスの翻訳用です。 これらのライブラリはそれぞれ完全にスタンドアロンで使用できますが、一緒に使用する場合は、便利な追加機能が必要です。たとえば、との両方が必要なビルド後のチェック機能CommandLineParserをXmlClassify公開しますPostBuildCheck。同様に、はCommandLineParser、を必要とする色付き文字列リテラルを使用してオプションドキュメントを提供することを許可し、をConsoleColoredString介して翻訳可能なドキュメントをサポートしLingoます。 したがって、重要な違いは、これらがオプション機能であることです。ドキュメントを翻訳したり、ビルド後のチェックを実行したりせずに、プレーンで色付けされていない文字列でコマンドラインパーサーを使用できます。または、ドキュメントを翻訳可能にすることもできますが、それでも色付けされません。または、色付きで翻訳可能です。等。 この「Util」ライブラリに目を通すと、ほとんどすべての潜在的に分離可能なライブラリには、それらを他のライブラリに結び付けるようなオプション機能があります。これらのライブラリを依存関係として実際に必要とする場合、このものはまったく解りません。1つだけを使用する場合は、基本的にすべてのライブラリが必要です。 .NETでこのようなオプションの依存関係を管理する確立されたアプローチはありますか?


11
ビジネスソフトウェアでラムダ関数またはメソッドを使用することは許容されますか?
ここで、デリゲート\ラムダ関数を使用して、中間のアイデアの穴を多くの繰り返しなしで解決することを示す投稿に気付きました:http : //www.markhneedham.com/blog/2009/04/04/functional-c -中間の穴のパターン/ 問題は、ジュニア開発者や他の人が必ずしも関数pointer \ delegate \ lambda関数の概念が何であるかを理解していないため、コードの読み取り(およびデバッグ)が難しくなるようです。 特に小さなチームや単独のデベロッパーショップで、ビジネスソフトウェアを作成する際にこのツールの使用を回避または厳しく制限する必要がありますか? または、適切なコメントを付けて使用して、次の開発者がラムダ関数について理解または学習することをもはや期待していないことを期待できますか?
26 lambda 

4
MapReduceは単なる分割統治のアプリケーション以上のものですか?
個々の問題が個別に解決できるまで問題を小さな問題に分割し、それらを組み合わせて元の質問に答えることを、分割統治アルゴリズム設計手法と呼びます。[参照:CLRによるアルゴリズムの概要] 最近、特に非常に大きなデータセットの領域で計算上の問題を解決するこのアプローチは、分割統治ではなくMapReduceと呼ばれています。 私の質問は次のとおりです。MapReduceは、分割統治アプローチに依存する独自のフレームワーク以上のものですか、それとも何らかの点でユニークにする詳細がありますか?
26 algorithms 

8
データベース設計で不変性を優先する
Joshua BlochのEffective Javaの項目の1つは、クラスがインスタンスの変更をできる限り少なくし、できればまったく許可しないという概念です。 多くの場合、オブジェクトのデータは何らかの形式のデータベースに保存されます。これにより、特に大規模システム内の単一のエンティティを表すテーブルについて、データベース内の不変性の考えを考えるようになりました。 私が最近実験しているのは、これらのオブジェクトを表すテーブル行に対して行う更新を最小限に抑え、可能な限り挿入を実行しようとするアイデアです。 最近試したものの具体例。後で追加データを含むレコードを追加する可能性があることがわかっている場合は、それを表す別のテーブルを作成します。次の2つのテーブル定義のようなものです。 create table myObj (id integer, ...other_data... not null); create table myObjSuppliment (id integer, myObjId integer, ...more_data... not null); これらの名前が逐語的ではなく、単にアイデアを示すためであることは、願わくば明白です。 これは、データ永続性モデリングへの合理的なアプローチですか?特に、レコードが最初に作成されたときに存在しなかった可能性のあるデータのNULLを埋めるために、テーブルで実行される更新を制限することを試みる価値はありますか?このようなアプローチが後に激しい痛みを引き起こす可能性があるときはありますか?

13
C ++の基礎に苦労している学生の指導[非公開]
私は、最初のプログラミング言語であるC ++の基礎を学ぶのにかなり苦労している数人の生徒を指導しています。私は、最初のCSコースを失敗または脱落させた優秀で優秀な学生を多く知っています。私が指導している全員が、クラスでの彼または彼女の経験について同様の説明をします。インストラクターはあまりにも速く動きますが、講義では何も意味がありません。このCSクラスの前は、これらの苦労している学生のほとんどは、ワードプロセッサ、Webブラウザ、またはその他のエンターテイメント以外のものとしてコンピュータに興味を示していませんでした。コンピューターは機能するブラックボックスであるため、なぜそれを台無しにしますか? 私の最良の推測は、コンピュータサイエンスの抽象化とおなじみの概念との接続に問題があることです。つまり、これらの学生は数学、生物学、または物理学を学ぶ方法を知っているかもしれませんが、プログラミングに関してはそれらのテクニックは機能していません。 誰か提案やアドバイスはありますか?私が手伝っている学生は、このクラスに失敗するに値しません。インストラクターがこれらの生徒の学習スタイルを考慮していないことは明らかです。つまり、インストラクターは生徒ではなく失敗しています。

3
オブジェクト指向の分析と設計(OOAD)を上手にするには?
優れたアナライザーおよびデザイナーになることは、開発者に大きな利益をもたらします。しかし、これには間違いなく障害があります。誰もがOOADに興味があるわけではなく、興味のあるすべての人が経路を知っているわけでもありません。優れたOOADは複数のOO言語を知っているべきですか?または彼/彼女はプロジェクトに失敗したはずですか?どうすればよいOOADになれますか?

10
フレームワークの学習に費やした時間は支払われるべきですか?[閉まっている]
状況を明らかにするために:私は現在、小さなスタートアップソフトウェア会社で働いている2人のプログラマーのうちの1人です。私の仕事の一部は、私が現在なじみのないWeb開発フレームワークを学ぶことを必要とします。私は時間ごとに支払われます。 ですから、質問は次のとおりです。1日のうち何時間もドキュメントやチュートリアルを読んで、私たちの製品のために積極的に開発していないこの時間にお金を払うことは完全に倫理的ですか?または、この学習の大部分を自宅で行うか、営業時間外に行う必要がありますか。

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