ソフトウェア工学

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

7
ジュニア開発者はシニアチームリーダーに何を期待すべきか[非公開]
免責事項:表明された意見は私自身のものであり、雇用主の意見や意見を表明するものではありません。 私は小さな会社で働いており、開発者はほとんどいませんが、QA / Testは1人、マネージャーは1人です。1.5年前にこの会社に入社しました。3人の上級開発者は8年以上の経験があります。 これらは私がチームリーダーについて行った観察です。(私をすべての面で彼らと比較して経験の少ない新鮮な人と考えています) 1対1で議論することも、後輩の提案を検討することもありません(受け入れるかどうかにかかわらず、少なくとも意見を検討する必要があることに同意します)。 シニアチームリーダーとして、彼らはコードベースを新しいテクノロジーでリファクタリングすることを試みることができます(新しいテクノロジーを展開する要因が可能であり、他の開発者やインフラストラクチャも準備ができています)が、これらのチームリーダーは、それらは最新ではありません。(私が言っている理由は、現在のプログラミングの傾向がわからない、*(modernizr、ブートストラップなどの人気のあるオープンソースプロジェクトなど)。 私たちのコードベースでは10000行以上が繰り返されているので、私は彼らにについて話しましたDRY: Don't Repeat yourself。彼らの回答は、「これは魅力的な記事ですが、実際には機能しません」でした。私たちは、100%DRYにしない場合、少なくともインターフェイスを使用できると伝えましたが、それも考慮されていませんでした。*(リファクタリングの準備ができていない場合、以前のコードベースに触れることなく、新機能用のインターフェイスを追加できます) すべての上級開発者は、パッチのメンテナンスとホットフィックスを行います。残りの時間はエンターテインメントサイトに費やすだけです。彼らは仕事を終えて喜んでいます。 新しい技術の導入は悪いですか?*(実現可能性の要素を含むことができます)。 マネージャーはまた、私が話していることについてあまり心配していません。 ジュニアは、チームリーダーから多くのことを学ぶことができると期待しています。*(彼らに助けを求めたり、上級コーディングを求めたりするのではなく)。 私の質問は: 私が提案している変更について私はあまりにも積極的ですか? 8年以上の経験を持つシニア開発者のリーダーには何を期待すべきですか? 会社から学び、経験を積むことを期待するのは間違っていますか? 更新: 彼らが乾いたと感じるのは非現実的です:彼らはOOPの概念に関与したくないからです。彼らはタスクを繰り返すことに満足しています。 私が提案している新しい技術: CSS、JS、SPriteイメージの縮小の使用 インターフェースおよび.netフレームワーク4、ジェネリックなど多くの使用方法。 modernizr、knockout js、レスポンシブ用のブートストラップなどのクライアント側ライブラリ、

2
NaNボクシングの目的は何ですか?
21世紀Cを読んで、第6章の「例外的な数値をNaNでマークする」セクションに到着しました。ここでは、仮数部のビットを使用して任意のビットパターンを格納し、マーカーまたはポインターとして使用する方法について説明しています(本の言及そのWebKitはこの手法を使用しています)。 このテクニックの有用性を理解したかどうかはよくわかりませんが、ハック(NaNの仮数の値を気にせずハードウェアに依存している)に見えますが、私は慣れていないJavaのバックグラウンドから来ていますCの粗さ NaNのマーカーを設定および読み取るコードのスニペットを次に示します #include <stdio.h> #include <math.h> //isnan double ref; double set_na(){ if (!ref) { ref=0/0.; char *cr = (char *)(&ref); cr[2]='a'; } return ref; } int is_na(double in){ if (!ref) return 0; //set_na was never called==>no NAs yet. char *cc = (char *)(&in); char *cr = (char *)(&ref); for …

8
再帰アルゴリズムでスタックオーバーフローを回避するための方法は何ですか?
質問 再帰アルゴリズムによって引き起こされるスタックオーバーフローを解決する可能な方法は何ですか? 例 Project Eulerの問題14を解決しようとしていますが、再帰アルゴリズムを使用して試してみることにしました。ただし、プログラムはjava.lang.StackOverflowErrorで停止します。分かりました。非常に大きな数のCollat​​zシーケンスを生成しようとしたため、アルゴリズムは実際にスタックをオーバーフローさせました。 解決策 だから私は疑問に思っていました:あなたの再帰アルゴリズムが正しく書かれており、常にスタックをオーバーフローさせると仮定して、スタックオーバーフローを解決するための標準的な方法は何ですか?思いついた2つの概念は次のとおりです。 末尾再帰 繰り返し アイデア(1)と(2)は正しいですか?他のオプションはありますか? 編集 できればJava、C#、Groovy、またはScalaでコードを表示すると役立ちます。 おそらく上記のプロジェクトオイラーの問題を使用しないでください。そうすれば、他の人にとっては甘やかされることはありませんが、他のアルゴリズムを使用できます。階乗かもしれない、または似たようなもの。

5
Javaが型推論を行わないのはなぜですか?
私はいつも、Javaが言語であり、そのVMが非常に成熟していることを考えると、Javaが型推論を行わない理由を常に疑問に思っていました。GoogleのGoは、優れた型推論を備えた言語の例であり、必要な入力の量を減らします。この機能がJavaの一部ではない背後に特別な理由はありますか?

4
Pythonの許しと許可とダックタイピング
Pythonでは、「許可を求める」(タイプ/条件チェック)よりも「許しを請う」(例外をキャッチする)の方が良いとよく耳にします。Pythonでのダックタイピングの強制に関して、これは try: x = foo.bar except AttributeError: pass else: do(x) より良いか悪い if hasattr(foo, "bar"): do(foo.bar) else: pass パフォーマンス、可読性、「pythonic」、またはその他の重要な要素の面で?

3
MVCデザインのどこにビジネスロジックを配置しますか?
データフォームを介してデータベースにレコードを追加する簡単なMVC Javaアプリケーションを作成しました。 私のアプリはデータを収集し、検証して保存します。これは、データがさまざまなユーザーからオンラインで調達されているためです。データは本質的にほとんど数値です。 データベース(SQLサーバー)に格納されている数値データで、計算を実行して結果を表示するアプリを作成します。ユーザーは計算の実行方法に関心がないため、カプセル化する必要があります。ユーザーは、単純な計算データ(たとえば、A列データからB列データをC列データで除算したもの)のみを表示できる必要があります。同じストアドプロシージャを記述する方法は知っていますが、3層アプリが必要です。 データベースにレコードとして入れて、計算を実行して処理したデータが必要です。元のデータは影響を受けないまま、計算後の新しいデータは新しいエンティティレコードとしてデータベースに保存する必要があります。 このバックグラウンド計算用のコードはどこに書くべきですか?ルールとビジネスロジックなので、新しいJavaBeansファイルに入れる必要がありますか?

4
githubのメンテナーはプルリクエストで著者を書き換えるべきですか?
私は専門職のプログラマーではありませんが、いくつかのコーディングを行い、githubを使用しています。私は驚くべき状況だと思うことに出くわしました。私はgitに精通しています。 私に影響を与えている(小さな)バグを見つけたプロジェクトがあります。午後はそれを見つけて修正しました。リポジトリをフォークし、変更をコミットし、プルリクエストを発行しました。「開発ブランチにマージされた」として閉じられているのを見て、すべてがうまくいったと思いました。 今日、ブランチを削除する準備をしてレポジトリを参照していましたが、メンテナのレポジトリにコミットがマージされた場所がまったく見つかりません。しばらくして、コミットとして追加されたことに気付きましたが、作成者は私ではありません。 私ができる限り、それを行う唯一の方法は、元の著者を削除するためにリベース、修正、またはその他の履歴書き換えを具体的に使用することです。 これは私には非常に間違っているようです。せいぜい紛らわしいです。最悪の場合、このレポの作成者は全員のコミットを信用しているため、元の貢献者の履歴は失われます。繰り返しますが、これは小さなバグです。プロの履歴書には使用していません。不正直に思えます。 これは正常ですか?私はそれについて何か言うべきですか? 編集:一般的な感じは私が尋ねに行くべきだと思われるので、私は今朝ちょうどそれをします。 以下のリクエストに従って。私はチェックし、コードが存在し、私が書いたとおりに正確に適用されました(コメントを含む)。コミッターと著者の両方が変更されたことを確認しました。私の変更と同時に追加された変更も1つありました。これは1行で、パッチとそれ以前のその他のコードに影響します。IEの1行の追加は、修正していたバグとは関係ありません。 更新 答えは、作成者が開発ブランチを維持しており、マスターブランチからそこにマージしたくないということでした。彼はマージを回避するために私のコミットを再作成しました。元のブランチb / c gitは、必要に応じてコミットをチェリーピック、リベース、およびマージするのに強力です。 これはgithubでは一般的ですか? どのブランチにパッチを適用するかを尋ねるためにプロジェクトのメンテナーに連絡する必要がありますか?
44 git  github 

6
文字列リテラルでchar []を初期化するのは悪い習慣ですか?
私はCodeGuruで「strlen vs sizeof」というタイトルのスレッドを読んでいましたが、回答の1つは「とにかくchar文字列リテラルで配列を初期化する[sic]悪い習慣です」と述べています。 これは本当ですか、それとも彼の(「エリート会員」ではあるが)意見ですか? 元の質問は次のとおりです。 #include <stdio.h> #include<string.h> main() { char string[] = "october"; strcpy(string, "september"); printf("the size of %s is %d and the length is %d\n\n", string, sizeof(string), strlen(string)); return 0; } 右。サイズは長さに1を加えたものでなければなりませんか? これは出力です the size of september is 8 and the length is 9 サイズは必ず10にする必要があります。strcpyによって変更される前に文字列のsizeofを計算し、その後に長さを計算するようなものです。 私の構文に何か問題がありますか? ここで回答は: とにかく、文字列リテラルでchar配列を初期化するのは悪い習慣です。したがって、常に次のいずれかを実行してください。 …

10
要件のないソフトウェアの作成は、所有するスキルまたは避けるべき状況ですか?
一部のソフトウェア開発者はこれに非常に熟達しており、抽象的な要件を備えた実用的なコンセプトを提供できることで称賛されることがよくあります。率直に言って、これは私を夢中にさせ、私は行くにつれて「作り上げる」のが好きではありません。以前はこれが問題だと思っていましたが、変化を感じ始めました。そして、方向性がほとんど与えられていないときに思考(およびプログラミング)プロセスを調整する必要があるかどうか疑問に思っています。この能力をスキルとして習得し始める必要がありますか、それとも要件の収集とビジネスルールが最優先事項であるという考えに固執する必要がありますか?

15
言語はCPU設計にどのように影響しましたか?[閉まっている]
私たちはされていることが多い語ったが、これは真実ではない、ハードウェアは、プログラムがそれだけでコンパイルされたバイナリコードを見ているように書かれている言語を気にしないこと。たとえば、謙虚なZ80を考えてみましょう。8080命令セットへのその拡張には、C-スタイル(NULLで終了する)文字列をスキャンするのに役立つCPIRなどの命令が含まれますstrlen()。設計者は、Cプログラムの実行(文字列の長さがヘッダーにあるPascalとは対照的に)が、設計で使用される可能性が高いことを特定している必要があります。別の古典的な例は、Lisp Machineです。 他にどんな例がありますか?たとえば、特定のプロセッサが特定の言語の規則を好むようにする命令、レジスタの数とタイプ、アドレス指定モードはありますか?私は特に同じ家族の改訂に興味があります。

15
未使用の変数に単一のアンダースコアを付けるのは悪い習慣ですか?
多くの場合、言語の構文で使用されない変数に名前を付ける必要がある場合は、名前を付け_ます。 私の考えでは、これにより混乱が減り、コード内の意味のある変数に集中できます。「目立たない、気にしない」効果を生み出すように、目立たないことがわかりました。 私がこれを行う場所の一般的な例は、SQLでサブクエリに名前を付けることです。 SELECT * FROM ( SELECT * FROM TableA JOIN TableB ON TableA.ColumnB = TableB.ColumnB WHERE [ColumnA] > 10 ) _ --This name is required, but never used here ORDER BY ColumnC 別の例は、使用されないループ変数です。 array = [[] for _ in range(n)] # Defines a list of n empty lists …

7
面接中に候補者のHtml / CSSの知識を評価するにはどうすればよいですか?[閉まっている]
私はHtml / CSSの仕事に来る人々の能力を評価するためにいくつかの良いインタビューの質問を決定しようとしていますが、そのトピックは非常に広範であり、誰かのHTML / CSSの知識。 面接中に候補者のHtml / CSS能力を評価するには、どのような質問をすればよいですか? 理想的には、いくつかの質問をしてから、実際の生活シナリオを提示して戦いたいと思います。

13
デザインパターン-使用しますか?
ITの学生である私は、最近、教師の1人からデザインパターンに関する概要を説明されました。私はそれらが何のためにあるのかを理解しましたが、いくつかの側面はまだ私を悩ませ続けています。 大多数のプログラマーによって本当に使用されていますか? 経験といえば、プログラミング中にいくつかの問題があり、しばらくは解決できませんでしたが、Googleと数時間の研究で問題を解決しました。Webのどこかで問題を解決する方法を見つけた場合、これは設計パターンですか?私はそれを使用していますか? また、開発を開始するとき、あなた(プログラマー)はパターンを探していることに気づきます(ところで、私はどこを見るべきでしょうか?)。もしそうなら、これは確かに私が受け入れ始めなければならない習慣です。 更新:プログラマーがそれらを使用するかどうかを尋ねると、問題を解決するために「ああ、私はそのパターンを使用するべきだ」と思うかどうかを尋ねていると思います。

1
トリアージされていないバグとは何ですか?
私はコンピューターサイエンスの学部生です。いくつかのプロジェクトにバグを報告しようとしたとき、私は多くのトリアージされていない分類に出会いました。Web検索では、これが何を意味するのか実際には説明しませんでした。 トリアージされていないバグとは何ですか?

12
プログラミングの知識を保持するのに役立つテクニックは何ですか?[閉まっている]
プログラミング関連のものをどのように覚えていますか?数年前、今あなたが前に持っていたエラーに遭遇し、その時その原因を知っていたが、今ではそれを忘れていると誓うことができると感じたことがありますか? 少し前にxslの文字列解析で作業しましたが、xslの文字列関数がどれであるかを正確に思い出せず、ゼロから開始する必要がありますか?あるいは、過去に使用したことがある「述語によるコレクションのフィルタリング」など、Apache Commonsの機能を忘れてしまったかもしれません。 それでどうやってやるの?ブログを作成しようとしましたが、アプリを開発するときに、ブログを更新したり、自分の経験について書いたりする時間がありません。また、Wikiを使用することは良いことですが、ブログの投稿を変更してそのトピックに関する新しい情報を追加する必要が何度もあったため、Wikiを明確に分離することは困難でした。これにより、このトピックをブログではなくwikiに実際に置くべきだと思いました。 プログラミングの経験を思い出すのに役立つシステムはありますか?あなたのセットアップは何ですか?

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