ソフトウェア工学

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

12
なぜ関数型プログラミングは業界でもっと人気がないのですか?今流行ってる?[閉まっている]
大学での4年間、私たちはいくつかの関数型プログラミング言語で多くの関数型プログラミングを使用してきました。しかし、私はまた多くのオブジェクト指向プログラミングを使用してきました。実際、自分の小さなプロジェクトを行って最初の仕事を準備するときには、オブジェクト指向言語をより多く使用します。しかし、これらのプロジェクトを行うときは、関数型プログラミング言語でコーディングしたかったことがよくあります。 ただし、仕事を探しているときに、関数型プログラミング言語の知識が必要な仕事を見つけることは非常にまれです。 なぜ関数型プログラミング言語は業界でもっと使われないのですか?最近では関数型プログラミング言語についてかなりのニュースがありますので、関数型プログラミングは今業界で流行しているのでしょうか?

24
プログラマーがMac OS Xを使用または推奨するのはなぜですか?[閉まっている]
私はしばらくの間MacとWindowsの両方で働いてきました。しかし、プログラマーがWindowsやLinuxよりもMac OS Xを熱心に選択する理由を理解するのにまだ苦労していますか? WindowsとLinuxを好むプログラマーがいることは知っていますが、Mac OS Xはプログラマーに最も適していると考えているため、Mac OS Xのみを使用するプログラマーに質問しています。 Mac OS Xは美しいUIを持ち、nixベースであると主張する人もいるかもしれませんが、Linuxはそれを行うことができます。Windowsはnixベースではありませんが、Cocoa / Objective-Cを除くすべてのプラットフォームまたは言語で開発できます。 Mac OS Xでのみ利用可能なアプリケーションですか?それは本当に価値がありますか? iPhoneアプリの開発ですか? Windowsを2年ごとにアップグレードする必要があるためですか(下位互換性は低い)。 マルチメディア/エンターテインメント業界で働いている人々がMac OS Xを使用する理由を理解しています。しかし、Mac OS XがWindowsに比べて強いメリットがあるかはわかりません。Macで毎日開発し、他の何よりもMacを好む場合、MacがWindows / Linuxより優れているというメリットを教えてください。Macでできることは、Windows / Linuxでは同じレベルでは簡単にできないことでしょうか? ここで別のMac対Windowsをしようとはしていません。MacではできるがWindowsではできないことを同じレベルで簡単に見つけようとしましたが、できませんでした。だから、私はいくつかの助けを求めています。

18
なぜ人々はまだJavaが遅いと言うのですか?[閉まっている]
SOや他の場所で長い間、Javaは遅いという評判があります。ジョークから質疑応答における多くのコメントまで、人々はJavaが90年代のJavaの経験だけに基づいて遅いとまだ信じています。 これが私の問題です。Javaが遅いと人々が信じる(ほとんどの)理由を反証しています。小さなこと以外は、Javaは非常に高速です。 それでは、なぜ人々は今でもJavaが高速であると信じることを拒否しているのでしょうか?C / C ++ではないものが遅いというのは彼らの考え方の一部ですか?人々が時間をかけてチェックしないからでしょうか?それは人々が偏っているからでしょうか?
61 java  performance 

5
異なるマイクロサービス間の共有ドメインモデル
2つの異なるマイクロサービスのシナリオを想像してください。1つはサービス内で認証を処理し、もう1つはユーザー管理を処理します。どちらもユーザーの概念を持ち、お互いの呼び出しを通じてユーザーについて話します。 「ユーザー」のドメインモデルはどこに属しますか?それらは両方とも、ユーザーがデータベースのレベルで何であるかの異なる表現を持っていますか?API呼び出しで使用するUserDTOがある場合、両方ともそれぞれのAPIに1つありますか? この種のアーキテクチャの問題に対して一般的に受け入れられているソリューションは何ですか?

3
JavaScriptフレームワーク/ライブラリに、純粋なJavaScriptにすでに存在する関数があるのはなぜですか?
フレームワーク/ライブラリは、ネイティブに既に存在しているのに、なぜ独自のヘルパーを持っているのでしょうか。 jQueryとAngularJSを見てみましょう。独自のeach反復関数があります。 jQuery.each() angular.forEach() しかし、我々は持っていArray.prototype.forEachます。 同様に、 jQuery.parseJSON() angular.fromJson() しかしJSON.parse()、バニラJavaScriptには関数があります。

