ソフトウェア工学

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

19
より速くコーディングする方法(品質を犠牲にすることなく)[完了]
私は数年間プロのコーダーをしています。私のコードに関するコメントは一般的に同じです。優れたコードを記述し、十分にテストされていますが、より高速になります。 それでは、品質を犠牲にすることなく、より高速なコーダーになるにはどうすればよいですか?この質問のために、私はスコープをC#に制限します。それは主に(楽しみのために)コーディングするものであるか、またはJavaであり、これは多くの点で重要です。 私がすでにやっていること: 仕事を成し遂げる最小限のソリューションを書く 多数の自動化されたテストを書く(リグレッションを防ぐ) あらゆる種類の再利用可能なライブラリを作成(および使用)する よく機能する場所でよく知られた技術を使用する(例:Hibernate) 所定の位置に収まるデザインパターンを使用する(シングルトンなど) これらはすべて素晴らしいですが、時間の経過とともに私の速度が向上しているとは感じません。私がやる私が(でも10%)私の生産性を向上させる何かを行うことができれば、それは私の競合他社よりも10%高速ですので、注意して。(私が持っているわけではありません。) それに加えて、小規模なFlash開発であろうとエンタープライズJava / C ++開発であろうと、私は常にマネージャーからこの報酬を受け取りました。 編集:私が速いとはどういう意味か、そして私が遅いことをどのように知っているかについて多くの質問があるようです。さらに詳細に説明します。 私は、さまざまなプロジェクトやさまざまなテクノロジー(Flash、ASP.NET、Java、C ++)で、さまざまな企業の中小規模チーム(5〜50人)で働いていました。私のマネージャー(彼らは私に直接言った)の観察は、私が「遅い」ということです。 これは、私の仲間の多くがスピードのために品質を犠牲にしたためです。彼らはバグがあり、読みにくく、保守しにくく、自動テストを書くのが難しいコードを書きました。私のコードは一般に、十分に文書化され、読みやすく、テスト可能です。 Oracleでは、他のチームメンバーよりも一貫してバグをゆっくりと解決していました。私はそのことに対するコメントを得るので、これを知っています。これは、他の(はい、より上級で経験豊富な)開発者が、ほぼ同じ品質(読みやすさ、保守容易性、テスト容易性)で、私がかかった時間よりも短い時間で作業を行えることを意味します。 どうして?私は何が欠けていますか?どうすればこれを改善できますか? 私の最終目標は単純です:今日40時間で製品Xを作成でき、明日20、30、または38時間で同じ製品を作成できるように、なんとか改善できるなら、それが知りたいことです-どうやってそこまで行くの?継続的に改善するためにどのプロセスを使用できますか?コードを再利用することだと思っていましたが、それだけでは十分ではないようです。

7
C#、. NET、ASP、ASP.NETなどの関係[終了]
C#、C#.NET、およびASPと他の '.NET'言語の同じものの違いについては、本当にわかりません。 私が理解していることから、.NETは...もののライブラリ/フレームワークです。フォーム要素などのWindowsデータに本質的にアクセスしていると思いますが、ASP.NETには適用されないようです。 さらに、「。NET」開発者と呼ばれている人もいます。これは、C#、ASP、および他の言語に堪能であることを意味しますか? 最後に、.NETが添付されていないC#は表示されません。C#は、それなしでは使用できないという点で.NETと密接に結びついていますか? 要約すると、.NETは正確に何を提供しますか?C#やASPなどとどのように関係していますか?「.NET開発者」とはどういう意味ですか?そして最後に、なぜ.NETなしでC#が表示されないのですか? [余談ですが、これらは複数の質問であることに気づきましたが、それらは非常に相互に関連していると思います(または少なくとも、プログラマやSOの閲覧が私に与えた印象です)。
143 c#  .net  asp.net 

14
この「継承よりも有利な構成」という概念はどこから来たのでしょうか?
過去数か月で、「継承よりも好意的な構成」というマントラがどこからともなく生まれ、プログラミングコミュニティ内でほぼ何らかのミームになったようです。そして、それを見るたびに、私は少し神秘的になります。誰かが「ハンマーよりもドリルを好む」と言ったようです。私の経験では、構成と継承は異なるユースケースを持つ2つの異なるツールであり、それらを互換性があり、一方が本質的に他方より優れているかのように扱うことは意味がありません。 また、なぜ継承が悪く、構成が良いのかについての本当の説明は見ていません。信仰によって受け入れられるだけなのでしょうか?リスコフ置換とポリモーフィズムには、明確で明確な利点があり、IMOはオブジェクト指向プログラミングを使用するすべてのポイントを構成します。構成を優先して破棄する理由を説明する人はいません。 この概念がどこから来たのか、そしてその背後にある理論的根拠は誰か知っていますか?

