ソフトウェア工学

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

7
ソロジュニアデベロッパーとして進捗状況を確認するにはどうすればよいですか[終了]
私は現在、ソロのプライマリ開発者として、2人の会社で働いています。上司がクライアントを取得し、いくつかのpngデザインテンプレートをモックアップして、私に引き渡します。 このシステムはうまく機能しており、本当に楽しんでいます。 私が取り組んでいるプロジェクトの種類は、中小企業向けであり、通常はCMSシステムが必要です。最初から開発し、カテゴリ、タグ、製品などを追加/編集/削除するためにクライアント用にカスタマイズしたバックエンドを構築し、渡されたデザインテンプレートに従ってフロントエンドに出力します。時間が経つにつれて、ショッピングカート/注文機能やその他の一般的なeコマースタイプの機能により、プロジェクトの複雑さが増しました。 繰り返しますが、このシステムは正常に機能しており、本当に楽しんでいます。 私の問題は、プログラマーとしての個人的な成長です。プログラミングブログを読んだり、stackexchangeをチェックしたり、提案されたプログラミング本(現在のところ「The Pragmatic Programmer」で、これまでのところ本当に良い)を読んだり、脳のエクササイズ(lumosity.comとkhanacademy math問題)をしたり、たくさんの運動やその他の個人的な発達型の活動。 私は、フィードバック、批評を見逃していると感じずにはいられません。私の上司は素晴らしく、私の仕事に関して賞賛を決してneverしませんが、残念ながら彼は私のコードをチェックするのに忙しいか、正直なところ、彼の専門分野の1つではないと考えているため、フィードバックを提供できません。 私は何を間違っているのか、何を正しくしているのかを知りたい。コントローラーにそれほど多くのロジックを配置する必要がある場合、コードを十分に変調していますか? だから私がやったことは、小さな「家族予算」アプリを開発し、私が現在知っている方法と同じくらいきれいにそして効果的にそれをやろうとしたことです。 私が知りたいのは、このアプリを提出できる場所があり、ベテランの開発者にフィードバックを提供してもらうことです。「codereview.stackexchange」のような私のコードのサブセクションだけでなく、私が批判したいのは私のワークフロー全体です。 これは多くの質問であり、主なアドバイスはチーム内で仕事を探すことだと思います。これは確かに後の方で検討しますが、今のところは現在の仕事を続けたいと思います。雇用状況、しかしあまりにも多くの悪い習慣を開発したくない。 わかりやすくするためにさらに情報を提供できるかどうか、またはこのタイプの質問にこれが適切な場所でない場合は、事前に謝罪します。私はこのコミュニティがよりよく考えられた応答を促進すると感じたので、redditを使用したくありませんでした。

10
FizzBu​​zz以降の有効性[終了]
面接プロセスの一環として、最初に候補者に「FizzBu​​zz」を行うように依頼します。今日では、FizzBu​​zzに正しく答えることができる候補者の割合が劇的に増加しています。これはWebでの人気による可能性があります。 約1年前、2番目の質問として、元のFizzBu​​zzと非常によく似た質問をし始めました。質問は、元のFizzBu​​zzと同じくらい単純になるように設計されており、候補者の特定の能力、具体的には、いくつかの「ビジネスルール」で意味のある論理的な方法で順序付けおよび優先順位を付ける能力も評価する任意の順序。質問の文言は最初は少し曖昧に見えるので、英語を母国語としない人にとっては難しいかもしれませんが、考え抜かれた問題を正しく解決できる場合は、候補者に明確化のための質問をする機会を与えます。これは常に良いことです。 ソフトウェア開発は通常、時間の経過とともに特定の順序で導出されない機能要件に基づいているため、開発者としてこれは非常に重要なスキルであることがわかります。少なくとも、実装に関する潜在的な問題と競合を調査する鋭い開発者の仕事。 FizzBu​​zzに合格した候補(サンプルサイズ38)の65%を少し超えると、FizzBu​​zz v2.0に完全に失敗することがわかりました。早い段階で。 私の質問は、FizzBu​​zzが古くなっているかどうかではなく、FizzBu​​zz v2の質問に合格しなかった候補者が非常に多いのにどのような要因が関係しているのかということです。 質問は曖昧すぎますか? 面接環境のストレスは、そのような些細なタスクを完了できないという点まで批判的に考える能力を低下させますか? 質問: 入力として文字列のリストを使用するお気に入りのプログラミング言語でルーチンを作成し、リスト内の各文字列に対して次のいずれかを実行します。 文字列に文字Aが含まれる場合、Fizzのみを印刷します 文字列に文字Bが含まれる場合、バズのみを印刷します 文字列にAとBの両方が含まれる場合、BuzzBuzzのみを印刷します 文字列にAとBの両方が含まれていない場合は、FizzFizzのみを印刷します 文字列に含まれるAとBがそれぞれ1つのみの場合は、FizzBu​​zzのみを印刷します 候補者からの典型的な質問は次のとおりです。 大文字と小文字を区別する必要がありますか? 「AとBを含む」は、AがBの前に来ることを意味しますか どのポイントも満たされない場合、何を印刷する必要がありますか? 複数の条件を満たせる場合はどうなりますか? 質問を無事に完了した圧倒的多数の候補者は、FizzBu​​zzのように何も質問しませんでした。
38 skills 