2
ネストされたディレクティブ間の通信
ディレクティブ間で通信する方法はかなりあるようです。ネストされたディレクティブがあるとします。ここでは、内側のディレクティブが外側に何かを伝える必要があります(たとえば、ユーザーによって選択されます)。 <outer> <inner></inner> <inner></inner> </outer> これまでにこれを行うには5つの方法があります require: 親ディレクティブ innerディレクティブが必要になることがありouter、そのコントローラ上のいくつかのメソッドを公開することができディレクティブを、。だからinner定義では require: '^outer', link: function(scope, iElement, iAttrs, outerController) { // This can be passed to ng-click in the template $scope.chosen = function() { outerController.chosen(something); } } そして、outerディレクティブのコントローラーで: controller: function($scope) { this.chosen = function(something) { } } $emit 出来事 innerディレクティブができる$emitイベント、outerディレクティブは経由して、に応答することができます$on。そのため、innerディレクティブのコントローラーで: controller: function($scope) { …

21
「最高の人材を雇う」ことは、通常のデスクトップアプリケーションプログラミングにとって本当に実用的なアドバイスですか?[閉まっている]
背景として、etabsに似たUIのようなAutoCADを使用して、デスクトップエンジニアリングアプリケーションを実行しています。 本当に私を悩ませているのは、最高の開発者を雇う必要があるかどうかです。まず第一に、私たちは採用に大きな困難を経験しています。私たちが見ているほとんどの履歴書は、単純なCRUDアプリか、実際には多くの筋金入りのプログラミングを伴うとは思わないSharePointのカスタマイズのいずれかです。面接を求める人でさえ、ほとんどがフィボナッチ数列と単純なバイナリ検索を行うことができません。また、候補者がチェックするために辞書を検索する必要がないように、ヒントを出し、問題を明示的に説明するのに十分です。 「フィボナッチ数列」とはどういう意味ですか。 これは私に考えさせられました:はい、計算幾何学/線形プログラミングを行うときはある程度のプログラミング適性が必要であり、ソフトウェアアーキテクチャを設計するとき/または使用するソフトウェアパターンを決定するときはある程度のプログラミング適性が必要ですが、それ以上、私たちのコードの多くは単なる配管コード(私が思うに)であり、プログラミングにある程度精通している人が行うことができます。 今、プログラミングの才能が本当に必要であり、スーパースターの開発者を雇うのが非常に難しいことを考えると、Joelが説いていることとは直接矛盾して、標準を下げてまあまあの人だけを雇いたいです。 どう思いますか? 編集:計算ジオメトリ/線形プログラミングライブラリ全体を書き換える必要はありません。私のアプリケーションに関する限り、あなたがする必要があるのは、手元の問題を適切な計算幾何学/線形プログラミング用語にキャストする方法を知り、既存のライブラリをいつ/どのように使用するかを知ることです。したがって、見かけほど難しくはありません。
61 hiring 


16
分析麻痺に対処するにはどうすればよいですか?
非常に頻繁に、最良の設計決定を選択するときに立ち往生しています。関数定義、制御フロー、変数名などの小さな詳細であっても、選択の利点とトレードオフを熟考するのに異常に長い時間を費やします。 これらの重要でない詳細に時間を費やすことで、多くの効率を失っているように感じます。私の現在のデザインがうまくいかない場合、これらのことを変更できることを心の奥で知っていますが、1つの選択肢をしっかりと決定するのに苦労しています。 この問題に対処するにはどうすればよいですか?

10
関数のオーバーロードのためだけにC ++コンパイラを使用するのは悪い習慣ですか?
そのため、特定のプロセッサでCを使用したソフトウェア設計に取り組んでいます。ツールキットには、CおよびC ++をコンパイルする機能が含まれています。私がやっていることに関しては、この環境で利用可能な動的メモリ割り当てはなく、プログラムは全体的にかなり単純です。言うまでもなく、このデバイスにはプロセッサー能力やリソースがほとんどありません。C ++を使用する必要はまったくありません。 そうは言っても、関数のオーバーロードを行う場所はいくつかあります(C ++の機能)。いくつかの異なるタイプのデータを送信する必要がありますが、printf何らかの%s(またはなんらかの)引数でスタイルの書式設定を使用する気はありません。私はC ++コンパイラにアクセスできない人を何人か見ましたprintfが、私の場合はC ++サポートが利用可能です。 これで、なぜ関数をオーバーロードする必要があるのか​​という疑問を最初から得ることができると確信しています。だから私は今すぐそれに答えようとします。シリアルポートからさまざまな種類のデータを送信する必要があるため、次のデータ型を送信するオーバーロードがいくつかあります。 unsigned char* const char* unsigned char const char 私は、これらすべてを処理する1つのメソッドを持たないことを好みます。私はちょうどそれがシリアルポートを送信する関数を呼び出すときに、私は多くの資源を持っていないので、私はかろうじて行うにはしたくない何でもいいけど、私の送信を。 他の人が私のプログラムを見て、「なぜCPPファイルを使用しているのですか?」だから、それが私の唯一の理由です。それは悪い習慣ですか? 更新 私は尋ねられたいくつかの質問に対処したいと思います: あなたのジレンマに対する客観的な答えは以下に依存します: C ++を使用する場合、実行可能ファイルのサイズが大幅に増加するかどうか。 現在、実行可能ファイルのサイズは、プログラムメモリの4.0%(5248バイトのうち)とデータメモリの8.3%(342バイトのうち)を消費しています。つまり、C ++用にコンパイルしています... Cコンパイラを使用していないため、Cでどのように見えるかわかりません。私はこのプログラムがこれ以上成長しないことを知っているので、リソースがどれだけ限られているかについては、私はそこで大丈夫だと言います... C ++を使用している場合、パフォーマンスに顕著な悪影響があるかどうか。 ある場合、私は何にも気づいていません...しかし、それでも私は完全に理解していないので、私はこの質問をしている理由かもしれません。 Cコンパイラーのみが使用可能な別のプラットフォームでコードを再利用できるかどうか。 私はこれに対する答えが間違いなくノーであることを知っています。別のプロセッサへの移行を実際に検討していますが、より強力なARMベースのプロセッサのみです(事実、C ++コンパイラツールチェーンを持っていることは事実です)。

4
コードの明瞭性が向上する場合、その時点で効果のない関数を呼び出す方が良いでしょうか?
プログラム(iOSアプリ)には3つのビューがあります。一度にアクティブになるのはそのうちの1つだけなので、そのうち2つに対して可視性をオフに設定し、ユーザーがボタンを押したときに可視性を切り替えます。ビューは可視として初期化されるため、メインビューが表示される前にコードで可視性をオフに設定します。 できます [view1 setAlpha:0.0f]; [view2 setAlpha:0.0f]; 2つのビューについてですが、現在は3番目のビュー(アプリの起動時に表示されるはずのビュー)には対応していません。私は [view3 setAlpha:1.0f]; 最初の2つの後、実際には3つのビューがあり、コードを見たときに考えられる2つではないことを明確に保つためだと思います。他のプログラマはどのようにこれを行いますか?それは純粋に好みですか、またはいくつかの規則がありますか? 呼び出しが非常に重い場合は、それが必要でないときに呼び出しを行わない方が明らかに良いですが、私の例のような小さなことについて疑問に思っていました。

7
Cの小さなエラーごとにチェックする必要がありますか?
優れたプログラマーとして、プログラムのすべての結果を処理する堅牢なコードを作成する必要があります。ただし、エラーが発生すると、Cライブラリのほとんどすべての関数は0、-1、またはNULLを返します。 たとえば、ファイルを開こうとするときなど、エラーチェックが必要であることは明らかです。しかし、私はしばしば、printfまたはmalloc必要だと感じないからといって、関数のエラーチェックを無視します。 if(fprintf(stderr, "%s", errMsg) < 0){ perror("An error occurred while displaying the previous error."); exit(1); } 特定のエラーを無視するのは良い習慣ですか、それともすべてのエラーを処理するより良い方法がありますか?
60 c  error-handling 

11
データベース内のテーブル間のリレーションを定義する必要がありますか、それともコードで定義する必要がありますか?
私の経験では、過去に読んだプロジェクトの多くは、データベースにリレーションシップ定義を持たず、代わりにソースコードでのみ定義していました。だから私は、データベースとソースコード内のテーブル間の関係を定義することの利点/欠点は何なのかと思っていますか?より広範な質問は、カスケード、トリガー、手順などの現代のデータベースの他の高度な機能に関するものです...私の考えにはいくつかのポイントがあります。 データベース内: 設計からの正しいデータ。無効なデータを引き起こす可能性のあるアプリケーションエラーを防ぎます。 アプリケーションがデータの整合性をチェックするためにより多くのクエリを作成する必要があるため、データを挿入/更新する際のアプリケーションへのネットワークラウンドトリップを削減します。 ソースコード内: より柔軟。 複数のデータベースにスケーリングする場合は、リレーションがクロスデータベースになることがあるため、より良いです。 データの整合性をさらに制御します。データベースは、アプリケーションがデータを変更するたびに確認する必要はありません(複雑さはO(n)またはO(n log n)(?)です)。代わりに、アプリケーションに委任されます。また、アプリケーションでデータの整合性を処理すると、データベースを使用するよりも詳細なエラーメッセージが表示されると思います。たとえば、APIサーバーを作成するときに、データベースでリレーションを定義すると、何かが(参照されているエンティティが存在しないなど)うまくいかない場合、メッセージとともにSQL例外を受け取ります。簡単な方法は、「内部サーバーエラー」が発生したことをクライアントに500で返すことであり、クライアントは何が問題なのかわかりません。または、サーバーはメッセージを解析して何が間違っているのかを判断できます。これはmyい、エラーが発生しやすい方法です。アプリケーションにこれを処理させると、 他に何かありますか? 編集:Kilianが指摘しているように、パフォーマンスとデータの整合性についての私の論点は非常に間違っています。そこで、自分のポイントを修正するために編集しました。データベースで処理できるようにすることは、より効率的で堅牢なアプローチになることを完全に理解しています。更新された質問を確認して、それについて考えてください。 編集:みんなありがとう。私が受け取った答えはすべて、制約/関係をデータベースで定義する必要があることを指摘しています。:)。もう1つ質問がありますが、この質問の範囲外であるため、別の質問として投稿しました:APIサーバーのデータベースエラーを処理します。いくつかの洞察を残してください。

