Jestem młodszym programistą (ok. 3 lata) i przy mojej pracy opracowujemy nowy system. Mój główny programista będzie głównym architektem, jednak rzucił mi wyzwanie, abym sam spróbował zaprojektować system (równolegle).
W trakcie kilku iteracji pomysłów na burzę mózgów i proponowania tego, co widziałem jako sugestie dotyczące architektury, mój trop dał mi informacje zwrotne, że większość tego, co robiłem, to „projektowanie”, a nie „architektura”.
Opisał różnicę jako architekturę niezależną od implementacji, podczas gdy projekt jest opisem implementacji. Powiedział, że muszę zdjąć kapelusz projektanta i założyć kapelusz architekta. Dał mi trochę rad, jak to zrobić, ale chciałbym również zapytać:
Jak wyjść z trybu projektanta oprogramowania i zacząć myśleć bardziej jak architekt?
Oto kilka przykładów „projektów”, które wymyśliłem i które nie były postrzegane przeze mnie jako związane z architekturą:
- Wymyśliłem algorytm do ładowania i rozładowywania zasobów z naszego systemu, a mój szef powiedział, że algorytmy kategorycznie nie są architekturą.
- Wymyśliłem zestaw zdarzeń, które system powinien wywoływać i w jakiej kolejności powinien je wywoływać, ale to również nie wydawało się ograniczać go jako architektury.
Wydaje mi się, że wpadam w szczegóły i nie cofam się wystarczająco daleko. Uważam, że nawet kiedy wpadam na coś, co jest na poziomie architektury, często do tego dochodzę, wypróbowując różne implementacje i zagłębiając się w szczegóły, a następnie uogólniając i abstrahując. Kiedy opisałem to mojemu szefowi, powiedział, że podchodzę do niewłaściwego podejścia: musiałem myśleć „od góry do dołu”, a nie „od dołu do góry”.
Oto kilka bardziej szczegółowych informacji o projekcie :
- Projektowany przez nas projekt to aplikacja internetowa.
- Szacuję około 10-100 tysięcy wierszy kodu.
- Jesteśmy start-upem. Nasz zespół inżynierów liczy około 3-5 osób.
- Najbliższą rzeczą, z którą mogłem porównać naszą aplikację, jest lekki CMS. Ma podobną złożoność i zajmuje się głównie ładowaniem i rozładowywaniem komponentów, zarządzaniem układem i modułami w stylu wtyczek.
- Aplikacja jest ajax-y. Użytkownik raz pobiera klienta, a następnie żąda danych, tak jak potrzebuje tego serwer.
- Będziemy używać wzoru MVC.
- Aplikacja będzie miała uwierzytelnianie.
- Nie jesteśmy bardzo zaniepokojeni starą obsługą przeglądarek (whew!), Więc chcemy wykorzystać najnowsze i najlepsze, które są i będą dostępne. (HTML5, CSS3, WebGL ?, Rozszerzenia źródeł multimediów i wiele więcej!)
Oto niektóre cele projektu :
- Aplikacja musi być skalowana. W najbliższym czasie nasi użytkownicy będą rzędu od setek do tysięcy, ale planujemy od dziesiątek tysięcy do milionów i więcej.
- Mamy nadzieję, że aplikacja będzie dostępna na zawsze. To nie jest rozwiązanie tymczasowe. (W rzeczywistości mamy już rozwiązanie tymczasowe, a my projektujemy długoterminowy zamiennik tego, co mamy).
- Aplikacja powinna być bezpieczna, ponieważ może mieć kontakt z wrażliwymi danymi osobowymi.
- Aplikacja musi być stabilna. (Idealnie byłby stabilny na poziomie Gmaila, ale nie musi znajdować się na skraju łazika Marsa).