私はこれと同様の質問があることを知っており、それらのほとんどを読みました。これらの質問に対する答えのほとんどは、フレームワークの「費用対効果」と「時間節約」の側面について語っています。これは、フレームワークの使用を支持する大きな理由です。
私はかなり新しい.NET開発者であり、WPF、MVVM、階層化アーキテクチャ設計、依存関係の注入、ロギング、データベースアクセス、テスト駆動型開発、その他多くの異なるテクノロジー/テクニックなどを学ぼうとしています。
そのようなトピックに関して私が見つけるリソースのほとんどは、与えられたテクノロジー/テクニックを使用する必要がある理由を「示す」ための非常にシンプルな例から始まります。それは正直にそのシンプルな例ではかなり問題ないように見えますが、これらのテクノロジー/テクニックが役立つ実際の問題に対処しなかった人にとっては意味がありません。
特定のテクノロジー/テクニックが本当に何を解決するのか不思議に思う簡単な例の後、彼らは通常続けて、「ねえ、あなたは何を知っている、そのためのフレームワークがある...、それを残りの例のために使ってみましょう。 」依存性注入? Ninjectを使用するだけです。偽物をしたいですか? C'monはMoqを使用します。 MVVM?冗談だろ? MVVM Light Toolkitを使用してください!
本当に素晴らしいです。これらのツールはすべて、きっとすべての開発者の生活を楽にします。しかし、私の問題は、
これらすべてのことから、これらのツールを作成しようとする現実の状況を直接体験することなく、これらすべてのツールを使用するように思えます。
しかし同時に、MVVMまたは優れたレイヤードデザインを使用せずにWPFで巨大なビジネスアプリケーションを作成し、過去に経験したすべての問題を体験して、これらのすべての新しいテクノロジー/テクニックを評価することはできません。何かを開発し、さらに前進し、機能するものをリリースする人々がいるからです。学ぶためにそこにあるすべてを学ぼうとすることに夢中になっているので、私は取り残されます。さらに、これらのことは、最初に自分で問題を経験せずに学ぶのは簡単ではありません。
しかし、同時に、私は新しい会社で働き始めるという悪夢があり、人々は「自分のMVVMフレームワークをコーディングできないのですか?常にPrismを使用する必要があるのですか?Hahahahaha!」そして彼らは輪になって私を指さしながら笑い回ります。
私はあまりプログラマーではないようです。自分でフレームワークを作成するのに必要なものがないように感じます。私は、他の「より良い」人々によって作成されたものだけを組み合わせることができるような気がします。
世界中の経験豊富な人々にお願いしたいのですが、あなたのキャリアを通してどのような戦略を使用しましたか?常に既存のフレームワークを使用していますか?それらのフレームワークが存在する理由を学ぶためにペットプロジェクトを作成しますか?
簡単に言えば、フレームワークの使用と独自のフレームワークの作成の間の細い線を構成するものは何ですか?さらに重要なのは、テクノロジー/テクニックを使用する場合に、実際に発生する問題を確認せずに自動的に発生する知識のギャップをどのように埋めるかです。
私はかなり新しい.NET開発者であり、WPF、MVVM、階層化アーキテクチャ設計、依存関係の注入、ロギング、データベースアクセス、テスト駆動型開発、その他多くの異なるテクノロジー/テクニックなどを学ぼうとしています。
私は何かをすばやく学ぶ方法について素晴らしい話を一度見ました(すみません、それを見つけることができません):
しかし、同時に、私は新しい会社で働き始めるという悪夢があり、人々は「自分のMVVMフレームワークをコーディングできないのですか?常にPrismを使用する必要があるのですか?Hahahahaha!」そして彼らは輪になって私を指さしながら笑い回ります。
私はあまりプログラマーではないようです。自分でフレームワークを作成するのに必要なものがないように感じます。私は、他の「より良い」人々によって作成されたものだけを組み合わせることができるような気がします。
すべてがプログラミングに固有というわけではありませんが、いくつかのアドバイス:
簡単に言えば、フレームワークの使用と独自のフレームワークの作成の間の細い線を構成するものは何ですか?さらに重要なのは、テクノロジー/テクニックを使用する場合に、実際に発生する問題を確認せずに自動的に発生する知識のギャップをどのように埋めるかです。
スキルを間違った方法で練習しても、習得するのに役立ちません。誤って間違って実行したり、他の人が不適切に実行したコードを維持したりする可能性は十分にあります。
これらの種類の質問では、人々は抽象化の最上位層についてのみ心配することも魅力的です。数十年に及ぶプログラミング言語の研究、設計パラダイム、オペレーティングシステム、データベース、コンピューターアーキテクチャに基づいて構築していますが、CMOSテクノロジーがダウンしていても、過去10年かそこら。
人々がウェブページを作り始めたとき、フレームワークのようなものはありませんでした。今後10年間で、あなたが苦労して学んだことは改善され、初心者はそれらの改善の根本的な理由を十分に理解して、TDD、依存性注入、MVVMなどを完全に理解できるかどうか疑問に思います。彼らが物事を比較的小さな機能に分解するべきだというこの新しい考えがいつあったかを覚えている人々はまだ働いています。
つまり、過去10年間の経験不足を心配する必要はありません。今後10年間で、まったく新しい種類の経験が必要になります。
すべての優れたプログラマーと同じように、新しいことを学び、新しい問題を発見し、ソリューションを構築するという3つのことを継続的に実行します。コードの作成(ソリューションの構築)に費やす時間が長いほど、他の2つの問題にうまく取り組むことができます。これは、新しい問題を解明し、役立つ新しいことを学ぶためです。
新しいフレームワークまたは方法論をいつどのように使用するかを知りたいが、コメントを書くライフサイクルのような、もう少し単純なことについて考えてみましょう。
多分コメントは問題ではないのですか?他のすべてのように、あなたはそれを最初に正しく得ることはできません。これが、新しいプログラマーの開発プロセスにおいてメンターが非常に重要(そしてしばしば欠けている)な理由です。すべてを試行錯誤することにあまりにも多くのことが起こっています。データベースを使用するアプリを作成することはないので、キャリア全体を費やしてもORMは必要ありません。
物事を学びたいというのは、健全な好奇心であり、何かを構築するのを妨げるような執着ではない限り、開発者にとって素晴らしいツールです。 TDDは、テストに合格するのに十分なコーディングを行うことで要件を満たすことだけに集中するため、役立つ場合があります。結局、あなたは何かをコーディングして、「これを行うためのより良い方法がなければならない」という結論に達するでしょう。フレームワークを探すか、独自のフレームワークを作成してください。