5
Windows / Mac / Linux用のネイティブJavascriptインタープリターがないのはなぜですか?
PerlやPythonとほぼ同じ機能を備えているため、一般的なサーバー側のスクリプト作成タスクにJavascriptを使用すると非常に便利だと思います。しかし、知る限りでは、主要なマシンアーキテクチャ用の一般的に利用可能なJavascriptインタプリタはありません。他の問題はライブラリーの不足かもしれませんが、インタープリターがそこにいた場合は確実に来るでしょう。GoogleのV8が出発点かもしれません。すぐにこれが表示されると思いますか?
38 javascript 

12
C / C ++のコンパイル可能な最新の代替[クローズ]
新しいソフトウェア製品の作成を検討しています。パフォーマンスが重要になるため、インタープリターまたは言語、またはエミュレーションレイヤーを使用する言語(Javaを読む)の使用には注意が必要です。 これにより、C(またはC ++)を使用することを考えることになりますが、どちらもかなり長いです。私も長い間使用していません。過去20年間で、誰かがおそらくかなり人気があり、コードを作成してコンパイルするのに適したものを作成したと考えました。 高性能のコンパイル済みコードを作成するためのCには、他にどのような代替手段がありますか? C ++が15年前とは異なる獣である場合、私はそれを検討するでしょう、私はそれがいくつかの固有の問題を抱えていると仮定したと思います。 並列化は重要ですが、おそらく複数のマシン間ではそうではありません。

5
IDまたはオブジェクトを渡しますか?
ドメインエンティティを取得するビジネスロジックメソッドを提供する場合、パラメーターはオブジェクトまたはIDを受け入れる必要がありますか?たとえば、これを行う必要があります: public Foo GetItem(int id) {} またはこれ: public Foo GetItem(Foo foo) {} オブジェクト全体を渡すことをお勧めしますが、オブジェクトを取得し、IDのみを知っているこの場合はどうでしょうか?呼び出し元は空のFooを作成してIDを設定する必要がありますか、それともメソッドにIDを渡すだけですか?IDを除いて、着信Fooは空になるため、GetItem()メソッドにIDを送信するだけでFooを作成し、IDを設定する必要があるという呼び出し側の利点はありません。

2
ライブラリコードからログを記録する必要がありますか?
Javaライブラリを開発している場合、ライブラリのコード内からログステートメントを発行することをお勧めしますか? ライブラリ内にログを記録すると、デバッグとトラブルシューティングがより透過的になります。ただし、一方で、ロギングステートメントでライブラリコードを散らかすのは好きではありません。考慮すべきパフォーマンスへの影響もありますか?
38 java  logging 

