ソフトウェア工学

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

8
関数をヘッダーファイルまたはソースファイルに文書化する方が良いでしょうか?
「ソース」ファイルと「ヘッダー」ファイル(主にCとC ++)を区別する言語では、ヘッダーファイルに関数を文書化する方が適切です。 (CCANから盗用) /** * time_now - return the current time * * Example: * printf("Now is %lu seconds since epoch\n", (long)time_now().tv_sec); */ struct timeval time_now(void); またはソースファイルで? (PostgreSQLから盗用) /* * Convert a UTF-8 character to a Unicode code point. * This is a one-character version of pg_utf2wchar_with_len. * * No …
86 c++  c  headers 

19
OCamlがもっと人気がないのはなぜですか?
私は常にCであることを聞いた組み込みシステム、または最大速度で実行する必要がある何のために使用する選択した言語。主にポインター演算が好きではなく、言語がアセンブラーの上のラングにすぎないため、私はCが好きではありませんでした。 一方、ML言語は機能的で、ガベージコレクションされた言語であり、OCamlにはオブジェクトモデルさえありますが、Cと同じくらい高速であるという評判があります。ML言語は、高レベルで簡潔なコード、それでも高性能アプリケーションを書くために必要な速度を保持します。 特にOCamlは、組み込みデバイス、グラフィックスドライバー、オペレーティングシステムなど、Cが従来使用されていた場所ならどこでも使用できます。すべての権利により、OCamlは今までに世界を支配していたはずですがそれを使用しました。 これは主観的な質問ですが、なぜOCamlやMLの他の言語はそれほどあいまいなままで、Cや他の言語が普及したのでしょうか?
86 c  ocaml 

22
OOPは自然ではないので難しいですか?
多くの場合、OOPは自然に人々が世界について考える方法に対応していると聞きます。しかし、私はこの声明に強く反対します:私たち(または少なくとも私は)遭遇するものの間の関係の観点から世界を概念化しますが、OOPの焦点は個々のクラスとその階層を設計することです。 日常生活では、OOPの無関係なクラスのインスタンスになるはずのオブジェクト間に、ほとんどの関係とアクションが存在することに注意してください。このような関係の例は次のとおりです。「私の画面はテーブルの上にあります」。「私(人間)は椅子に座っています」; 「車が道路にあります」; 「キーボードで入力しています」。「コーヒーマシンは水を沸かす」、「テキストはターミナルウィンドウに表示される」。 動詞が2つのオブジェクトに作用して何らかの結果/アクションを生成するアクション(関係)である2価(たとえば、「私はあなたに花を贈った」など)の動詞の観点で考えます。フォーカスがアクションであり、2つ(または3つ)の文法上の】オブジェクトが等しく重要です。 それとは対照的に、最初に1つのオブジェクト(名詞)を見つけて、別のオブジェクトに対して何らかのアクションを実行するように指示する必要があるOOPとは対照的です。考え方は、名詞で動作するアクション/動詞から名詞で動作する名詞にシフトします。これは、すべてが受動的または再帰的な音声で言われているようです。たとえば、「テキストはターミナルウィンドウで表示されています」。または、「テキストは端末ウィンドウに表示されます」。 焦点が名詞にシフトされるだけでなく、名詞の1つ(文法主題と呼びましょう)には、他の名詞(文法オブジェクト)よりも高い「重要性」が与えられます。したがって、terminalWindow.show(someText)とsomeText.show(terminalWindow)のどちらを言うかを決定する必要があります。しかし、実際にshow(terminalWindow、someText)を意味するのに、操作に影響を与えることなく、このような些細な決定を人々に負わせるのはなぜですか?[結果は操作上重要ではありません。どちらの場合もテキストはターミナルウィンドウに表示されますが、クラス階層の設計において非常に深刻な場合があり、「間違った」選択は複雑で保守が難しいコードになります。 したがって、OOP(クラスベース、シングルディスパッチ)を行う主流の方法は難しく、それは非自然的であり、人間の世界に対する考え方に対応していないためです。CLOSの汎用メソッドは私の考え方に近いものですが、残念ながら、これは一般的なアプローチではありません。 これらの問題を考えると、OOPを行う現在の主流の方法が非常に一般的になったのはどうしてですか。そして、もしあれば、それを退位させるために何ができるでしょうか?

3
Web SQLデータベースが非推奨になったのはなぜですか?
ハイブリッドAndroidアプリを作成しています。 最初にlocalStorageを使用することに決めました。2日間を費やした後、非常に奇妙であることに気づいたため、削除しました。 次に、indexedDBを選択しました。今日の1日を費やして実際にGoogle Chromeで出力を取得した後、AndroidアプリのWebView内で実行されていません。 また、Web SQLデータベースは廃止されたため、まったく使用しませんでした。とにかく、PhoneGapはまだWeb SQLを使用しており、Androidのブラウザーがそれをサポートしていることに気づきました。 そもそもWeb SQLが廃止されたのはなぜですか?また、今すぐWeb SQLを使用することをお勧めしますか?

4
TypeScriptとDartの違い[終了]
マイクロソフトは最近、JavaScriptに似た新しいプログラミング言語であるTypescriptを発表しました。少し前に、パフォーマンス、スケーラビリティなどのJavascriptに関連する問題を解決するためにGoogleが作成した新しいプログラミング言語であるDartについて聞きました。 両方の新しい言語の目的は私には同じように見えます。 言語の目的は同じですか? それらの本当の違いは何ですか?
85 dart  typescript 

20
コードの行数を減らすことはどれほど重要ですか?
私はJ2SE(コアjava)で作業するソフトウェア開発者です。 多くの場合、コードレビュー中に、コードの行数を減らすように求められます。 冗長なコードを削除することではなく、コード内の少ない行で同じことを行うことに焦点を当てたスタイルに従うことです。行の数を増やすことを意味する場合でも、コードを明確にすることを信じています。 物事を行う正しい方法は何だと思いますか? LOC(コード行)が小さい場合、コードにどのような影響がありますか?LOCの数値が大きい場合、コードにどのような影響がありますか? ウェブサイトからの例: "javaranch"- public static void happyBirthday(int age) { if ((age == 16) || (age == 21) || ((age > 21) && (((age % 10) == 0) || ((age % 25) == 0)))) { System.out.println("Super special party, this year!"); } else { System.out.println("One year older. Again."); …

10
ゲッターとセッターをどのように回避しますか?
私は、オブジェクト指向の方法でクラスを設計するのに苦労しています。オブジェクトは、データではなく動作を公開することを読みました。したがって、ゲッター/セッターを使用してデータを変更するのではなく、特定のクラスのメソッドは「動詞」またはオブジェクトで動作するアクションでなければなりません。たとえば、「Account」オブジェクトには、etcなどWithdraw()でDeposit()はなくメソッドなどがありますsetAmount()。ゲッターメソッドとセッターメソッドが悪である理由を参照してください。 たとえば、Name、DOB、Tel、Addressなど、顧客に関する多くの情報を保持するCustomerクラスがある場合、これらすべての属性を取得および設定するゲッター/セッターを回避するにはどうすればよいでしょうか?すべてのデータを取り込むためにどのような「動作」タイプのメソッドを記述できますか?

17
私のネガティブなインターンシップの経験は現実の世界を代表していますか?[閉まっている]
インターンとしての私の現在の経験が実際の業界の代表であるかどうか、私は興味があります。 背景として、私は2つのコンピューティング専攻と主要な大学の数学専攻の大部分を経験しています。私はすべてのクラスをエースし、それらすべてを崇拝してきたので、私はプログラミングがひどくないと思いたいです。私は大手ソフトウェア会社の1つとインターンシップを取得しましたが、途中でコードの品質が非常に低いことにショックを受けました。コメントは存在せず、すべてスパゲッティコードであり、間違っている可能性のあるものはすべてさらに悪いものです。私はたくさんの個別指導/テイニングを行ったので、悪いコードを読むことに非常に慣れていますが、私が見ている主要な業界製品はそれのすべてに勝っています。私は1日10〜12時間働いていますが、どこにでも行くような気がしません。文書化されていないAPIを見つけようとしたり、(完全に文書化されていない)製品のその他の部分の動作を決定しようとする無限の時間。私はこれまで毎日仕事を嫌う仕事を辞めてきましたが、これが私の人生の残りの部分であるかどうかを必死に知りたいです。 インターンシップに短いストローを描いたのか(馬鹿げた大きな給料は、それが低品質のポジションではないことを意味します)、またはこれは現実の世界のようなものですか?

4
命令型プログラミング、手続き型プログラミング、構造化プログラミングの違いは何ですか?
(書籍、ウィキペディア、SEに関する同様の質問など)を調査することで、命令型プログラミングは主要なプログラミングパラダイムの1つであり、コンピューターが実行する一連のコマンド(またはステートメント)を記述する(つまり、特定のアクションを実行するように多くの順序を指定するため、「命令型」という名前が付けられます)。ここまでは順調ですね。 一方、手続き型プログラミングは、命令型プログラミングの特定のタイプ(またはサブセット)であり、プロシージャ(関数)を使用してコンピューターが実行するコマンドを記述します。 最初の質問:手続き型ではない命令型プログラミング言語はありますか?言い換えると、プロシージャなしで命令型プログラミングを使用できますか? 更新:この最初の質問には答えられているようです。言語は、手続き的または構造化されていなくても不可欠です。例は、純粋なアセンブリ言語です。 次に、構造化プログラミングもあります。これは、命令型プログラミングの別のタイプ(またはサブセット)と思われ、GOTOステートメントへの依存を取り除くために登場しました。 2番目の質問:手続き型プログラミングと構造化プログラミングの違いは何ですか?あなたは一方を他方なしで持つことができますか?画像のように、手続き型プログラミングは構造化プログラミングのサブセットであると言えますか?

6
ファイル名の一部としてタイムスタンプを使用するための「標準」形式[非公開]
ファイル名の一部として日付/時刻を使用する標準形式を検索しましたが、何も思いつきませんでした。 私の質問は2つの部分です。 タイムスタンプを使用しています 一意を強制する ファイル名に悪い習慣ですか? 作成日から時間を取得し、ファイル名(file0001.bak、file0002.bakなど)をシリアル化できますが、タイムスタンプを含めるだけでなどのファイル操作を実行できますmv 2011-01* somewhere/。このタイプのネーミングシステムを使用することには欠点がありますか? 私が使用している形式はですYYYY-mm-dd_HH-MM-SS。 使用すべきより良い形式はありますか? この形式では、ファイルシステムの互換性、str_to_date_parsingの問題などを考慮する必要がありますか? ありがとう! 編集: 単一のユーザーがcronjobを使用してバックアップを生成するため、一意性を強制するビットは省いた方がよいかもしれません(同時実行の問題はないはずです)。

15
ソフトウェア業界の規制[終了]
数年ごとに、ソフトウェア業界に対してより厳しい規制を提案する人がいます。 このIEEEの記事は、最近この問題について注目を集めています。 物理的または金銭的なリスクに公衆をさらすシステムのプログラムを作成するソフトウェアエンジニアが、自分の能力をテストすることを知っていれば、コードの欠陥と失敗を減らし、掘り下げて命を救うかもしれません。 私はこれの価値とメリットについて懐疑的です。私の考えでは、それを提案した人たちが土地をつかんでいるように見えます。 私にとってそれを締めくくる引用は次のとおりです。 試験は、主題の習熟度ではなく、基本的な知識をテストします なぜなら、大きな失敗(たとえばTHERAC-25)は複雑で微妙な問題であり、「基本的な知識」ではそれを防ぐのに十分ではないからです。 現地の問題を無視する(一部の管轄区域におけるタイトルエンジニアの既存の保護など): 目的は高貴です-quacks / charlatans 1を避けて、ソフトウェアを購入する人にその区別をより明確にします。ソフトウェア業界のより厳しい規制は、当初の目標を達成することができますか? 1まさに、医療専門職の規制が意図されていたとおりです。
85 legal  profession 

16
チーム内の遅くて熱心な同僚にどのように対処しますか?[閉まっている]
私は新しいプロジェクトに取り組んでいます。プロジェクトは次のように機能します。エンドユーザーはリンクを使用してwebappにアクセスし、ネットワークに複数のシステムを追加して、その特定のシステムの詳細を管理できます。私の部分には、フロントエンドとWebサーバーが含まれます。これは、Pythonで行われます。私のpythonは、実際には完全にcおよびc ++で実行される別のプロジェクトと通信します。c / c ++プロジェクトは、すべての機能を実行するメインアプリです。私のpythonはそれにユーザーリクエストを送信し、それに対するレスポンスをユーザーに表示します。 私は自分の仕事に非常に精通しており、まもなく終了します。それはそれで多くの仕事ではないので。そして、私は仕事が大好きな人です。私はほとんどの時間をオフィスで過ごし、眠くなるまで家に帰りません。 c / c ++アプリは、5年以上の経験があり、私よりもずっと速く仕事をすることができる別の同僚によって管理されていますが、彼は決してそれを行いません。彼はそれをしたくないかもしれません。私のpythonが通信したり、間違った値を返したりすると、彼のアプリは頻繁にクラッシュします。バグだらけです。私のアプリはそれに依存しているため、作成に苦労しています。バグを修正する代わりに、彼は私の仕事を遅くするように頼みます。彼はマネージャーに私の仕事には多くの時間が必要だと言うように頼みます。彼は私にマネージャーをだますように頼み、私に彼のようにゆっくりと働かせることさえしている。 プロジェクトミーティング中に、マネージャーがバグについて彼に尋ねると、彼はすべてを修正し、それがうまくいくと言います。彼は私の同僚なので、マネージャーには何も言えませんでした。私たちはマネージャーではなく同僚とほとんどの時間を過ごすので、明らかにマネージャーよりも同僚と良い関係を築く必要があります。 マネージャーが彼に理由を尋ねると、彼はマネージャーに彼について不平を言ったと思うかもしれないので、私はこれについてマネージャーに何も伝えることができません。そして彼は会議で嘘をつき続けます。そして、彼はバグをゆっくり修正するので、私の作業も遅くなります。今、私は私のアプリのフロントエンド部分に取り組み、その間に彼がプロジェクトを安定させることができるようにそれを仕上げることを考えました。今、彼はマネージャーに、私のフロントエンド部分には多くの作業が必要であり、プロジェクトを下にドラッグできるようにするために、より多くの時間を必要とすることを伝えるよう求めています。悲しいことに、実際のマネージャーは米国に行っているため、一時的なマネージャーがいて、この男はプロジェクトについてあまり知らないので、c、c ++は彼をだます。 誰が私にこれに対処する方法を提案できますか?私はプロジェクトをすぐに終わらせたかった。彼との良好な関係を維持することによって、どうすれば彼を働かせることができますか コメントへの応答: 彼が本当に故意に会社を誤解させている場合は、経営陣に報告する必要があります。 私はこの会社に新しく、他の男は長年そこにいました。そして、同僚について知り始めたばかりです。私が直接行って彼に苦情を申し立てた場合、他の同僚と良い関係を築くことができるとは思いません。彼でさえ、彼らを惑わす力を持っています。私は彼が悪い男だとは言っていません、彼は仕事をすることができますが、彼はそれをしていません。 あなたの会社にはどんな種類のバグ追跡システムもありませんか? ここには、実際のバグ追跡システムはありません。会社はできるだけ早くプロジェクトを終了させ、QAに提供しようとします。そして、QAによって報告されたバグを修正します。 企業が従業員にストック/オプションまたは何らかの所有権を与える必要があるのはこのためです。そうすれば、文字通り「あなたは私に金銭的成長を犠牲にしている...お金をもうけたくないですか?」と文字通り伝えることができます。 会社にはストックオプションがあり、2500株を与えてくれました。ほとんどが彼も持っていたでしょう。 年功序列には疑いの余地があります。最初に彼に話しかけ、問題を理解する必要があります。彼は彼の深さから外れているかもしれません、あなたは彼を助けることができるかもしれません、あなたが気づいていない変数が簡単にあるかもしれません。今では難しいかもしれませんが、銃を跳ぶことで状況を簡単に悪化させることができます。 彼のアプリは一度に複数のリクエストを処理していなかったため、キューを使用して、自分に送信したリクエストを処理していました。私も彼に私のアイデアのいくつかを提案しました。彼はすでにこれらのアイデアを持っている、そしてそれらを実行するだろうと言った。彼の説明は、「すべてを行うには一定の時間が必要であり、これは完了するのに2年を必要とする可能性のあるプロジェクトであり、2か月で完了するように求められます」。このバグのため、最初の数週間はコーディングに苦労していました。しかし今、彼はそれを修正しました。しかし、彼はユーザーリクエストに単一のキューを使用しており、一度に1つのリクエストを処理するため、アプリの速度が低下しています。 この間ずっとQAは何をしていますか?プロジェクトのステータスを報告/確認しないのはなぜですか? マネージャーは、QAにいつ提出するかを決定する人です。現在のところ、QAにはまだ提供されていません。彼は今月末までにそれを与えるべきだと言った。
85 teamwork 

17
仕事を家に持ち帰るのをどのように止めますか?[閉まっている]
プログラミングは非常に脳の仕事であり、私が抱えている最大の問題の1つは、仕事を持ち帰ることです。とても簡単です。考える機会が得られるたびに、私の心は仕事関連の問題に自然にさまよいます。私の他の多くのことは、精神的に刺激的ではなく、彼らが言うように、自然は空虚を嫌うものです。残念ながら、仕事について常に考えることは私にストレスを与え、一日の終わりにそのスイッチをひっくり返すことはできません。それは私にかなりの不眠症を引き起こしています。 さらに悪いことに、私の友人のほぼ全員が同僚であり、私たちの会話の多くは、私がその週を忘れないようにするのにほとんど役に立たない。彼らは一般的に周りにいる楽しい人であり、雌犬フェストが終わると、私たちはすべて仕事について話すのをやめますが、仕事関連の問題について忘れることを私に促すことはほとんどないと言うだけで十分です。 それでは、一日の終わりにプログラミングプロジェクトを後にするために何ができますか?それとも失敗した場合、仕事以外の時間を費やすためにどのような種類の精神的に刺激的な活動を行うことができますか(ストレスがなく、心を変える薬を使用しません)?

11
静的は単体テストでは普遍的に「悪」であり、そうである場合、Resharperがそれを推奨するのはなぜですか?[閉まっている]
私は、C#.NETで静的であるユニットテスト(モック/スタブ)依存関係に3つの方法しかないことを発見しました。 ほくろ TypeMock ジャストモック これらの2つが無料ではなく、1つがリリース1.0に達していないことを考えると、静的なものをモックするのは簡単ではありません。 それは静的な方法とそのような「悪」(ユニットテストの意味で)を作りますか?もしそうなら、なぜ再シャーパーは私に静的なもの、静的なものを作ることを望んでいますか?(再シャーパーも「悪」ではないと仮定します。) 明確化: メソッドのユニットテストを行い、そのメソッドが別のユニット/クラスで静的メソッドを呼び出す場合のシナリオについて説明しています。単体テストのほとんどの定義では、テスト対象のメソッドが他の単体/クラスの静的メソッドを呼び出すようにした場合、単体テストではなく、統合テストになります。(便利ですが、単体テストではありません。)

30
新しい会社で働くかどうかを決めるとき、あなたの取り決めは何ですか?[閉まっている]
あなたが会社で働くことを決める前に、会社についてどんな質問をするべきかをカバーしたことを知っています。しかし、あなたは答えをどうしますか? つまり、ディールブレーカーとは何だと思いますか?すなわち、他のすべてが素晴らしかったとしても、あなたがそこで働かないであろう会社についてそれほどあなたを怖がらせるのは何ですか? たとえば、バージョン管理を使用していないと言われたら、そこで働きません。物語の終わり。

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