Widzę kilka poważnych problemów z tym pytaniem. Zaczynajmy.
Jak przestać marnować czas na projektowanie architektury
To pytanie jest raczej załadowane. Nie projektujesz także architektury. Ty architekt . Architektura i projektowanie są działaniami uzupełniającymi się i powiązanymi, ale nie są takie same, nawet jeśli mogą się nakładać.
Podobnie, w ten sam sposób, w jaki można marnować czas na tworzenie architektury (przez nadmierną architekturę), możesz także marnować czas na nadmierne projektowanie i nadmierne kodowanie (przez kodowanie rzeczy w sposób znacznie bardziej skomplikowany niż to konieczne lub przez zaniechanie kod rzeczy, które są wymagane).
Właściwa architektura ma na celu zapobieganie marnotrawstwu w kodowaniu. Robi to poprzez ograniczenie, zawężenie i udokumentowanie możliwych sposobów 1: zaprojektowania złożonego systemu, 2) zakodowania i przetestowania go, 3) dostarczenia, 4) utrzymania, 5) odzyskania po awarii i 6) ostatecznego wycofania z eksploatacji.
Z mojego doświadczenia wynika, że ludzie, którzy po prostu lubią kodować, po prostu kodują, nie myśląc o tym, jak system ma działać i utrzymywać się na dłuższą metę, przechodząc do następnego gorącego ziemniaka, pozostawiając jakąś biedną duszę, aby utrzymać brzydkiego golema.
Ale dygresję ...
O to chodzi: w przypadku systemów prostych architektura jest oczywista i wynika z dobrych praktyk projektowania i implementacji.
Dotyczy to tylko dużych systemów, które wymagają dość dużej liczby osób lub oprogramowania na poziomie systemu, które wykonuje bardzo złożone czynności wymagające wyraźnej architektury.
Niedawno ukończyłem Uni i zacząłem pracować jako programista. Nie jest mi tak trudno rozwiązać problemy „techniczne” lub przeprowadzić debugowanie, rzeczy, które powiedziałbym, że mają 1 rozwiązanie.
To minimum wymagane dla tego zawodu i cieszę się, że nie masz problemu z ich wykonaniem (byłbym zmartwiony, gdybyś zrobił).
Ale wydaje się, że istnieje klasa problemów, które nie mają jednego rozwiązania
To chleb powszedni w naszym zawodzie, rodzaj problemów, za które pracodawcy są skłonni zapłacić nasze (zazwyczaj) znacznie wyższe od przeciętnego wynagrodzenie.
W rzeczywistości problemy warte rozwiązania to takie, które mogą mieć więcej niż jedno rozwiązanie. Problemy w świecie rzeczywistym, takie są. Świat wymaga od nas, jako twórców oprogramowania, naszej wiedzy specjalistycznej, aby uzyskać akceptowalne kompromisy.
- rzeczy takie jak architektura oprogramowania.
Architektura rzeczy jest nieuniknioną cechą złożonego systemu, czy to wirtualnego / oprogramowania, czy w konkretnym świecie. Każdy działający system, który pobiera dane wejściowe i generuje dane wyjściowe, będzie złożony i będzie miał architekturę.
Kiedy tworzymy oprogramowanie dla takich systemów (system bankowy, system monitorowania mocy, system sprzedaży biletów itp.), Staramy się stworzyć oprogramowanie, które naśladuje funkcje i wymagania takiego systemu.
Po prostu nie możemy tego po prostu ułożyć i zakodować w stylu kowbojskim. Potrzebujemy jakiejś architektury. Jest to szczególnie prawdziwe, jeśli projekt wymaga dziesiątek inżynierów, jeśli nie więcej.
Te rzeczy wprawiają mnie w osłupienie i przysparzają mi wielkiego cierpienia.
To dobrze. Nauczenie się lub nauczanie nie jest łatwym przedmiotem, nie bez dużej praktyki.
Spędzam wiele godzin, próbując zdecydować, jak „zaprojektować” moje programy i systemy. Na przykład, czy podzielę tę logikę na 1 lub 2 klasy, jak mam nazwać klasy, czy powinienem to uczynić prywatnym czy publicznym, itp. Tego rodzaju pytania zajmują mi dużo czasu i bardzo mnie to frustruje. Chcę tylko stworzyć program, niech będzie architektura.
Niestety, to nie jest architektura oprogramowania.
To nawet nie projekt, ale tylko kodowanie. Podam kilka sugestii na dole tego postu.
Jak mogę szybciej przejść przez fazę architektury i przejść do fazy kodowania i debugowania, co mi się podoba ?
Trudno mi znaleźć odpowiedź na to pytanie, ponieważ jest to raczej emocjonalne.
Czy staramy się wykonać pracę, czy po prostu czerpiemy przyjemność z praktyki? Wspaniale jest, gdy oba są jednym i tym samym, ale w prawdziwym życiu wiele razy tak nie jest.
Wspaniale jest robić rzeczy, które lubimy, ale w tak złożonym zawodzie, jak nasz, skupianie się tylko na tym, co sprawia nam przyjemność, a to nie sprzyja prowadzeniu owocnej kariery.
Nie będziesz robić postępów, nie dojrzejesz ani nie zdobędziesz nowej wiedzy.
W armii jest takie powiedzenie: „obciągnij ssanie”.
Inne frazy mają podobne rady. „Jeśli to nie jest do bani, to nie jest tego warte” i mój ulubiony: „Jeśli to do bani (i jest to ważne), rób to, aż przestanie ssać”.
Moje rekomendacje:
Wydaje mi się, że wciąż próbujesz zrozumieć różnice między nimi
kodowanie (jak kodować swoje klasy, moduły lub co nie, konwencje nazewnictwa, widoczność dostępu, zakres itp.),
projektowanie (ile poziomów, front-end / back-end / db, jak każdy się komunikuje, co idzie gdzie) i niejawne decyzje dotyczące architektury wynikające z projektowania prostych systemów,
architektura (jak w złożonych systemach wymagających tysięcy, jeśli nie setek tysięcy roboczogodzin).
Proponuję więc zagłębić się w pierwszy temat (kodowanie), aby przenieść go na wyższy poziom.
Wyczyść kod
Dobrym miejscem na początek jest „Clean Code” Roberta „Wujka Boba” Martina
Spójność oprogramowania
Ponadto sugeruję zapoznanie się z konkretną metryką oprogramowania obiektowego o nazwie LCOM, a raczej LCOM4.
Może być dość matematyczny i nie jest kuloodporny, ale twoim celem powinno być empiryczne zrozumienie i wykrycie (lub wzrok, jeśli chcesz), jeśli klasa jest spójna lub brakuje jej spójności.
http://www.aivosto.com/project/help/pm-oo-coicity.html#LCOM4
https://www.computing.dcu.ie/~renaat/ca421/LCOM.html
Zasady oprogramowania
Jest to ściśle związane z „zasadą pojedynczej odpowiedzialności” lub SRY, którą wszyscy powinniśmy znać. SRY jest jednym z 5 „SOLIDNYCH” , z którymi wszyscy musimy się zapoznać, jeśli chcemy osiągnąć biegłość w kodowaniu.
Przechodząc przez zasady SOLID, musimy również zapoznać się z zasadami „GRASP” , które rządzą, a raczej kierują sposobem, w jaki kodujemy klasy.
Dodatkowe książki
Na koniec zasugeruję również:
„Refaktoryzacja” Martina Fowlera i Kena Becka byłaby kolejną książką, którą przeczytałam na tej liście.
„Design by Contract, by example” Richarda Mitchella, Jima McKima i Bertranda Meyera (późniejsza sława Eiffla). Ta książka jest wyczerpana, ale w Amazon można znaleźć tanie, używane kopie.
Dzięki temu powinieneś dobrze zrozumieć, jak zacząć kodować i projektować, a także, w praktyce, przenosić i opanować (lub przynajmniej zrozumieć) architekturę oprogramowania.
Jestem pewien, że będą inni specjaliści, którzy dodają, odejmują lub sprzeciwiają się tym sugestiom. Wymyślą inne sugestie, prawdopodobnie potwierdzone przez własne doświadczenie.
Mogę tylko powiedzieć, że nie ma skrótów.
Wszystkiego najlepszego.