14
解釈されたコードとコンパイルされたコードのパフォーマンスに関する一般的なステートメントを作成できますか?
企業が使用すべき推奨事項に到達するために、2つのテクノロジーを比較しています。テクノロジーBのコードがマシンコードにコンパイルされる間、テクノロジーAのコードは解釈されます。私の比較では、通訳プロセスの追加のオーバーヘッドがないため、一般にTech Bはより良いパフォーマンスを発揮すると述べています。また、プログラムはさまざまな方法で作成できるため、技術Aで作成されたプログラムは技術Bで作成されたプログラムよりも優れている可能性があると述べています。 レビューのためにこのレポートを提出したとき、レビュー担当者は、一般に解釈プロセスのオーバーヘッドがTech Bのパフォーマンスが優れていると結論付けるのに十分な大きさになる明確な理由はないと述べました。 だから私の質問は、コンパイル/解釈されたテクノロジーのパフォーマンスについて何か言うことができますか?コンパイルされたものが一般的に解釈されたものよりも速いと言える場合、どうすればレビュー担当者に私のポイントを納得させることができますか?

6
オープンソースプロジェクトのコード概要がないのはなぜですか?[閉まっている]
そこには非常に複雑なオープンソースプロジェクトがあり、そのうちのいくつかに私は貢献できると思います、そして私はできると思いますが、単一の理由でコードへの1行を変更するために、エントリーに対する障壁が高すぎます大きなプロジェクトをすべて理解する必要があります。 すべてのコードを読む必要はありません(読んでも十分ではありません)、すべての単一行が行うこととその理由をすべて理解する必要があります。コードはおそらくモジュール化され、コンパートメント化されているためです。その場合でも、プロジェクトの概要を取得して、モジュールの場所、あるモジュールが他のモジュールとインターフェイスする場所、各モジュールが正確に何をするのか、なぜなのか、これらの各イベントがどのディレクトリとファイルで発生するのかを知る必要があります。 私はこのコードの概要を、オープンソースプロジェクトがウェブサイトや外部の人にコードを説明するドキュメントに含めることができるセクションの名前として呼んでいます。私はそれが恩恵を受けるだろうと思う潜在的な貢献者を、彼らは実際、構築できる場所を識別することができるだろうとして、主コーダーは、彼らがすべてを書きながら、彼らの心を再編成することができるだろうとして、関与を、そして役立つだろうユーザーを、彼らは同じように、彼らが経験するバグを理解し、より良い報告をする助けになり、貢献者になることさえあります。 しかし、これらの「コードの概要」の1つを見たことはありません。どうして?これらのようなものがあり、私はそれらを見逃していますか?私が説明しているのと同じ仕事をするものは?または、これは完全に役に立たないアイデアですか?

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