4
Java 1.0の「コア」APIパッケージとは何ですか?
Google v Oracleの事例を読んで、これらの質問に出くわしました(明らかに裁判長から) ... 少なくとも1996年の時点で、以下のことが真実であることに同意しますか? コアJavaアプリケーションプログラミングインターフェイスは次のとおりです。java.lang、java.util、およびjava.io。 Javaプログラミング言語は、上記の3つ以外のメソッド、クラス、またはパッケージを参照または要求していますか? ... ソース:Groklaw 明らかに多くの法的影響がありますが、GoogleとOracleはおそらくいくつかの点で意見が一致せず、私は気にしません。法律は弁護士に任せてください。 ただし、ここには興味深い歴史が少しあると思います。 私の質問は、Javaのバージョン1.0には、(最初の任意のJavaはバージョン1.3に2001の周りにコーディングなかった誰かのように)あるものは外を必要としたjava.lang、java.utilと、java.io有効なJavaプログラムをコンパイルするには? 例として(C#5.0を使用)、awaitキーワードは(特に)に依存しています。コンパイラは、そのクラスなしでは仕様どおりに機能できませんでした。Task<T> GetAwaiter() 同様に、他のパッケージに依存するコアランタイム機能(ClassLoader *など)はありましたか? 私は好奇心から尋ねますが、最小限の実行可能なJava(言語、その周りのすべての法的ビットを無視する言語)に必要なものはまさに興味深いものです。 * ClassLoaderはJava 1.0の機能でさえあると仮定しています。7.0の仕様の一部であり、おそらく以前の多くのバージョンです。
38 java  history 

4
パブリック定数は「悪い」ですか?
これは: public MyClass { public const string SomeString = "SomeValue"; } これより悪い: public MyClass { public static string SomeString { get{ return "SomeValue";}} } どちらも同じ方法で参照できます。 if (someString == MyClass.SomeString) ... ただし、2番目はプロパティであるという保護があります。しかし、実際にはこれはconstよりもはるかに優れていますか? 私は、公共の場を持つことの危険を何度も学びました。したがって、パブリックフィールドでこれらの定数を使用するコードを見たとき、すぐにそれらをプロパティにリファクタリングし始めました。しかし、途中で、定数よりも静的なプロパティを使用することの利点について疑問に思いました。 何か案は?
38 c# 

3
昨日の技術的負債に今日の悪を責める
現在サポートしているアプリケーションで、当初作成しなかった驚くほど多くの品質、スケーラビリティ、および負荷の問題が発生しています。ありがたいことに、私は正気を保つために一からやり直した新しいプロジェクトがあります。 元のチームは20人の開発者(ほとんどが時代遅れのスキルセットを使用)で構成され、ビジネス要件ドキュメントや品質保証テスターはなく、最初からウォーターフォール方式で管理が不十分でした。制作の初期は、もろい手続き型のコードをさらにもろい修正で修正することを伴う恥ずかしい悪夢でした。後に追加された機能は、それらをサポートすることを意図したものではないデータモデルに組み込まれ、同じコードが10回重複して表示され、リソースが安全に閉じられず、何万ものエンティティをフェッチするORMクエリが表示されることも珍しくありません一握りを除いてすべてを捨てる。 それは私だけであり、新しい問題が発生するたびに、モジュールをより良い標準に書き換えて、はるかに安定させますが、管理者はこのすべてが発生する理由について適切な説明が必要です。 彼らは、このアプリケーションの質が低く、技術的負債にownれているという概念にショックを受け、当惑しているように見えます。幸いなことに、彼らは技術的負債の概念を理解し、それを根絶するために私の探求の私をサポートし、彼らは非常に協力的で、私の感謝ですが、私はちょうど続けるかのように私は感じて非難すべての異なる別のプロジェクトを台無しに左のオリジナルチームを(分割)。 一番下の行は、私は彼の前にプロジェクトの開発者について常に文句を言う「あの人」になりたくないということです。私は以前、自分のキャリアの中で無知であり、物事をそのように奨励する状況やデザインの影響を考慮していないと感じた人々からこの態度を見てきました。 通常、私は、以前のチームを、より多くの上級メンバーが経験し、恩恵を受けた人生経験を持っていない理想主義的なジュニア開発者からの貧弱な設計と実装のために非難するこの態度を見る。 あなたの前に人/チームの評判を踏むことなく、これらの種類の問題を経営陣に報告するより良い方法、おそらくもっと柔らかい方法があると感じますか?
38 management 

4
ドメインモデルの検証を配置する場所
ドメインモデル検証のベストプラクティスをまだ探しています。ドメインモデルのコンストラクターに検証を入れるのは良いですか?私のドメインモデル検証の例は次のとおりです。 public class Order { private readonly List<OrderLine> _lineItems; public virtual Customer Customer { get; private set; } public virtual DateTime OrderDate { get; private set; } public virtual decimal OrderTotal { get; private set; } public Order (Customer customer) { if (customer == null) throw new ArgumentException("Customer name must …

4
try-catchにブラケットが必要なのはなぜですか?
さまざまな言語(少なくともJava、C#も考えますか)では、次のようなことができます if( condition ) singleStatement; while( condition ) singleStatement; for( var; condition; increment ) singleStatement; したがって、ステートメントが1つしかない場合、を使用して新しいスコープを追加する必要はありません{ }。try-catchでこれができないのはなぜですか? try singleStatement; catch(Exception e) singleStatement; 常に新しいスコープなどを必要とするtry-catchについて特別なものはありますか?もしそうなら、コンパイラはそれを修正できませんでしたか?

12
時代遅れのコメントは都市の神話ですか?
「コメントは時代遅れになりがちだ」と​​いう主張をする人は常にいます。事は、私は私のキャリア全体で2つまたは3つの時代遅れのコメントを見たことがあると思います。別々のドキュメントの古い情報は常に発生しますが、私の経験では、コード自体の古いコメントは非常にまれです。 誰と仕事をしているのか幸運だったのですか?特定の産業は他の産業よりもこの問題を起こしやすいですか?あなたはありますか特定のあなたが見てきた最近の時代遅れのコメントの例は?それとも、時代遅れのコメントは実際の問題よりも理論的な問題ですか?
38 comments  myth 

6
なぜ関数型プログラミングなのか
関数型プログラミングとは何ですか?私はそれについて多くのことを話しますが、正直なところ、私はそれらがまったく有用だとは思いませんでした。なぜこれほど多くの大学が彼らに教えているのでしょうか?

5
C ++で名前空間を使用するためのベストプラクティス[非公開]
ボブおじさんのクリーンコードを数か月前に読みましたが、コードの書き方に大きな影響を与えました。彼がすべてのプログラマーが知っておくべきことを繰り返しているように見えたとしても、それらをすべてまとめて実践することで、コードがずっときれいになります。特に、大きな関数を多くの小さな関数に分割し、大きなクラスを多くの小さなクラスに分割して非常に役立つことを発見しました。 さて、質問です。この本の例はすべてJavaですが、私は過去数年間C ++で働いています。Clean Codeのアイデアは、Javaには存在しない名前空間の使用にどのように拡張されますか?(はい、Javaパッケージについては知っていますが、実際には同じではありません。) それぞれが明確に定義された責任を持つ多くの小さなエンティティを作成するというアイデアを名前空間に適用することは理にかなっていますか?関連するクラスの小さなグループは常に名前空間でラップされるべきですか?これは、多くの小さなクラスを持つ複雑さを管理する方法ですか、それとも多くの名前空間を管理するコストは法外なものでしょうか? 編集:私の質問は、このウィキペディアのPackage Principlesに関するエントリで回答されています。
38 design  c++  namespace 

10
WPF対WinForms-Delphiプログラマーの視点?
私はWPFとWinFormsの主要なスレッドのほとんどを読みましたが、試行されたものと真の以前の技術(Winforms)と、その後継者(WPF)を決定するときに陥りがちな不幸なアンビバレンスに陥りました。 私は長年にわたりベテランのDelphiプログラマであり、ついにC#へのジャンプを始めています。Delphiの仲間であるDelphiプログラマーは、Delphiで有名なAnders HejlsbergがC#の設計者であることを知って興奮していることを理解します。DelphiのVCLカスタムコンポーネント、特にマルチコンポーネントウィザードや子コンポーネントのコンテナとして機能するコンポーネントの作成に関与するコンポーネントには強い依存症があります。 その背景から、DelphiからC#に切り替えた皆さんが、私の最初のアプリケーションを作成するためのWinFormsとWPFの決定に役立つことを願っています。コーディングや、完全なオートコンプリートや適切なデバッガーサポートなどによってAPIの機能や呼び出しに関する情報がすぐに見つかるなど、バグの回避策を見つけることができるので、私は非常に焦ります。 。 2009年初頭のSOスレッドとコメントは、C#UI開発コーディングを損なう可能性のあるフラストレーションの可能性に関して、WPFに大きな懸念を示しています。一方で、放棄されていなくてもすぐに交換される(WinForms)API技術を学ぶのに膨大な時間を費やすことは、同様に厄介であり、WPFの食欲をそそるGPUサポートを見つけます。 したがって、私のアンビバレンス。私はどちらの技術もまだ習得していないので、新たなスタートを切るまれな機会があり、大きな「未学習」曲線に直面する必要はありません。一方、WPFの使用がイライラしたり、私のような短気なRAD開発者に他の大きなマイナスの結果をもたらす場合は、WPFが同じレベルのサポートと使いやすさを達成するまでWinFormsを使い続けます。プログラマーとしての私の心理を具体的に示すために、私はVBを使用し、その後Delphiを使用して、初期のWindowsアプリの開発中に多くの開発者が苦労したWindows UIライブラリであるMFCによるコーディングの非常に大きな痛みを完全に回避しました。MFCを回避できたことを後悔したことはありません。 Anders HejlsbergがWPFおよび/またはWinFormsのアーキテクチャに手を携えているかどうか、そしてどちらかのコードベースで具体化された創造的なビジョンと使いやすさに不一致があるかどうかを知ることも安心です。最後に、Delphiプログラマーのために、WinFormsとは対照的にWPFを使用するとき、特にデバッガーのサポートに関して、「IDEショック」がどれだけ必要かを教えてください。2011年に更新された求人市場のコメントも歓迎します。
38 c#  wpf  winforms  delphi  microsoft 

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