ソフトウェア工学

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

5
Pythonは解釈またはコンパイルされますか?
これは、インタープリターおよびコンパイルされた言語について読んでいたときの不思議です。 ソースコードは実行時にインタープリターによって処理されるため、Rubyは間違いなくインタープリター言語です。 それどころか、Cはコンパイルされた言語であり、マシンに応じて最初にソースコードをコンパイルしてから実行する必要があります。これにより、実行速度が大幅に向上します。 Pythonに来ました: Pythonコード(somefile.py)をインポートすると、同じディレクトリにファイル(somefile.pyc)が作成されます。インポートはpythonシェルまたはdjangoモジュールで行われるとしましょう。インポート後、コードを少し変更し、インポートされた関数を再度実行して、まだ古いコードが実行されていることを確認します。これは、*。pycファイルはCファイルのコンパイル後に作成された実行可能ファイルに似たコンパイル済みのpythonファイルですが、*。pycファイルを直接実行することはできません。 pythonファイル(somefile.py)が直接実行された場合(./somefile.pyまたはpython somefile.py)、. pycファイルは作成されず、コードは解釈された動作を示すように実行されます。 これらは、Pythonコードが新しいプロセスにインポートされるたびにコンパイルされ、直接実行されたときに解釈されながら.pycを作成することを示唆しています。 それで、どのタイプの言語と考えるべきですか?解釈またはコンパイル?そして、その効率は、インタープリター言語およびコンパイル言語と比較してどうですか? wikiの解釈言語ページによると、それは仮想マシンコードにコンパイルされた言語としてリストされていますが、それはどういう意味ですか?

19
コーディングスキルを向上させるにはどうすればよいですか?[閉まっている]
質問を始める前に、私について少し説明します。 私はコンピューターサイエンスの学部生で、Javaが私の主要なコーディング言語です。 私の大学の基本的な問題は、教育基準です。理論的な知識だけでなく、コーディングの知識を学生に教えることを心配する人はいません。 その結果、大学の仲間のほとんどはプログラミングをまったく理解していません。 従来のプログラミング環境から抜け出すことができなかったため、コーディングがある程度制限されています。 プログラミング/コーディングスキルを開発および拡張できる方法は何ですか。 また、同じソースを提案できますか? 編集:コーディングスキルの開発を示唆する情報源。
76 coding 

6
一時ファイルは/ tmpまたは現在の作業ディレクトリに保存する必要がありますか?
一時ファイルを生成する必要があるプログラムがあります。クラスタマシン用に書かれています。 これらのファイルをシステム全体の一時ディレクトリ(例:)に保存すると/tmp、一部のユーザーは、/ tmpへの適切なアクセス権がないためにプログラムが失敗したと訴えました。しかし、これらのファイルを作業ディレクトリに保存すると、それらのユーザーは、これらの不思議なファイルを見たくないと不満を漏らしました。 どちらがより良い習慣ですか?に保存するの/tmpが正しいアプローチであると主張し、失敗を「意図したとおりに動作する」として防御する必要があります(つまり、適切な許可/アクセスを管理者に依頼します)。

14
算術オーバーフローが無視されるのはなぜですか?
お気に入りのプログラミング言語で1〜2,000,000のすべての数値を合計しようとしたことがありますか?結果は手動で簡単に計算できます。2,000,001,000,000は、符号なし32ビット整数の最大値の約900倍です。 C#が出力される-1453759936-負の値!そして、Javaも同じことをしていると思います。 つまり、デフォルトでは算術オーバーフローを無視する一般的なプログラミング言語がいくつかあります(C#には、それを変更するための非表示オプションがあります)。それは私には非常に危険に見える動作であり、Ariane 5のクラッシュはそのようなオーバーフローによって引き起こされたのではありませんか? では、このような危険な動作の背後にある設計上の決定は何ですか? 編集: この質問に対する最初の回答は、チェックの過剰なコストを表しています。短いC#プログラムを実行して、この仮定をテストしましょう。 Stopwatch watch = Stopwatch.StartNew(); checked { for (int i = 0; i < 200000; i++) { int sum = 0; for (int j = 1; j < 50000; j++) { sum += j; } } } watch.Stop(); Console.WriteLine(watch.Elapsed.TotalMilliseconds); 私のマシンでは、チェックされていないバージョンは4125msかかりますが、チェックされたバージョンは11015msかかります。つまり、チェック手順は、数値を追加するのにほぼ2倍の時間がかかります(元の時間の合計3倍)。しかし、10,000,000,000回の繰り返しで、チェックにかかる時間はまだ1ナノ秒未満です。それが重要な状況があるかもしれませんが、ほとんどのアプリケーションでは、それは重要ではありません。 編集2: サーバーアプリケーション(いくつかのセンサーから受信したデータを分析するWindowsサービス)を/p:CheckForOverflowUnderflow="false"パラメーターで再コンパイルし(通常、オーバーフローチェックをオンにします)、デバイスに展開しました。Nagiosモニタリングは、平均CPU負荷が17%に留まったことを示しています。 これは、上記の構成例で見つかったパフォーマンスヒットは、アプリケーションにとってまったく無関係であることを意味します。