8
「モジュールのインポート」と「モジュールのインポート機能から」
私は常にこの方法を使用しています: from sys import argv argvargvだけで使用します。ただし、これを使用する規則があります。 import sys とによってargvを使用して sys.argv 2番目の方法は、コードを自己文書化し、私は(本当に)それに従います。しかし、私が最初の方法を好む理由は、モジュール全体をインポートするのではなく、必要な関数のみをインポートするためです(Pythonはそれらをインポートするのに時間を浪費する無駄な関数を含んでいます)。argvだけが必要であり、sysの他のすべての関数は役に立たないことに注意してください。 だから私の質問は。最初の方法は本当にスクリプトを高速化しますか?どの方法が最も好まれますか?どうして?
143 python 

14
テキスト内のコードを確実に検出する簡単な方法は?
GMailにはこの機能があり、添付ファイルがあると思われるメールを送信しようとすると警告が表示されます。 GMail see the attachedは電子メールで文字列を検出したが、実際の添付ファイルは検出しなかったため、[送信]ボタンをクリックすると、[OK /キャンセル]ダイアログが表示されます。 スタックオーバーフローに関連する問題があります。つまり、ユーザーがこのような投稿を入力すると: 私の問題は、データベースを変更する必要があるが、作成しないことです 新しい接続。例: DataSet dsMasterInfo = new DataSet(); データベースdb = DatabaseFactory.CreateDatabase( "ConnectionString"); DbCommand dbCommand = db.GetStoredProcCommand( "uspGetMasterName"); このユーザーはコードをコードとしてフォーマットしませんでした! つまり、Markdownごとに4つのスペースでインデントしたり、コードボタン(またはキーボードショートカットctrl+ k)を使用してインデントしたりしませんでした。 したがって、私たちのシステムは多くの編集を受け入れており、人々は何らかの方法でこれを理解できない人のためにコードを手動でフォーマットする必要があります。これは多くの反抗につながります。エディターのヘルプを何度か改善しましたが、ユーザーの家に行き、キーボードの正しいボタンを押すだけで、次に何をすべきかわからなくなります。 そのため、Google GMailスタイルの警告を検討しています: コードを投稿するつもりでしたか? 私たちはコードのように見えるものを書きましたが、ツールバーのコードボタンまたはctrl+ kコードフォーマットコマンドを使用して、4つのスペースをインデントすることでコードとしてフォーマットしませんでした。 ただし、この警告を表示するには、質問内のフォーマットされていないコードと思われるものの存在を検出する必要があります。これを行う簡単で半信頼性の高い方法は何ですか? Markdownごとに、コードは常に4つのスペースまたはバックティック内でインデントされるため、正しくフォーマットされたものはすぐにチェックから破棄されます。 これは単なる警告であり、評判の低いユーザーが最初の質問をする(または最初の回答を提供する)場合にのみ適用されるため、約5%以下であれば、いくつかの誤検知は問題ありません。 スタックオーバーフローに関する質問はどの言語でも構いませんが、実際にはチェックを「ビッグ10」言語に制限することができます。タグページごとに、C#、Java、PHP、JavaScript、Objective-C、C、C ++、Python、Rubyになります。 Stack Overflowクリエイティブコモンズデータダンプを使用して、潜在的なソリューションを監査し(またはStack Overflowの上位10個のタグからいくつかの質問を選んで)、それがどのように機能するかを確認します。 擬似コードは問題ありませんが、使いやすくしたい場合はc#を使用します。 シンプルであればあるほど(動作する限り)。キッス!ソリューションで、10種類のコンパイラで投稿をコンパイルする必要がある場合、またはベイジアン推論エンジンを手動でトレーニングするために大勢の人がいる場合、それは...正確には思いませんでした。

