Ich sehe einige ernsthafte Probleme mit dieser Frage. Lasst uns beginnen.
So verschwenden Sie keine Zeit mehr mit dem Entwerfen von Architektur
Diese Frage ist eher geladen. Sie entwerfen auch keine Architektur. Du Architekt . Architektur und Design sind komplementäre und verwandte Aktivitäten, aber nicht dasselbe, selbst wenn sie sich überschneiden.
Auf die gleiche Art und Weise, wie Sie Zeit mit der Ausführung von Architekturen (durch Überarchitekturen) verschwenden können, können Sie auch Zeit mit Überdesignen und -codierungen (durch Codieren von Inhalten, die weitaus komplexer als nötig sind, oder wenn dies nicht der Fall ist) verschwenden Code für die Dinge, die erforderlich sind.)
Die richtige Architektur zielt darauf ab, diese Verschwendung bei der Codierung zu verhindern. Dies geschieht durch Einschränkung, Eingrenzung und Dokumentation der Möglichkeiten, wie ein komplexes System 1) entworfen, 2) codiert und getestet, 3) geliefert, 4) gewartet, 5) nach einem Ausfall behoben und 6) endgültig stillgelegt werden soll.
Ich habe die Erfahrung gemacht, dass Leute, die einfach nur Spaß am Codieren haben, einfach codieren, ohne darüber nachzudenken, wie ein System auf lange Sicht zu betreiben und zu warten ist, und zur nächsten heißen Kartoffel übergehen, die eine arme Seele hinterlässt, um einen hässlichen Golem aufrechtzuerhalten.
Aber ich schweife ab...
Dies ist die Sache: Für Systeme, die einfach genug sind, ist die Architektur selbstverständlich und geht aus soliden Entwurfs- und Implementierungspraktiken hervor.
Dies gilt nur für große Systeme, an denen eine große Anzahl von Personen oder Software auf Systemebene beteiligt ist, die sehr komplexe Aufgaben ausführen, für die eine explizite Architektur erforderlich ist.
Ich habe vor kurzem mein Studium an der Uni abgeschlossen und angefangen, als Programmierer zu arbeiten. Ich finde es nicht so schwer, "technische" Probleme zu lösen oder Fehler zu beheben, Dinge, die ich sagen würde, haben 1 Lösung.
Dies ist das Minimum, das für diesen Beruf erforderlich ist, und ich bin froh, dass Sie keine Probleme damit haben (ich würde mir Sorgen machen, wenn Sie dies tun würden.)
Aber es scheint eine Klasse von Problemen zu geben, für die es keine Lösung gibt
Das ist das A und O unseres Berufs, die Art von Problemen, für die Arbeitgeber bereit sind, unsere (typisch) weit überdurchschnittlichen Gehälter zu zahlen.
In der Tat sind Probleme, die es wert sind, gelöst zu werden, solche, die mehr als eine Lösung haben können. Probleme der realen Welt, sie sind so. Und die Welt braucht unser Fachwissen als Softwareentwickler, um akzeptable Kompromisse einzugehen.
- Dinge wie Software-Architektur.
Die Architektur der Dinge ist ein unvermeidliches Merkmal eines komplexen Systems, sei es virtuell / Software oder in der konkreten Welt. Jedes System, das arbeitet, das Input und Output erzeugt, wird komplex sein und eine Architektur haben.
Wenn wir Software für solche Systeme entwickeln (ein Bankensystem, ein Stromüberwachungssystem, ein Ticketverkaufssystem usw.), möchten wir eine Software erstellen, die die Funktionen und Anforderungen eines solchen Systems nachahmt .
Wir können einfach nicht einfach improvisieren und Code es Cowboy - Stil. Wir brauchen eine Art Architektur. Dies gilt insbesondere dann, wenn das Projekt Dutzende von Ingenieuren erfordert, wenn nicht sogar mehr.
Diese Dinge verwirren mich und bereiten mir große Sorgen.
Das ist ok. Es ist kein leichtes Thema zu lernen oder zu lehren, nicht ohne viel Übung.
Ich verbringe Stunden und Stunden damit zu entscheiden, wie ich meine Programme und Systeme "architektonisch" gestalten soll. ZB teile ich diese Logik in 1 oder 2 Klassen auf, wie benenne ich die Klassen, sollte ich diese privat oder öffentlich machen usw. Diese Art von Fragen beanspruchen so viel Zeit und es frustriert mich sehr. Ich möchte nur das Programm erstellen, die Architektur ist verdammt.
Leider ist das keine Software-Architektur.
Es ist nicht einmal Design, sondern nur Codierung. Ich werde am Ende dieses Beitrags einige Vorschläge machen.
Wie komme ich schneller durch die Architekturphase und in die Codierungs- und Debugging-Phase, die mir Spaß macht ?
Es fällt mir schwer, darauf eine Antwort zu finden, denn es ist ziemlich emotional.
Versuchen wir, einen Job zu erledigen, oder versuchen wir nur, die Praxis zu genießen? Es ist großartig, wenn beide ein und dasselbe sind, aber im wirklichen Leben oft nicht.
Es ist großartig, Dinge zu tun, die uns Spaß machen, aber in einem so komplexen Beruf wie dem unseren ist es nicht sinnvoll, sich auf das zu konzentrieren, was uns Spaß macht, um eine fruchtbare Karriere zu haben.
Sie werden nicht weiterkommen, Sie werden nicht reifen oder neues Wissen erwerben.
Es gibt dieses Sprichwort in der Armee: "Umarme das Saugen."
Andere Sätze haben ähnliche Ratschläge. "Wenn es nicht saugt, lohnt es sich nicht" und mein Favorit: "Wenn es saugt (und es ist wichtig), tun Sie es, bis es aufhört zu saugen."
Meine Empfehlungen:
Es scheint mir, dass Sie immer noch Schwierigkeiten haben, die Unterschiede zwischen den beiden zu verstehen
Codierung (wie Sie Ihre Klassen, Module oder was nicht codieren, Namenskonventionen, Zugriffssichtbarkeit, Gültigkeitsbereich usw.),
Design (wie viele Ebenen, Front-End / Back-End / DB, wie jedes kommuniziert, was wohin geht) und die impliziten Architekturentscheidungen, die sich aus dem Design einfacher Systeme ergeben,
Architektur (wie in komplexen Systemen, die Tausende, wenn nicht Hunderttausende von Arbeitsstunden erfordern)
Daher würde ich vorschlagen, dass Sie sich eingehend mit dem ersten Thema (Codierung) befassen, um es auf die nächste Stufe zu heben.
Code bereinigen
Robert "Onkel Bob" Martins "Clean Code" ist ein guter Anfang.
Software-Zusammenhalt
Außerdem würde ich vorschlagen, dass Sie sich mit einer bestimmten objektorientierten Softwaremetrik namens LCOM bzw. LCOM4 vertraut machen.
Es kann ziemlich mathematisch werden und ist nicht kugelsicher, aber Ihr Ziel sollte es sein, empirisch zu verstehen und zu erkennen (oder Augapfel, wenn Sie es wünschen), ob eine Klasse zusammenhängend ist oder ob es an Zusammenhalt mangelt.
http://www.aivosto.com/project/help/pm-oo-cohesion.html#LCOM4
https://www.computing.dcu.ie/~renaat/ca421/LCOM.html
Software-Prinzipien
Dies hängt eng mit dem "Single Responsibility Principle" oder SRY zusammen, mit dem wir alle vertraut sein sollten. SRY ist eines der 5 "SOLID" , mit denen wir alle vertraut sein müssen, um die Codierung beherrschen zu können.
Während wir uns durch die SOLID-Prinzipien bewegen, müssen wir uns auch mit den "GRASP" -Prinzipien vertraut machen , die bestimmen oder vielmehr steuern, wie wir Klassen codieren.
Zusätzliche Bücher
Abschließend möchte ich noch Folgendes vorschlagen:
"Refactoring" von Martin Fowler und Ken Beck wäre das nächste Buch, das ich in dieser Liste gelesen habe.
"Design by Contract, by Example" von Richard Mitchell, Jim McKim und Bertrand Meyer (der spätere von Eiffels Ruhm). Dieses Buch ist vergriffen, aber bei Amazon finden Sie billige, gebrauchte Exemplare.
Hiermit sollten Sie einen guten Einblick in das Codieren und Entwerfen sowie in das Bewegen und Beherrschen (oder zumindest Verstehen) der Softwarearchitektur erhalten.
Ich bin sicher, dass es andere Fachleute geben wird, die diese Vorschläge ergänzen, subtrahieren oder ablehnen. Sie werden mit anderen Vorschlägen aufwarten, die wahrscheinlich durch ihre eigenen Erfahrungen bestätigt wurden.
Ich kann nur folgendes sagen: Es gibt keine Abkürzungen.
Alles Gute.