3
PythonがC ++ではなくCで書かれているのはなぜですか?
でPythonのチュートリアル 1は、Pythonのオリジナル実装はCであることを読み取ることができます。 一方、Cで書かれたPython実装(...) PythonがC ++ではなくCで作成されたのはなぜですか? この決定の背景にある理由を知りたいのですが、その答えは歴史的な参考文献によって支持されるべきです(意見に基づくものではありません)。

7
「電話番号」、「バイク」、「波長」などの単語のラクダケースの書き方
キャメルケース構文を一部の変数名に適用する方法を理解するのに問題があります。 たとえば、キャメルケースで「電話番号」のような単語を正しく書くにはどうすればよいですか?それphoneNumberかphonenumber?同様に、「ユーザー名」の場合、それusernameまたはuserName? 私はそれはのようなキャメルケースに右見ていないと思うmotorCycle、passWord、sunDay、setUpまたはwaveLengthこれらのことからちょうど1ワードずつです。ハッシュテーブルは1ワードで、ハッシュマップは2ワードであるため、最後のケースではキャピタルを使用せずにキャメルケースでhashMapも呼び出される理由だと思いhashtableます。 しかし、オートバイに色がある場合はmotorcycleColor、単語が連結されているためでしょうか?正しいか、それがあるべきであるということであるphoneNUmber、waveLength、sunBlockとさえsunDay週の日曜日のために? たとえば、メソッドが呼び出されているgetISOCountriesときに呼び出されるのは、HttpHeadersたとえば、String camelCaseString = dog.toCamelCase()またはのようなメソッドがある場合に何が小文字になるかが明確ではないからinterface CamelCaseです。 関連:https : //english.stackexchange.com/questions/889/when-should-compound-words-be-written-as-one-word-with-hyphens-or-with-spaces

9
もはや維持したくない人気のあるプロジェクトにどのように対処する必要がありますか?
私は大規模な非技術的なユーザーベースを持つプロジェクトのメンテナーです。約4年間メンテナンスを続けており、要求に応じて新しい機能を追加しています。 今すぐ他のプロジェクトに移り、このアプリケーションの開発を停止したいと思います。ユーザーの非技術的な性質のため、過去にはコードの貢献はほとんどありませんでした。私の代わりにプロジェクトを引き継ぐ他の誰かを見つけることができるとは思わない。 バグ、問題、機能のリクエスト-これらはまだ寄せられています。私はまだメールを受け取っていますが、それらを無視すべきかどうか、アプリケーションで作業していないこと、または返信すべきかどうかはわかりません。特定の場合にのみメールを送信します。 このプロジェクトを「放棄」するための最良の方法は何ですか?それでもユーザーはアプリケーションを使用できますか? 更新(2016年7月)-計画どおりに進みませんでした。私はREADMEで発表し、すぐに、より本質的な貢献を受け取り始めました。バグ修正、機能、ドキュメント、問題アクティビティを含むプルリクエスト。それ以来、プロジェクトは「活力を取り戻した」と感じており、新しいプロジェクトと一緒に喜んでそれを維持しています。協力者もいます。推測では、それはプロジェクトの私の見解に影響を与えていた種類の貢献だったかもしれません。