17
明確にするためのコーディング標準:コードのすべての行をコメントしますか?
私は、命に関わるソフトウェアを製造する店で働いており、コードを読みやすくして潜在的に命を救うことを意図したコメントルールに対処しました。私の経験では、この要件はチェックリストにチェックを入れるのは頭の痛い雑用になり、理解可能なコードを書くことに集中し続けるのに役立ちません。また、ピアレビューアが、コードを理解しやすくする方法について、より有意義な会話をすることを妨げます。 また、コメントのない学生コードを評価し、それらを無視するためにマークダウンする必要がある理由を確認しました。 適切な名前を使用し、構造をシンプルにし、機能を短くし、モジュールに焦点を当てると、コメントを最小限に抑えることができるほど十分にコードを理解しやすくなります。 また、コメントは、コードが方法ではなく、コードが実行する理由を説明する必要があることも理解しています。 このすべてを考えると、このアイデアをキャプチャする良いコーディング標準を書くことさえ可能ですか?ピアレビューに関連するものの、「42行目にコメントするのを忘れた」以上の有用なメモを生成する、気まぐれなチェックリストアクティビティにならないもの。 このルールがチェックリストの行として扱われる場合に必要となる種類のコードの例: /* Display an error message */ function display_error_message( $error_message ) { /* Display the error message */ echo $error_message; /* Exit the application */ exit(); } /* -------------------------------------------------------------------- */ /* Check if the configuration file does not exist, then display an error */ /* …

30
「より高速な」プログラマになるにはどうすればいいですか?
私の最後の仕事の評価には、ただ一つの弱点が含まれていました:適時性。私はこれを改善するためにできることをすでに知っていますが、私が探しているのはさらにいくつかです。 品質を犠牲にすることなく出力の速度を上げるために何をするかについてのヒントやアドバイスはありますか? タイムラインをどのように推定し、それに固執しますか?より短い期間でより多くのことを成し遂げるために何をしますか? フィードバックは大歓迎です、ありがとう、

2
Gitの分岐とタグ付けのベストプラクティス
現在、Pro Gitを読んでGitの使用方法を学んでいます。今、私は分岐とタグについて学んでいます。私の質問は、いつブランチを使用する必要があり、いつタグを使用する必要があるかです。 たとえば、プロジェクトのバージョン1.1のブランチを作成するとします。このバージョンを終了してリリースしたら、ブランチを残してリリースバージョンをマークする必要がありますか?または、タグを追加する必要がありますか?タグを追加する場合、バージョンブランチを削除する必要があります(マスターまたは他のブランチにマージされていると仮定します)。

10
すべての型を定義する必要がありますか?
最近、コードの可読性に問題が生じました。 操作を実行し、将来の参照のためにこの操作のIDを表す文字列を返す関数がありました(WindowsのOpenFileがハンドルを返すようなものです)。ユーザーは後でこのIDを使用して、操作を開始し、その終了を監視します。 相互運用性の問題のため、IDはランダムな文字列である必要がありました。これにより、次のような非常に不明確なシグネチャを持つメソッドが作成されました。 public string CreateNewThing() これにより、戻り型の意図が不明確になります。この文字列を、次のように意味を明確にする別の型でラップすると思いました。 public OperationIdentifier CreateNewThing() タイプには文字列のみが含まれ、この文字列が使用されるたびに使用されます。 この操作方法の利点は、型の安全性と明確な意図であることは明らかですが、より多くのコードとあまり慣用的ではないコードも作成します。一方で、私は追加された安全性が好きですが、それはまた多くの混乱を作成します。 安全上の理由から、クラスで単純型をラップすることは良い習慣だと思いますか?
141 type-systems 

21
プログラミングの特定の側面が完了するまでに10秒以上かかる場合、どのようにフォーカスを維持しますか?[閉まっている]
何か(コンパイル、起動時間など)が数秒以上かかる場合、私がやっていること(プログラミング)に集中するのは非常に困難です。逸話的には、しきい値は約10秒であるようです(そして、今は見つけることができませんが、同じことを言った研究について読んだことを思い出します)。そのため、通常起こることは、変更を加えてからプログラムを実行してテストすることです。それには約30秒かかりますので、何か他のものを読み始めて、それがわかる前に20分が経過し、プログラミングに戻るためのコンテキストスイッチに対処するためにさらに10分以上かかります(幸運なら!) 。 文字通り完了までに数分かかるものがあると言っても過言ではありません。 私は他のプログラマーがこの傾向と戦うために何をするのかについて非常に興味があります(または私がユニークで、彼らがこの傾向を持たない場合)。どんなタイプの提案も歓迎です-「コンパイルボタンを押した後、あなたの手に座る」からメンタルトリックまで、「変更をテストするために何かを開始するのに30秒かかるなら、開発プロセスで何かがおかしい」 !」

18
短い変数名の言い訳はありますか?
これは、現在作業しているコードベースに大きな不満を感じています。変数名の多くは短く、説明的ではありません。私はプロジェクトに残った唯一の開発者であり、それらのほとんどが何をするかについてのドキュメントがないため、それらが表すものを追跡するために余分な時間を費やす必要があります。 たとえば、光学面の定義を更新するコードを読んでいた。開始時に設定された変数は次のとおりです。 double dR, dCV, dK, dDin, dDout, dRin, dRout dR = Convert.ToDouble(_tblAsphere.Rows[0].ItemArray.GetValue(1)); dCV = convert.ToDouble(_tblAsphere.Rows[1].ItemArray.GetValue(1)); ... and so on たぶんそれは私だけかもしれませんが、それが何を表しているのかを本質的に教えてくれなかったので、コードをさらに理解するのが難しくなりました。私が知っていたのは、それがどこか特定のテーブルから特定の行を解析する変数であることだけでした。いくつかの検索の後、私はそれらが何を意味するかを見つけました: dR = radius dCV = curvature dK = conic constant dDin = inner aperture dDout = outer aperture dRin = inner radius dRout = outer radius 本質的にそこにあるものに名前を変更しました。それはいくつかの線を長くしますが、私はそれが公正なトレードオフだと感じています。ただし、この種の命名スキームは、多くのコードで使用されています。古いシステムで作業して学んだ開発者の成果物なのか、それともより深い理由があるのか​​はわかりません。このように変数に名前を付ける正当な理由はありますか、それとも変数に出会ったときにそれらをよりわかりやすい名前に更新することは正当ですか?

8
悪いプログラミングの慣行は、ソフトウェア業界では一般的ですか?[閉まっている]
私は1ヶ月以上前にソフトウェア開発者として最初の仕事を始めました。OOP、SOLID、DRY、YAGNI、デザインパターン、SRPなどについて私が学んだことはすべて窓から捨てられます。 C#.NET Webformsを使用し、コードビハインド内のほとんどすべてを、オブジェクトとは呼ばない、ごく少数の外部クラスで実行します。カスタムコントロールを使用して再利用します。使用されるオブジェクトは、Entity Frameworkのみです。クライアントごとにコードビハインドを再利用します。それらには、すべての種類の処理を行う400行のメソッドがあります。新しいクライアントの場合、aspxとaspx.csを取得し、クライアントコードを削除して、新しいクライアント固有のコードの追加を開始します。 彼らの最初の言い訳は、それが追加のメンテナンスを追加し、より多くのコードがより多くのメンテナンスであることです。私を含む3人の開発者の小さなお店です。1人の開発者には30年以上の経験があり、もう1人の開発者には20年以上の経験があります。1つはゲーム開発者で、もう1つは常にCとC ++で働いていました。 これはソフトウェア業界内でどのくらい一般的ですか?OOPおよび関連する原則を確実に把握するにはどうすればよいですか?空き時間に練習していますが、OOPをより良くするためには、より経験豊富な開発者の下で働く必要があると感じています。

1
モジュールとパッケージ
from 'x' import 'y'私がするたびに、どれが「モジュール」とみなされ、どちらが「パッケージ」とみなされ、なぜそれが逆ではないのか疑問に思っていましたか?
140 python  packages  modules 

9
マスターブランチよりも多くのカスタマイズされたブランチを維持する
現在、共有リポジトリにPHPアプリケーションのマスターブランチが1つあります。当社のソフトウェアの加入者であるクライアントは500人を超えており、そのほとんどが異なる目的のために、それぞれ個別のブランチにカスタマイズされています。カスタマイズは、異なるテキストフィールド名、まったく新しい機能またはモジュール、またはデータベース内の新しいテーブル/列にすることができます。 私たちが直面する課題は、これらの数百のカスタマイズされたブランチを維持し、クライアントに配布する際に、時々新しい機能を提供し、マスターブランチを更新し、更新するためにマスターブランチの変更をカスタムブランチにプッシュすることですそれらを最新バージョンに。 残念ながら、これによりカスタムコードで多くの競合が発生することが多く、すべての競合を解決するためにすべてのブランチを何時間も費やしています。これは非常に非効率的であり、これらの競合を解決する際に間違いは珍しくありません。 クライアントブランチをマスターブランチに合わせて最新の状態に保ち、マージ中の労力を軽減するより効率的な方法を探しています。


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