この質問には重大な問題がいくつかあります。始めましょう。
建築設計の時間を無駄にするのをやめる方法
この質問はかなりロードされます。また、アーキテクチャを設計しません。あなたは建築家。アーキテクチャと設計は補完的で関連するアクティビティですが、重複する場合でも同じではありません。
同様に、アーキテクチャの実行に時間を浪費すること(オーバーアーキテクト化による)と同様に、過剰な設計とオーバーコーディングに時間を浪費することもできます(必要以上に複雑な方法でコードをコーディングすることにより、または必要なもののコード。)
適切なアーキテクチャは、コーディングの無駄を防ぐことを目的としています。複雑なシステムを1)設計、2)コード化およびテスト、3)配信、4)メンテナンス、5)障害からの回復、および6)最終的な廃止の可能な方法を制限、絞り込み、文書化します。
私の経験では、されているだけで、彼らはただコーディング楽しむ人々そのコードをシステムが動作し、次へ移動、長期的に維持することがいかにの任意の考えなしにホットポテト醜いゴーレムを維持するために、いくつかの貧しい人々の魂を残します。
しかし、私は脱線します...
これが重要なことです。十分に単純なシステムの場合、アーキテクチャは自明であり、適切な設計と実装の実践から発します。
これは、かなり多数の人が関与する大規模システムや、明示的なアーキテクチャを必要とする非常に複雑な処理を行うシステムレベルのソフトウェア専用です。
私は最近、大学を卒業し、プログラマーとして働き始めました。「技術的な」問題を解決したり、デバッグをしたりするのはそれほど難しいことではありません。
これがこの職業に最低限必要なものであり、あなたがそれらを行うのに問題がないことをうれしく思います(もしあなたがそうしたら心配するでしょう)。
しかし、1つの解決策を持たない問題のクラスがあるようです
これらは私たちの職業の基本であり、雇用主が私たちの(通常)平均以上の給与を喜んで支払う問題のタイプです。
実際のところ、解決する価値のある問題は、複数の解決策を持つことができる問題です。現実世界の問題、彼らはそのようなものです。そして、世界では、許容できるトレードオフを考え出すために、ソフトウェア開発者としての専門知識が必要です。
-ソフトウェアアーキテクチャなど。
物事のアーキテクチャは、仮想/ソフトウェアであろうと具体的な世界であろうと、複雑なシステムの避けられない特性です。動作し、入力を受け取り、出力を生成するすべてのシステムは複雑で、アーキテクチャを備えています。
このようなシステム(銀行システム、電力監視システム、チケット販売システムなど)のソフトウェアを開発するとき、そのようなシステムの機能と要件を模倣するソフトウェアを作成することを目指しています。
私たちは単にそれを翼にして、カウボーイスタイルでコーディングすることはできません。何らかのアーキテクチャが必要です。これは、プロジェクトが数十人のエンジニアを必要とする場合に特に当てはまります。
これらのことは私を混乱させ、大きな苦痛を引き起こします。
それは大丈夫です。学ぶことや教えることは簡単なことではなく、多くの練習が必要です。
私は自分のプログラムとシステムをどのように「アーキテクト化」するかを決めるのに何時間も費やしています。たとえば、このロジックを1つまたは2つのクラスに分割したり、クラスにどのように名前を付けたり、プライベートまたはパブリックにしたりする必要があるかなどです。私はプログラムを作成したいだけで、アーキテクチャはとんでもないものです。
残念ながら、それはソフトウェアアーキテクチャではありません。
デザインではなく、コーディングだけです。この投稿の最後にいくつかの提案を提供します。
どうすれば、より迅速に、アーキテクチャ段階は通過し、コーディングとデバッグ相上に取得することができ、私は楽しんでいますか?
私はこれに答える方法を見つけるのに苦労しています。それはむしろ感情的なものだからです。
私たちは仕事を成し遂げようとしているのか、それともただ練習を楽しんでいるだけなのか?両方が同一である場合は素晴らしいことですが、実際の生活では多くの場合そうではありません。
私たちが楽しむことをするのは素晴らしいことですが、私たちのような複雑な職業で、私たちが楽しんでいることに集中することは、実りあるキャリアを持つために伝導的ではありません。
進歩したり、成熟したり、新しい知識を獲得したりすることはありません。
軍隊には「吸うことを受け入れる」という言葉があります。
他のフレーズにも同様のアドバイスがあります。「それが吸わないなら、それは価値がない」と私のお気に入り、「それが吸う(そしてそれが重要である)なら、吸うのをやめるまでそれをしてください。」
私の推奨事項:
あなたはまだ違いを理解するのに苦労しているように思えます
コーディング(クラス、モジュール、またはそうでないもののコーディング方法、命名規則、アクセスの可視性、スコープなど)、
設計(層数、フロントエンド/バックエンド/ db、各通信方法、どこへ行くか)および単純なシステムの設計から生じる暗黙的なアーキテクチャの決定、
アーキテクチャ(数十万時間ではないにしても、数千時間を要する複雑なシステムに見られる)
したがって、次のレベルに進むために、最初の主題(コーディング)を深く掘り下げることをお勧めします。
きれいなコード
Robert "Uncle Bob" Martinの"Clean Code"は開始するのに適した場所です。
ソフトウェアの凝集
さらに、LCOMまたはLCOM4と呼ばれる特定のオブジェクト指向ソフトウェアメトリックに精通することをお勧めします。
それはかなり数学的になる可能性があり、防弾ではありませんが、あなたの目標は、クラスが凝集しているか凝集していないかを経験的に理解して検出することです(または、必要に応じて目玉)。
http://www.aivosto.com/project/help/pm-oo-cohesion.html#LCOM4
https://www.computing.dcu.ie/~renaat/ca421/LCOM.html
ソフトウェアの原則
これは、私たち全員がよく知っているべき「単一責任原則」またはSRY と密接に関連しています。SRYは、コーディングに習熟するために必要な5つの「ソリッド」の 1つです。
SOLIDの原則を順を追って進めると、クラスをコーディングする方法を管理する、またはむしろガイドする「GRASP」の原則にも慣れる必要があります。
追加の本
最後に、次のこともお勧めします。
これにより、コーディングと設計を開始する方法をよく理解し、実際にソフトウェアアーキテクチャを移動してマスターする(または少なくとも把握する)必要があります。
これらの提案に追加、削除、または反対する他の専門家がいると確信しています。彼らは、おそらく彼ら自身の経験によって検証された他の提案を思いつくでしょう。
私が言えることはこれだけです-近道はありません。
ではごきげんよう。