6
すべての関数型プログラミングの設計パターンはどこにありますか?[閉まっている]
オブジェクト指向プログラミングの文献には、設計パターンがたくさんあります。オブジェクト指向プログラミングに関するほとんどの本は、工場やデコレーターのようなパターンを設計するために1〜2章を捧げています。それでは、関数型言語の同等のパターンとは何ですか?なぜそれらについて本を書いていないのですか?関数型言語について、デザインパターンの必要性を取り除く特別なものはありますか?

12
バージョン管理を使用しているときに、すべてのコードファイルに「変更ログ」を含めることは重要ですか?
バージョン管理システムにより、コードのいたるところに「変更ログ」を貼る必要がなくなるという印象を受けました。私は頻繁に変更ログの継続的な使用を見てきました。これには、ファイルへの変更のためにブロックされた大きなセクションを含むストアドプロシージャの開始時の大きな長いブロックが含まれます。 // 2011-06-14 (John Smith) Change XYZ to ABC to fix Bug #999 そして: // 2009-95-12 (Bob Jones) Extracted this code to Class Foo // <commented-out code here> 私に説明されたように、この理由は、VCSログをふるいにかけるのに時間がかかりすぎて、誰が何をなぜ変更したかを見つけようとしている間、コードファイル自体に関連する上部または近くにそれを持っているからです誰が何をいつ変更したかを簡単に確認できます。私はその点を見ていますが、冗長であり、「VCSを適切に使用する方法が本当にわからないので、そのようなことは一切気にしません。 どう思いますか?コメントとログの両方を使用していますか?ただのログ?John Smithが1週間前にXYZをチェックするようにメソッドを変更したコードブロックの上に表示されると、Diffツールでログを検索してコードファイルを比較する代わりに、コーディングが簡単になりますか? 編集:SVNを使用しますが、基本的にはリポジトリとしてのみ。ブランチ、マージ、ログ+ストレージ以外はありません。

17
「賢い」コードを書かないように自分を訓練する方法は?[閉まっている]
s で新しいトリックを披露したり、3つの異なる手順を一般化したりする必要があるときの気持ちを知っていExpressionますか?これはArchitecture Astronautの規模である必要はなく、実際に役立つかもしれませんが、他の誰かが同じクラスまたはパッケージをより明確で率直な(そして時には退屈な)方法で実装することに気づかずにはいられません。 私はしばしば問題を過剰に解決することによってプログラムを設計することに気づきました。時には故意に、時には退屈から。どちらの場合でも、反対の証拠を見るまで、私のソリューションは非常に透明でエレガントであると正直に信じていますが、通常は手遅れです。また、コードの重複よりも文書化されていない仮定を好み、単純さよりも賢いことを好む私もいます。 何をするために行うことができ、「cleverish」のコードを記述する衝動に抵抗してたときにベルリングをすべきであること、私はそれは間違ってやっていますか? 私は今、経験豊富な開発者のチームと協力しているため、問題はさらに押し進められています。スマートコードを書くという私の試みは、時間が優雅さの幻想を払拭した後でも自分にとっては愚かに思えます。

18
開発者チームを奨励する最良の方法は何ですか?[閉まっている]
私は前もって人々がこの質問を見て、「無料のレッドブル」を考えることを知っています。しかし、実際には、開発者への報酬を会社の長期目標に結び付けるための最良の方法を探しています。 たとえば、チームが同じソフトウェア製品で作業していると仮定すると、最終製品の状態に基づいて各開発者に報いるのが最善でしょうか?彼らは結局のところチームであり、これは彼らがすべて製品を出すという共通の目標に向かって確実に取り組んでいることを保証します。ただし、一部の開発者は他の開発者よりも強く、一部の開発者は他の開発者よりも一生懸命働くという事実を無視しています。 あなたの経験では、開発者のチームにインセンティブを与える最良の方法は何ですか? **更新 この質問に対して私が受け取った強い反応に本当に感謝しています。映画「Inside Job」を見た後、最近の経済危機の原因について質問したいと思いました。この映画が引用している主な要因の1つは、ウォールストリートに貧弱なインセンティブシステムがあることです。 これと同じ概念が開発者にも当てはまると思います。製品を可能な限り迅速にリリースすることには短期的な利益がありますが、その製品にバグがある場合や、他の環境にうまく移植できない場合は、長期にわたる大きな頭痛の種になります。 理想的には、どの業界のどの企業でも、製品の長期安定性を保証するインセンティブシステムが必要です。
75 management 

14
最適化が時期尚早ではなく、したがって悪ではないのはいつですか?
「時期尚早の最適化はすべての悪の根源」は、私たちのほとんどすべてが聞いたり読んだりしたものです。どのような最適化が時期尚早ではないか、つまりソフトウェア開発のすべての段階(高レベル設計、詳細設計、高レベル実装、詳細実装など)でどのような最適化がどの程度最適化されるのかを知りたいのですが、それはダークサイドに渡ることはありません。

16
最近雇われた従業員として変更を提案する方法は?[閉まっている]
私は最近、大企業に雇われました(数千人規模のアイデアを与えるため)。彼らは、私の厳格さのために、そして私は若さにもかかわらず(私は25歳です)、C / C ++プログラマーとして経験したので、私を雇ったと言いました。 今、私はシステム全体が古く、しばしば時代遅れの技術を使用していることがわかります。命名規則はありません(ファイル、関数、変数など)、バージョン管理を使用せず、例外やポリモーフィズムを使用しません。ほとんどの人が情熱を失ったようです(一部は30歳です) )。 いくつかの変更を提案したいのですが、私は「彼が収まりたくないからといってすべてを変えたい新しい男」になりたくありません。「はめ込む」ことを試みましたが、実際には、使用することを余儀なくされている貧弱なツールのために、午後に行うことを行うには1週間かかります。私の同僚の多くは、人々が最近使用している新しい「モノ」やテクニックを決して見ません。あきらめたようです。状況は本当にイライラします。 あなたは今までに同じような状況にあったことがありますか?もしそうなら、あなたは私にどんなアドバイスをしますか?ここで黒羊にならずに物事を変える微妙な方法はありますか?それとも、私も自分の情熱とエネルギーをあきらめる必要がありますか? ありがとうございました。 更新 あなたの貴重なアドバイスに従って、私は変更を提案することができ、Subversionを作成およびデプロイする必要のあるチームを担当しています:D皆様に感謝します! 6ヶ月後 私は辞め、はるかに面白い環境を見つけました。より良い給料と、より興味深い課題がありました。私は何にも戻りません。

7
専用ビルドマシンの目的は何ですか?
前回のビルドサイクルが不十分な展開につながる多くの状況のた​​め、私はオフィスでキャンペーンを行い、専用のビルドマシンを使用して将来のすべての展開を実行し、上司はこの提案を受け入れました。 ただし、オフィスで実際のマシンを使用する代わりに、1台のマシンを他の複数のグループと共有する必要があります。また、必要な情報をすべて入力してオフィスを出て階段を降りる手間がかかります。単純なビルドを実行するためだけに別のオフィスに移動することは、なぜ私が最初にこれを提案したのか疑問に思います。 別個のビルドマシンを使用するというアイデアは、元々、自分のローカルで記述されたコードを他の複数の開発者のコ​​ードから分離し、マシン上にあったハイジャックされたファイルを展開から分離することでした。また、ClearCaseファイル管理システムに対する懸念の高まりを解決することも目的でした。これは、「依存関係がある」別のアクティビティも含めない限り、特定のビルドアクティビティの展開を拒否することがよくあります。 実際にこのプロセスを進めているので、ビルドマシンを使用する目的全体を誤解していないかどうか、そしてこのマシンをテスト、ステージング、および実稼働環境へのコード展開にのみ使用しているため、私たちの個人的な開発者テストの展開ではなく、それが何らかの目的に役立つかどうかはわかりません。 それでは、ビルドマシンを使用する実際の理由は何ですか?また、正しく使用することに近づいていますか?

2
「影付き」Java依存関係とは何ですか?
JVM開発者はこちら。最近、私はIRCチャットルームや、自分のオフィスでさえ、いわゆる「影付き」Javaライブラリについて冗談を言っています。使用のコンテキストは次のようになります。 「このように、XYZに「シェーディング」クライアントを提供します。」 完璧な例は、HBaseのこのJiraの問題です。「シェーディングされた依存関係を持つクライアントアーティファクトを公開する」 だから私は尋ねる:シェーディングされた JAR とは何ですか、「シェーディングされた」とはどういう意味ですか?
75 java  libraries  jvm 

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